Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции МиСЗКИ.doc
Скачиваний:
34
Добавлен:
24.08.2019
Размер:
1.63 Mб
Скачать

Алгоритм гост 28147-89 - Режим гаммирования

Зашифрование данных

Криптосхема, реализующая алгоритм зашифрования данных в режиме гаммирования показана на схеме. Открытые данные, разбитые на 64-разрядные блоки (1), Tо(2),..., Tо(M-1), Tо(M), зашифровываются в режиме гаммирования путем поразрядного суммирования по модулю 2 в сумматоре СМ5 с гаммой шифра Гш, которая вырабатывается блоками по 64 бита:

Гш = (Гш(1), Гш(2),...,Гш(M-1), Гш(M))

где M - определяется объемом шифруемых данных. В КЗУ вводятся 256 бит ключа. В накопителе N1, N2 вводится 64-разрядная двоичная последовательность (синхропосылка) S=(S1, S2,..., S64), являющаяся исходным заполнением этих накопителей для последующей выработки M блоков гаммы шифра.

Рис.5.3 Структурная схема зашифрования в режиме гаммирования

Исходное заполнение накопителей N1 и N2 (синхропосылка S) зашифровывается в режиме простой замены. Результат зашифрования A(S) = (Y0, Z0) переписывается в 32-разрядные накопители N3 и N4. Заполнение накопителя N4 суммируется по модулю (232-1) в сумматоре СМ4 с 32-разрядной константой С1 из накопителя N6, результат записывается в N4. Заполнение накопителя N3 суммируется по модулю 232 в сумматоре СМ3 с 32-разрядной константой С2 из накопителя N5, результат записывается в N3. Заполнение N3 переписывается в N1, а заполнение N4 переписывается в N2, при этом заполнение N3, N4 сохраняется. Заполнение N1 и N2 зашифровывается в режиме простой замены. Полученное в результате зашифрования заполнение N1, N2 образует первый 64-разрядный блок гаммы шифра Гш(1), который суммируется поразрядно по модулю 2 в сумматоре СМ5 с первым 64-разрядным блоком открытых данных. В результате суммирования получается 64-разрядный блок зашифрованных данных. Аналогичным образом зашифровываются остальные блоки открытых данных. В канал связи или память ЭВМ передаются синхропосылка S и блоки зашифрованных данных.

Расшифрование данных

При расшифровании криптосхема имеет тот же вид, что и при зашифровании открытых данных в режиме гаммирования. В КЗУ вводятся 256 бит ключа, с помощью которого осуществлялось зашифрование данных. В накопители N1 и N2 вводится синхропосылка S. Процесс выработки M блоков гаммы шифра осуществляется совершенно аналогично описанному выше. Блоки зашифрованных данных суммируются поразрядно по модулю 2 в сумматоре СМ5 с блоками гаммы шифра, в результате получаются блоки открытых данных.

6 Стандарт криптографической защиты 21 века (aes). Алгоритмы Rijndael т rc6. Математические понятия, лежащие в основе алгоритма Rijndael. Структура шифра. Алгоритм Rijndael

Предварительные математические понятия

Практически все операции Rijndael определяются на уровне байта. Байты можно рассматривать как элементы конечного поля GF (28). Некоторые операции определены в терминах четырехбайтных слов. Введем основные математические понятия, необходимые для обсуждения алгоритма.

Поле gf(28)

Элементы конечного поля могут быть представлены несколькими различными способами. Для любой степени простого числа существует единственное конечное поле, поэтому все представления GF (28) являются изоморфными. Несмотря на подобную эквивалентность, представление влияет на сложность реализации. Выберем классическое полиномиальное представление.

Байт b, состоящий из битов b7, b6, b5, b4, b3, b2, b1, b0, представляется в виде полинома с коэффициентами из {0, 1}:

b7х7 + b6х6 + b5х5 + b4х4 + b3х3 + b2х2 +

b1х1 + b0

Пример: байт с шестнадцатеричным значением '57' (двоичное 01010111) соответствует полиному

х6 + х4 + х2 + х + 1

Сложение

В полиномиальном представлении сумма двух элементов является полиномом с коэффициентами, которые равны сумме по модулю 2 (т.е. 1 + 1 = 0) коэффициентов слагаемых.

Пример: '57' + '83' = 'DA' или в полиномиальной нотации:

6 + х4 + х2 + х + 1) + (х7 + х + 1) =

х7 + х6 + х4 + х2

В бинарной нотации мы имеем: 01010111 + 10000011 = 11011010. Очевидно, что сложение соответствует простому XOR (обозначается как ) на уровне байта.

Выполнены все необходимые условия Абелевой группы: операция сложения (каждой паре элементов сопоставляется третий элемент группы, называемый их суммой), ассоциативность, нулевой элемент ('00'), обратный элемент (относительно операции сложения) и коммутативность.

Умножение

В полиномиальном представлении умножение в GF (28) соответствует умножению полиномов по модулю неприводимого двоичного полинома степени 8. Полином является неприводимым, если он не имеет делителей, кроме 1 и самого себя. Для Rijndael такой полином называется m(x) и определяется следующим образом:

m(x) = x8 + x4 + x3 + x + 1

или '11B' в шестнадцатеричном представлении.

Пример: '57' • '83' = 'C1'

Или

(x6 + x4 + x2 + х + 1) (x7 + х + 1) =

= x13 + x11 + x9 + x8 + x7 + x7 + x5 + x3 + x2 + x + x6 + x4 + x2 + х + 1 =

= x13 + x11 + x9 + x8 + x6 + x5 + x4 + x3 + 1

(x8 + x4 + x3 + х + 1) (x5 + x3) + x7 + x6 + 1 = x13 + x11 + x9 + x8 + x6 + x5 + x4 + x3 +1

Следовательно,

x13 + x11 + x9 + x8 + x6 + x5 + x4 + x8 + 1 mod (x8 + x4 + x3 + х + 1) = x7 + x6 + 1

Ясно, что результат является двоичным полиномом не выше 8 степени. В отличие от сложения, простой операции умножения на уровне байтов не существует.

Умножение, определенное выше, является ассоциативным, и существует единичный элемент ('01'). Для любого двоичного полинома b(x) не выше 8-й степени можно использовать расширенный алгоритм Евклида для вычисления полиномов a(x) и c(x) таких, что

b(x) a(x) + m(x) c(x) = 1

Следовательно,

a(x) • b(x) mod m(x) = 1

или

b-1(x) = a(x) mod m(x)

Более того, можно показать, что

a(x) • (b(x) + c(x)) =

a(x) • b(x) + a(x) • c(x)

Из всего этого следует, что множество из 256 возможных значений байта образует конечное поле GF (28) c XOR в качестве сложения и умножением, определенным выше.

Умножение на х

Если умножить b(x) на полином х, мы будем иметь:

b7x8 + b6x7 + b5x6 + b4x5 + b3x4 + b2x3 + b1x2 + b0x

x • b(x) получается понижением предыдущего результата по модулю m(x). Если b7 = 0, то данное понижение является тождественной операцией. Если b7 = 1, m(x) следует вычесть (т.е. XORed). Из этого следует, что умножение на х может быть реализовано на уровне байта как левый сдвиг и последующий побитовый XOR c '1B'. Данная операция обозначается как b = xtime (a).