Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
L6-ru.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
165.38 Кб
Скачать

3 Шифрование в режиме простой замены (гост 28147-89)

Схема устройства, реализующего режим простой замены приведена на рисунке.

Открытое сообщение, подлежащее шифрованию, разбивается на 64-х разрядные блоки Т0. Процедура шифрования включает 32 цикла ( j=1,…,32 ).

Перед началом шифрования в ключевое запоминающее устройство (КЗУ) вводят 256-разрядный ключ, разделяемый на блоки длиной в 32 разряда каждый. При этом, в отличие от алгоритма формировать дополнительные ключи не требуется и, следовательно, нет необходимости в дополнительном генераторе ключей.

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

T0 Tш

1 32 1

КЗУ

32 1

32 1

32 1

Шифрование методом простой замены

При этом входная последовательность разбивается пополам на блоки

Т0 = a1(0), a2(0),…, a32(0), b1(0), b2(0),…, b32(0).

Биты b(0), - старшие, стоящие слева, а a(0) - младшие биты, стоящие справа.

Последовательность

a(0) = a32(0), a31(0) ,…, a0(0)

вводят в накопитель N 1, последовательность

b(0) = b32(0), b31(0) ,…, b0(0)

вводят в накопитель N 2.

Первый цикл процедуры можно описать следующим образом

a (1) = (a(0), + K0 ) b(0)

b(1) = a(0)

в данном выражении заполнение N 1 после первого цикла шифрования; b(1) заполнение N 2 после первого цикла шифрования; - функция шифрования.

Аргументом функции f является сумма по модулю 32 числа a(0) и числа b(0). Эта функция включает две операции над полученной 32-х разрядной суммой (a(0), + K0 ).

Первая операция является подстановкой (заменой) и выполняется блоком подстановки S.

Блок состоит из восьми узлов замены S1 S8 с памятью 64 бит каждый. Поступающий от сумматора 32-х разрядный блок разбивают на восемь четырех разрядных групп, каждая из которых заменяется другой четырехразрядной группой. Порядок замены, производимой блоком замены S, содержится в секрете и относительно редко изменяется.

Пусть, например, в S –блок замены записаны числа

7, 10, 2, 4, 15, 9, 0, 3, 6, 12, 5, 13, 1, 8, 11

Это значит, что если на вход поступает комбинация 0000, то на выходе будет комбинация 0111 а если на вход поступает комбинация 0001, то на выходе будет комбинация 1010.

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

На следующем этапе осуществляется суммирование по модулю два результата вычисления функции f и содержимого накопителя N 1. Полученный результат записывают в накопитель N 1, а в накопитель N 2 переписывают предыдущее значение вектора, содержавшегося в N 1. На этом заканчивается первый цикл шифрования.

Последние циклы выполняются аналогично. Отличие состоит в том, что, начиная с 25-го цикла, ключи подаются из блока КЗУ в обратном порядке K7 K0.

Таким образом, в течение всех 32-х циклов, подача ключей осуществляется в следующем порядке:

K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7,

K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K7 , K6 , K5 , K4 , K3 , K2 , K1 , K0 ,

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

В общем виде, уравнения, описывающие процесс шифрования могут быть представлены в следующем виде:

a (j) = f [(a( j - 1), + K j-1(mod 8) ] b( j - 1)

при j = 1, … , 24

b(j) = a( j - 1),

a (j) = f [(a( j - 1), + K 32 - j ] b( j - 1)

при j = 25, … , 31

b(j) = a( j - 1),

a (32) = a(31)

при j = 32

b(j) = f [(a(31) + K 0 ] b( 31)

где a(j) = a32(j), a32(j), … , a1(j), - заполнение N 1 после j -го цикла шифрования, а b(j) = b32(j), b32(j), … , b 1(j), - заполнение N 2 после j -го цикла шифрования; j = 1,2, … , 31.

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

Тш = [a1(32), a2(32), … , a32(32) b1(32), b2(32), … , b32(32)] , (1)

Процедура расшифровывания имеет тот же вид, что и при шифровании. Принятый из канала связи блок Тш вида (1), записывают в накопители N 1 и N 2 таким образом, чтобы начальное значение содержимого накопителя N 1 имело вид

[a32(32), a31(32) ,…, a2(32), a1(32)] ,

а содержимое накопителя N 2, имело вид

[b32(32), b31(32) ,…, b2(32), b1(32)] .

Расшифровывание осуществляется тем же способом, что и шифрование, однако порядок подачи 32-х разрядных ключей осуществляется в следующем порядке:

K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 , K7 , K6 , K5 , K4 , K3 , K2 , K1 , K0 ,

K7 , K6 , K5 , K4 , K3 , K2 , K1 , K0 , K7 , K6 , K5 , K4 , K3 , K2 , K1 , K0 .

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

a (32 - j) = f [(a( 32 - j + 1), + K j-1] b(32 - j + 1)

при j = 1, … , 8;

b(32 - j) = a( 32 - j + 1),

a (32 - j) = f [(a( 32 - j + 1), + K 32 - j(mod 8)] b(32 - j + 1)

при j = 9, … , 31;

b(32 - j) = a(32 - j + 1),

a(0) = a(1)

при j = 32.

b(0) = f [(a(1) + K 0 ] b( 1)

Полученные после 32-х циклов работы заполнения накопителей N 1 и N 2 образуют блок открытых данных.

Т0 = [a1(0), a2(0), … , a32(0) b1(0), b2(0), … , b32(0)] .

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

11

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