Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Кодирование и шифрование информации в системах связи

..pdf
Скачиваний:
29
Добавлен:
05.02.2023
Размер:
20.43 Mб
Скачать

521

Функция шифрования Salsa20

Пусть k – это 32или 16-байтовый секретный ключ, iv – 8-байтовый вектор инициализации, m – открытый текст. Тогда шифрование последовательности m шифром

Salsa20 с помощью вектор инициализации iv на ключе k, обозначается Salsa20k(iv) m

шифрованный текст. Либо m может быть шифрованным текстом, в случае, когда Salsa20k(iv)m является исходным открытым текстом.

Поточный шифр SOSEMANUK

Sosemanuk – синхронный поточный шифр [6]. Шифр Sosemanuk использует принципы базовой конструкции поточного шифра SNOW 2.0 преобразования блочного шифра

SERPENT. Поэтому разработчики решили, что название этого шифра должно относиться и к SERPENT и к SNOW. Однако, известно, что снежных змей не существуют, т.к. змеи либо впадают в спячку, либо перемещаются в более теплые страны на зимы. С другой стороны Sosemanuk – популярный спорт, в который играют восточные канадские племена.

Он состоит в броске деревянной палки по сугробу как можно дальше. Его название на языке Cree означает snowsnake, так как палка на снегу похожа на змею. Kwakweco-cime win – вариант той же самой игры, но для названия шифра не походит.

Sosemanuk – синхронный поточный шифр, ориентированный на программную реализацию. Размер ключа варьируется между 128 и 256 битами. Утверждается, что при любой длине ключа достигается 128-битная безопасность. Sosemanuk стремится улучшить

SNOW 2.0 в двух отношениях. Во-первых, в Sosemanuk избегаются некоторые свойства структуры, которые могут проявиться как потенциальные слабости, даже если шифр

SNOW 2.0 с 128-битным ключом сопротивляется всем известным нападениям. Во-вторых,

эффективность улучшена относительно нескольких архитектур, уменьшением размера внутреннего состояния, таким образом допускается более прямое отображение данных относительно регистров процессора. Sosemanuk также требует меньшего количества статических данных; соответственно более низкого использования кэша данных, что приводит к лучшей работе на некоторых архитектурах. Другое достоинство Sosemanuk –

то, что его процедура установки ключа основана на сокращенной версии блочного шифра

SERPENT, улучшая классические процедуры инициализации и с точки зрения эффективности и с точки зрения безопасности.

SERPENT и его производные

SERPENT – блочный шифр, предложенный в качестве AES кандидата. SERPENT

работает с 128-битовыми блоками, которые разбиваются на четыре 32-разрядных слова, а

522

затем объединяются в так называемом “секционном” (“bitslice”) режиме. Таким образом

SERPENT может быть определен как шифр, работающий с четверкой 32-битовых слов. Мы нумеруем входные и выходные четверки SERPENT’а от 0 до 3, и пишем им в порядке: (Y3,

Y2, Y1, Y0). Y0 – самое младшее слово, содержащее младшие разряды 32-ух 4-битовых входных данных для S-блоков SERPENT’а. После того как выходной поток SERPENT’а

записывается в 16 байтов, в значения Yi записываются в соответствии со следующим условным обозначением littleendian (вначале самый младший байт), и сначала выводится Y0,

затем Y1, и так далее.

Из SERPENT разработчики определили два примитива по имени Serpent1 и Serpent24.

Циклы SERPENT’а состоят из:

добавления подключа поразрядным исключающим или (XOR);

применения s-блока, которое заключается в ряде поразрядных комбинаций между четырьмя обрабатываемыми 32-битовыми словами, в

секционном режиме (bitslice mode);

линейного биективного преобразования, которое равнозначно нескольким XOR’ам, сдвигам и циклическим сдвигам в секционном режиме

(bitslice mode).

Serpent1 – один раунд шифра SERPENT, без добавления ключа и линейного преобразования. SERPENT использует восемь различных S-блоков, пронумерованных от S0

до S7, рассчитанных на 4-битовые слова. Мы определяем Serpent1 как применение S2, в

секционном режиме (bitslice mode). Это третий S-блоковый уровень шифра SERPENT. Serpent1 использует в качестве входных данных четыре 32-битовых слова, и вырабатывает четыре 32-битовых слова в качестве выхода.

Serpent24 – это SERPENT, сокращенный до 24 раундов, вместо полной 32-х раундовой версии SERPENT. Serpent24 соответствует первым 24 раундам шифра SERPENT, причем последний (24-й) раунд полный – с линейным преобразованием и XOR’ом с 25-ым подключом. Другими словами, 24-ый раунд Serpent24 эквивалентен тридцать второму раунду шифра SERPENT, за исключением того, что содержит линейное преобразование и использует 24-ый и 25-ый подключи (32-ый и 33-ий подключи в SERPENT).

Соответствующее уравнение последнего раунда приведено в [32_Serpent]

 

 

 

 

 

 

 

R

X L S 23

X K 23

 

 

K 24

23

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Serpent24 использует только 25 128-битовых подключей, которые являются первыми 25

подключами, производящимися в соответствии со схемой разворачивания ключа шифра

523

SERPENT. В Sosemanuk Serpent24 используется на этапе инициализации, только в режиме шифрования. При расшифровании не используется.

Инициализация

Процесс инициализации Sosemanuk разбит на два шага:

схема разворачивания ключа, которая подвергает обработке секретный ключ, но не зависит от вектора инициализации IV;

добавление вектора инициализации IV, которое использует выход схемы разворачивания ключа и вектор IV.

Таким образом, инициализируется внутреннее состояние поточного шифра.

Установка ключа соответствует схеме разворачивания ключа в Serpent24, которая производит 25 128-битовых подключей, как 100 32-битовых слова. Эти 25 128-битовых подключей идентичны первым 25 128-битовым подключам, производящимся в соответствии с простой схемой разворачивания ключа в SERPENT.

SERPENT допускает любую длину ключа длину от 1 до 256 битов; следовательно, Sosemanuk может работать с точно такими же ключами. Однако, так как Sosemanuk

стремится к 128-битовой безопасности, длина его ключа должна быть по крайней мере 128

битов. Поэтому, 128 битов – стандартная длина ключа. Поддерживается любая длина ключа от 128 битов до 256 битов. Но, уровень безопасности все же соответствует 128-битовой безопасности. Другими словами, использование более длинного секретного ключа не гарантирует обеспечение уровня безопасности, обычно ожидаемого от такого ключа.

Вектор IV является 128-битовым значением. Используется в качестве входа для блочного шифра Serpent24, инициализированный в соответствии со схемой разворачивания ключа. Serpent24 состоит из 24 раундов, используются выходы 12-го, 18-

го и 24-го раундов. Мы обозначим эти выоды следующим образом:

(Y312, Y212, Y112, Y012) – выход 12-ого раунда;

(Y318, Y218, Y118, Y018) – выход 18-ого раунда;

(Y324, Y224, Y124, Y024) – выход 24-ого раунда.

Выход каждого раунда состоит из четырех 32-битовых слов, берущихся только после линейного преобразования, за исключением 24-ого раунда, для которого выход берется только после добавления 25-ого подключа.

Эти значения используются для инициализации внутреннего состояния Sosemanuk’а со следующими значениями:

(s7, s8, s9, s10) = (Y312, Y212, Y112, Y012)

st+8)) mod 232

524

(s5, s6) = (Y118, Y318)

(s1, s2, s3, s4) = (Y324, Y224, Y124, Y024) R10 = Y018

R20 = Y218

Генерация ключевого потока

Для формирования выходных значений zt используется конечный автомат (FSM, Finite State Machine) и функция Serpent1.

Конечный автомат (FSM) – компонент с 64 битами памяти, аналогичный двум 32-

битовым регистрам R1 и R2. В каждом шаге FSM берет в качестве входных данных некоторые слова из состояния LFSR; обновляет биты памяти и производит 32-битовый выход. FSM оперирует состоянием LFSR в моменты времени t 1 следующим образом:

FSMt: (R1t–1, R2t–1, st+1, st+8, st+9) (R1t, R2t, ft)

где

R1t = (R2t–1 + mux(lsb(R1t–1), st+1, st+1

R2t = Trans(R1t–1)

ft = (st+9 + R1t mod 232) R2t

где lsb(x) – младший бит x,

mux(c, x, y) равен x если c = 0, или y если c = 1.

Внутренняя переходная функция Trans над полем F232 определяется как

Trans(z) = (M z mod 232)<<<7

где М – постоянное значение, равное 0x54655307 (шестнадцатеричное выражение первых десяти десятичных чисел π).

Выходы конечного автомата FSM группируются по четыре, и Serpent1 применяется к каждой группе; затем результат объединяется XOR’ом с соответствующими отбрасываемыми значениями LFSR, для производства выходных значений zt:

(zt+3, zt+2, zt+1, zt) = Serpent1(ft+3, ft+2, ft+1, ft) (st+3, st+2, st+1, st)

Четыре последовательных раунда Sosemanuk изображены на рисунке 2.26

525

Рис. 7.26. Выходное преобразование четырех последовательных раундов Sosemanuk

Шифр Sosemanuk объединяет FSM и LFSR для производства выходных значений zt.

Время t = 0 определяет внутреннее состояние после инициализации; первое выходное значение – z1. На рисунке 3 представлено описание шифра Sosemanuk.

526

Рис. 7.27. Описание шифра Sosemanuk

Вмоменты времени t 1 выполняются следующие операции:

обновляется FSM: из R1t−1, R2t−1, st+1, st+8 и st+9 вычисляются R1t, R2t и промежуточные значения ft.

обновляется LFSR: из st, st+3 и st+9 вычисляется st+10. Значение st

передается внутреннему буферу, LFSR сдвигается.

Каждые четыре шага, из накопленных значений ft, ft+1, ft+2, ft+3 и st, st+1, st+2, st+3 производятся четыре выходных значения zt, zt+1, zt+2, и zt+3. Таким образом, Sosemanuk

производит 32-битовые значения.

Соответственно первые четыре итерации Sosemanuk’а следующие:

Начальное состояние LFSR содержит значения s1, …, s10; значение s0 не определено. Начальное состояние FSM содержит R10 и R20.

В течение первого шага из R10, R20, s2, s9 и s10 вычисляются R11, R21 и f1.

Первый шаг производит промежуточные значения s1 и f1, сохраняемые в

буфере.

В течение первого шага, вычисляется слово обратной связи s11 из s10, s4 и

s1, обновляется внутреннее состояние LFSR, что приводит к новому состоянию, формируемое из s2, …, s11.

527

Первые четыре выходные значения – z1, z2, z3 и z4, вычисляются,

используя однократное применение Serpent1’а к (f4, f3, f2, f1), выход которого объединяется с (s4, s3, s2, s1) при помощи XOR.

Поточный шифр F-FCSR-H

F-FCSR-H – аддитивный поточный шифр [5].

Для генерации ключевого потока из ключа длиной 80 бит и вектора инициализации длиной от 32 до 80 бит используется фильтрующий автомат FCSR.

Генерация ключевого потока

Воснове шифра F-FCSR-H лежит регистр сдвига с обратной связью по переносу (FCSR)

автомат, который вычисляет двоичное разложение 2-адического числа p/q, где p и q

некоторые целые числа, с q нечетное. Допустим, что q < 0 < p < |q|. Размер FCSR n такой, что n + 1 является длиной q в битах.

В данном шифре p зависит от секретного ключа (и IV), а q – открытый параметр. Выбор q

порождает много свойств ключевого потока. Самое важное – то, что это полностью определяет длину периода ключевого потока. Условия для оптимального выбора:

q – (отрицательное) простое число размером (n + 1) бит.

(|q| − 1) – порядок 2 по модулю q.

T = (q – 1)/2 также является простым числом.

d = (1 + |q|)/2. W(d) – вес Хемминга двоичного разложения, W(d) > n/2.

Автомат FCSR содержит два регистра (наборы ячеек): основной регистр M и регистр переноса C. Основной регистр M содержит n ячеек. Обозначим mi (0 i n − 1) двоичные

n 1

знаки (n−1), содержащиеся в этих ячейках, и назовем числами m mi 2i содержимое (или

i 0

состояние) регистра M.

n 1

Пусть d – положительное целое число d = (1 − q)/2, а d di 2i его двоичное

i 0

разложение. Регистр переносов содержит l ячеек, где (l + 1) – количество чисел di отличных от нуля. Более строго, регистр переносов содержит одну ячейку для каждого ненулевого di,

для 0 i (n − 2). Обозначим ci – двоичный знак, содержащийся в этой ячейке. Мы также

n 2

устанавливаем ci = 0 когда di = 0 или когда i = (n − 1). Назовем числом c ci 2i

i 0

содержимое (или состояние) регистра C. Вес Хемминга двоичного разложения c не больше,

чем l. Функция перехода может быть описана выражениями

528

m(t + 1) = (m(t) >> 1) c(t) m0(t)d,

c(t + 1) = (m(t) >> 1) c(t) c(t) m0(t)d m0(t)d (m(t) >> 1).

Отметим, что m0(t) – самый младший бит в m(t). Числа m(t), c(t) и d – целые числа размером в n бит (или меньше).

Для извлечения псевдослучайных бит ключевого потока из основного регистра автомата

FCSR используется фильтр. Этот фильтр описывает, какие ячейки выбраны для производства псевдослучайных битов. Чтобы получить мультиразрядный выход, используются восемь или шестнадцать одноразрядных фильтров, чтобы извлечь 8- или 16-битовые выходные слова после каждого перехода автомата.

n 1

Фильтр F – это битовая строка (f0, …, fn−1) длиной n (что эквивалентно числу fi 2i ).

i 0

Выходной бит z получается вычислением веса parity поразрядного И состояния M основного регистра и фильтра F:

n 1

zfi mi .

i0

Это эквивалентно следующему:

S = M F, z = parity(S).

Аналогичным способом, предлагается метод извлечения s-битового слова из состояния

FCSR. Значение s будет равно 8 для F-FCSR-H, и 16 для F-FCSR-16.

Фильтр F также является битовой строкой (f0, …, fn−1) длиной n (которая является кратной числу s). Он разбивает на s подфильтров F0, …, Fs−1 каждый определяется как

ns 1

Fj fsi j 2i . i 0

Каждый подфильтр Fj выбирает несколько ячеек mi в основном регистре среди тех, что удовлетворяют выражению i j mod s. Parity полученного двоичного слова дает j

псевдослучайный бит:

ns 1

z j f si j msi j . i 0

Так как есть s подфильтров, то мы получаем s битов при каждом переходе автомата.

Эта процедура может быть описана эквивалентно следующим образом. Фильтр F и

состояние M комбинируются функцией И. Результат разбивается на n/s слова.

Псевдослучайное слово получается операцией XOR этих n/s слов:

S = M F

529

ns 1

Определим Si с помощью выражения S Si 2si , для 0 Si 28 – 1.

i 0

Выходное слово z будет равно:

n s 1

zSi .

i0

Отметим, что целое слово извлекается быстрее, чем отдельный бит.

Шифр F-FCSR-H использует ключи длиной 80 бит и IV размером от 32 до 80 бит. Если IV

не используется, то по умолчанию можно использовать значение 0.

Длина FCSR (размер основного регистра) – n = 160. Регистр переносов содержит l = 82

ячейки. Обратное простое число

q = – 1993524591318275015328041611344215036460140087963

таким образом сложение полей и ячеек переносов присутствуют в позициях,

соответствующих тем (кроме ведущего) в следующей строке 160 битов (которая имеет вес Хемминга 83),

d = (1 + |q|)/2 = (AE985DFF 26619FC5 8623DC8A AF46D590 3DD4254E)16.

Фильтрация Чтобы извлечь один псевдослучайный байт, мы используем статический фильтр

F = d = (AE985DFF 26619FC5 8623DC8A AF46D590 3DD4254E)16

Фильтр F разбит на 8 подфильтров (подфильтр j получен выбором бита j в каждом байте

F),

F0 = (0011 0111 0100 1010 1010)2,

F1 = (1001 1010 1101 1100 0001)2,

F2 = (1011 1011 1010 1110 1111)2,

F3 = (1111 0010 0011 1000 1001)2,

F4 = (0111 0010 0010 0011 1100)2,

F5 = (1001 1100 0100 1000 1010)2,

F6 = (0011 0101 0010 0110 0101)2,

F7 = (1101 0011 1011 1011 0100)2.

Повторный вызов бита bi (0 ≤ i ≤ 7) каждого извлеченного байта выражается

19

 

19

 

bi fi

j m8 j i , где Fi

fi

j 2 j

j 0

 

j 0

 

где mk – биты, содержащиеся в основном регистре.

Инициализация

Инициализация шифра F-FCSR-H производится в следующем порядке:

530

v ≤ 80)

1. Основной регистр М инициализируется ключом и IV:

M:= K + 280 IV = (080–v||IV||K)

2.Регистр переносов инициализируется в 0:

C := 0 = (082)

3. FCSR тактируется 160 раз. (На этом шаге выход отбрасывается),

После фазы установки, псевдослучайный поток производится тактированием FCSR и

извлечением по одному псевдослучайных байт, используя фильтр F, как описано выше.

Поточный шифр Grain-128

Grain – двоичный аддитивный поточный шифр, ориентированный на аппаратную реализацию. Версия, которая обозначается Grain v.1 [6], предназначена для приложений,

которые имеют очень ограниченные аппаратные ресурсы. Grain v.1 поддерживает 80-

битовый размер ключа.

Версия нифра Grain-128 поддерживает размер ключа – 128 бит и размер вектора IV – 96

битов. Шифр Grain-128 также является очень компактным и легко осуществимым в аппаратных средствах. Кроме того, возможно достаточно просто увеличивать скорость за счет большего количества аппаратных средств. Это является отличительной особенность семейства поточных шифров Grain, и во многих других шифрах явно не обосновано. Grain-

128 использует линейный регистр сдвига с обратной связью, чтобы гарантировать хорошие статистические свойства и гарантировать нижнюю границу периода ключевой последовательности. Чтобы ввести нелинейность вместе с нелинейным фильтром используется нелинейный регистр сдвига с обратной связью (NFSR). Нелинейный фильтр берет в качестве входных данных значения от обоих сдвиговых регистров.

Генерация ключевого потока

Краткий обзор различных блоков, используемых в шифре, приведен на рисунке 2.28.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]