Главная
Тактико-технические данные
Режимы алгоритма
Режим простой замены
Режим гаммирования
Режим гам. с обратной связью
Режим выработки имитовставки
Упражнения
Литература

При описании алгоритма будем использовать следующие обозначения: L и R – последовательность битов; LR – конкатенация последовательностей L и R; + – операция побитового сложения по модулю 2; [+] – операция сложения по модулю 232; [+'] – операция сложения по модулю 232-1.

Для реализации алгоритма шифрования данных в режиме простой замены используется только часть блоков общей криптосистемы (рис. 1). Обозначения на схеме: N1, N2 – 32-разрядные накопители; СМ1 – 32-разрядный сумматор по модулю 232 ([+]); СМ2 – 32-разрядный сумматор по модулю 2 (+); R – 32-разядный регистр циклического сдвига; КЗУ – ключевое запоминающее устройство на 256 бит, состоящее из восьми 32-разрядных накопителей Х0, Х1, Х2, …Х7; S – блок подстановки, состоящий из восьми узлов замены (S-блоков замены) S1, S2, S3, S4, S5, S6, S7, S8.

Шифрование данных в режиме простой замены. Открытые данные, подлежащие зашифрованию, разбиваются на 64-разрядные блоки Т0. Процедура шифрования 64-разярдного блока Т0 в режиме простой замены включает 32 цикла (j=1…32). В КЗУ вводят 256 бит ключа К в виде восьми 32-разрядных подключей (чисел) Кi:

К = К7К6К5К4К3К2К1К0.

Последовательность битов блока

Т0=(а1(0), а2(0), …, а31(0), а32(0), b1(0), b2(0), …, b31(0), b32(0))

разбивают на 2 последовательности по 32 бита: b(0) и а(0), где b(0) – левые или старшие биты, а(0) – правые или младшие биты. Эти последовательности вводят в накопители N1, N2 перед началом первого цикла шифрования. В результате начальное заполнение накопителя N1,

а(0) = а32(0), а31(0), …, а2(0), а1(0),

32, 31, ……, 2, 1 ? номер разряда N1

начальное заполнение накопителя N2

b(0) = b32(0), b31(0), …, b2(0), b1(0).

32, 31, ……, 2, 1 ? номер разряда N2

Первый цикл (j=1) процедуры шифрования 64-разрядного блока открытых данных можно описать уравнениями:

Здесь а(1) – заполнение N1 после 1-го цикла шифрования; b(1) – заполнение N2 после 1-го цикла шифрования; f – функция шифрования.

Рис. 1. Схема реализации режима простой замены

Аргументом функции f является сумма по модулю 232 числа а(0) (начального заполнения накопителя N1) и числа K0 – подключа, считываемого из накопителя X0 КЗУ. Каждое из этих чисел равно 32 битам. Функция f включает две операции над полученной 32-разрядной суммой (а(0) [+] K0). Первая операция называется подстановкой (заменой) и выполняется блоком подстановки S, который состоит из восьми узлов замены S1, S2, S3, S4, S5, S6, S7, S8 с памятью 64 бит каждый. Поступающий из СМ1 на блок подстановки S 32-разрядный вектор разбивают на восемь последовательно идущих 4-разрядных векторов, каждый из которых преобразуется в четырехразрядный вектор соответствующим узлом замены. Каждый узел замены можно представить в виде таблицы-перестановки шестнадцати четырехразрядных двоичных чисел в диапазоне 0000…1111. Входной вектор указывает адрес строки в таблице, а число в этой строке является выходным вектором. Затем четырехразрядные векторы последовательно объединяют в 32-разрядный вектор. Узлы замены (таблицы-перестановки) представляют собой ключевые элементы, которые являются общими для сети ЭВМ и редко изменяются. Эти узлы должны сохранятся в секрете. Отметим, что восемь узлов замены (S-блоков), в ГОСТ 28147-89 не определены, кроме этого, не дано рекомендаций по их выбору, хотя ясно, что есть S-блоки, приводящие к снижению стойкости шифра.

Вторая операция – циклический сдвиг влево (на 11 разрядов) 32-разрядного вектора, полученного с выхода блока подстановки S. Циклический сдвиг выполняется регистром сдвига R.

Далее результат работы функции шифрования f суммируют поразрядно по модулю 2 в сумматоре СМ2 с 32-разрядным начальным заполнением b(0) накопителя N2. Затем полученный на выходе СМ2 результат (значение а(1)) переписывают в накопитель N1, а старое значение N1 (значение а(0)) переписывают в накопитель N2 (значение b(1) = а(0)). Первый цикл завершен.

Следующие циклы осуществляются аналогично, при этом во втором цикле из КЗУ считывают заполнение X1 – подключ К1, в третьем цикле – подключ К2 и так далее, в восьмом цикле – подключ К7. В циклах с 9-го по 16?й, а также в циклах с 17-го по 24-й подключи из КЗУ считываются в том же порядке: К0, К1, К2, К3, К4, К5, К6, К7. В последних восьми циклах с 25-го по 32-й порядок считывания подключей из КЗУ обратный К7, К6, К5, К4, К3, К2, К1, К0.

В 32-м цикле результат из сумматора СМ2 вводится в накопитель N2, а в накопителе N1 сохраняется прежнее заполнение. Полученные после 32-го цикла шифрования заполнения накопителей N1 и N2 являются блоком зашифрованных данных Тш, соответствующих блоку открытых данных Т0.

Уравнение зашифрования в режиме простой замены имеют вид:

где a(j) = (а32(j), а31(j), …, а2(j), а1(j)) – заполнение N1 после j-го цикла шифрования; b(j) = (b32(j), b31(j), …, b2(j), b1(j)) – заполнение N2 после j-го цикла шифрования, j = 1…32.

Блок зашифрованных данных Тш (64 разряда) выводится из накопителей N1, N2 в следующем порядке: из разрядов 1..32 накопителя N1, затем из разрядов 1..32 накопителя N2:

Тш=(а1(32), а2(32), …,а31(32), а32(32), b1(32), b2(32), …, b31(32), b32(32)).

Остальные блоки открытых данных зашифровываются в режиме простой замены аналогично.

Расшифрование данных в режиме простой замены. Криптосхема, реализующая алгоритм расшифрования в режиме простой замены, имеет тот же вид, что и при зашифровании (рис. 1).

Рис. 2. Схема реализации режима гаммирования

В КЗУ вводят 256 бит ключа, на котором осуществлялось зашифрование. Зашифрованные данные, подлежащие расшифрованию, разбиты на блоки Тш по 64 бита в каждом. Ввод любого блока

Тш=(а1(32), а2(32), …, а31(32), а32(32), b1(32), b2(32), …, b31(32), b32(32))

в накопители N1, N2 производят так, чтобы начальное значение накопителя N1 имело вид

а(32) = а32(32), а31(32), …, а2(32), а1(32),

32, 31, ……, 2, 1 ? номер разряда N1

а начальное заполнение накопителя N2 имело вид

b(32) = b32(32), b31(32), …, b2(32), b1(32).

32, 31, ……, 2, 1 ? номер разряда N2

Расшифрование осуществляется по тому же алгоритму, что и шифрование, с тем изменением, что заполнение накопителей Х0, Х1, Х2, …Х7; считывают из КЗУ в циклах расшифрования в следующем порядке:

К0, К1, К2, К3, К4, К5, К6, К7, К7, К6, К5, К4, К3, К2, К1, К0,

К7, К6, К5, К4, К3, К2, К1, К0, К7, К6, К5, К4, К3, К2, К1, К0.

Уравнения расшифрования имеют вид:

Полученные после 32 циклов работы заполнения накопителей N1, N2 образуют блок открытых данных

Т0=(а1(0), а2(0), …,а31(0), а32(0), b1(0), b2(0), …, b31(0), b32(0)),

соответствующий блоку зашифрованных данных Тш. При этом состояние накопителя N1

а(0) = а32(0), а31(0), …, а2(0), а1(0),

32, 31, ……, 2, 1 ? номер разряда N1

а заполнение накопителя N2 имеет вид

b(0) = b32(0), b31(0), …, b2(0), b1(0).

32, 31, ……, 2, 1 ? номер разряда N2

Аналогично расшифровываются остальные блоки зашифрованных данных.

Следует заметить, что алгоритм зашифрования в режиме простой замены допускается использовать для шифрования данных только в ограниченных случаях – при выработке ключа и зашифрования его с обеспечением имитозащиты для передачи по каналам связи или для хранения его в памяти ЭВМ.