Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Математические основы криптологии..pdf
Скачиваний:
102
Добавлен:
05.02.2023
Размер:
6.01 Mб
Скачать
s0 s159

Пусть r0 r159 будет состоянием регистра R до тактирования, а r0 r159 будет состоянием регистра R после тактирования.

Feedback_bit = r159 Input_bit_R

For 1 i 159 {ri = ri–1; r0 = 0;}

For 0 i 159 {if i Rtaps, ri = ri Feedback_bit}

If Control_bit_R = 1

oFor 0 i 159 {ri = ri ri}

Rtaps – это набор позиций отводов обратной связи для R:

Rtaps = {0, 4, 5, 8, 10, 11, 14, 16, 20, 25, 30, 32, 35, 36, 38, 42, 43, 46, 50, 51, 53, 54, 55, 56, 57, 60, 61, 62, 63, 65, 66, 69, 73, 74, 76, 79, 80, 81, 82, 85, 86, 90, 91, 92, 95, 97, 100, 101, 105, 106, 107, 108, 109, 111, 112, 113, 115, 116, 117, 127, 128, 129, 130, 131, 133, 135, 136, 137, 140, 142, 145, 148, 150, 152, 153, 154, 156, 157}.

Операция тактирования регистра S clock_S(S, Input_bit_S, Control_bit_S) определяется следующим псевдокодом:

Пусть s0 s159 будет состоянием регистра S до тактирования, а s0 s159 будет состоянием регистра после тактирования. Также, для упрощения описания шифра, мы будем использовать как промежуточные переменные.

Feedback_bit = s159 Input_bit_R

For 1 i 158 { si = si–1 ((si comp0i) (si+1 comp1i)); si = 0; s159 =

s158;}

If Control_bit_S = 0:

oFor 0 i 159 {si = si (fb0i Feedback_bit)}

If instead Control_bit_S = 1

oFor 0 i 159 {si = si (fb1i Feedback_bit)}

Значения comp0, comp1, fb0 и fb1, определенные разработчиками, приведены в [6].

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

Trivium – синхронный поточный шифр, использующий 80-битовый ключ и 80-битовый вектор инициализации IV [6].

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

Алгоритм инициализируется загрузкой 80-битового ключа и 80-битового IV в 288битовое начальное состояние и устанавливает все оставшиеся биты в 0, за исключением s286,

197

s287, и s288. Затем состояние изменяется за 4 полных цикла (без генерации бит ключевого потока). В итоге это можно представить в виде псевдокода, приведенного ниже:

(s1, s2, …, s93) (K1, …, K80, 0, …, 0) (s94, s95, …, s177) (IV1, …, IV80, 0, …, 0) (s178, s279, …, s288) (0, …, 0, 1, 1, 1) for i = 0 to 4 288 do

{

t1 s66 s91 s92 s93 s171

t2 s162 s175 s176 s177 s264 t3 s243 s286 s287 s288 s69

(s1, s2, …, s93) (t3, s1, …, s92)

}

(s94, s95, …, s177) (t1, s94, …, s176) (s178, s279, …, s288) (t2, s178, …, s287)

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

Предложенная конструкция содержит 288-битовое внутреннее состояние, обозначенное (s1, …, s288). Генерация ключевого потока состоит из итерационного процесса, который извлекает значения 15 определенных битов состояния и использует их для обновления 3 битов состояния и вычисления 1 бита ключевого потока zi. Затем биты состояния циклически сдвигаются и процесс повторяет, пока не будут сгенерированы требуемые N бит ключевого потока. Полное описание дается следующим простым псевдокодом:

for i = 1 to N do

{

t1 s66 s93 t2 s162 s177

t3 s243 s288

zi t1 t2 t3

t1 t1 s91 s92 s171 t2 t2 s175 s176 s264 t3 t3 s286 s287 s69

(s1, s2, …, s93) (t3, s1, …, s92)

(s94, s95, …, s177) (t1, s94, …, s176)

(s178, s279, …, s288) (t2, s178, …, s287)

}

Графическое представление процесса генерации ключевого потока приведено на рис. 2.30.

198

Рис. 2.30. Поточный шифр Trivium

Блочные шифры в поточных режимах Российский блочный шифр ГОСТ 28147-89 в поточном режиме

В России в качестве стандарта шифрования принят алгоритм криптографического преобразования ГОСТ 28147-89. Этот алгоритм предназначен для аппаратной и программной реализации, удовлетворяет необходимым криптографическим требованиям и не накладывает ограничений на степень секретности защищаемой информации.

Для шифрования используются 256 битовый ключ, который разбивается на 8 32-битовых подключа: K0, K1, …, K7, и таблица блока подстановки H. Заполнение таблиц блока подстановки H является долговременным ключевым элементом.

Алгоритм криптографического преобразования ГОСТ 28147-89 опирается на цикл шифрования (рисунок 2.31). Цикл шифрования построен по принципу сети Фейстеля.

199

N2

 

 

N1

 

 

 

 

 

 

 

 

 

 

L = N1 + Xj mod 232

 

 

Xj

 

 

m = 0, …, 7

Rm = Km(L)

R <<< 11

N2

 

N1

Рис. 2.31. Цикл шифрования Один цикл шифрования преобразует 64-битовый блок данных, используя один 32-

битовый элемент ключа Kj и блок подстановки H.

Преобразуемый 64-битовый блок данных (N) разбивается на две части: старшую (N2) и младшую (N1). Значение N1 суммируется по модулю 232 с одним из 32-битовых элементов ключа Kj, j = 0, …, 7. Результат суммирования преобразуется в блоке подстановки H. Блок подстановки H состоит из 8 узлов замены H1, …, H8 размером 64 бита каждый. Поступающий на блок подстановки 32-разрядный блок разбивается на восемь последовательно идущих 4- разрядных блоков, каждый из которых преобразуется в 4-разрядный блок соответствующим узлом замены, представляющим собой таблицу из шестнадцати строк, содержащих по четыре бита заполнения в строке. Входной блок определяет адрес строки в таблице, заполнение данной строки является выходным блоком. Затем 4-разрядные выходные блоки последовательно объединяются в 32-разрядный блок. Полученное значение R циклически сдвигается на 11 шагов в сторону старших разрядов. Результат сдвига суммируется поразрядно по модулю 2 со значением N2. Полученный результат N2 записывается в N1, при этом старое значение N1 переписывается в N2.

Многократное повторение цикла шифрования, при использовании различных элементов ключа, позволяет построить циклы зашифрования (32-З) и расшифрования (32-Р). В цикле зашифрования 32-З отдельный цикл шифрования повторяется 32 раза, используя 32-битовые элементы ключа в следующем порядке: K0, …, K7, K0, …, K7, K0, …, K7, K7, …, K0. Цикл

200