Советский (ныне российский) стандарт рекомендован к использованию для защиты любых данных, представленных в виде двоичного кода, хотя не исключаются и другие методы шифрования. Данный стандарт формировался с учетом мирового опыта, и в частности, были приняты во внимание недостатки и нереализованные возможности алгоритма DES, поэтому использование стандарта ГОСТ предпочтительнее.
Рисунок 4.6. Схема алгоритма ГОСТ 28147—89
Алгоритм ГОСТ 28147-89 – это итеративный 32-цикловый обратимый блочный шифр Фейстеля. Размер входного блока – 64 бита, размер ключа шифра – 256 бит. Алгоритм достаточно сложен и ниже будет описана в основном его концепция. Таблица замен алгоритма ГОСТ не опубликована. Общая схема алгоритма приведена рисунке 4.6.
В этой схеме: + —сложение по модулю 232,
Å — побитовое сложение по модулю 2.
Для прибавления ключа и сложения подблоков в сети Фейстеля используются операции + и Å. Эта пара операций не обладает свойствами ассоциативности и дистрибутивности, что повышает стойкость алгоритма к аналитическим атакам, основанным на аппроксимации таблицы замен линейными соотношениями.
|
|
Ключ k длиной 256 бит представляется в виде восьми 32-разрядных чисел:
k = k (0)║ k (1)║ … ║ k (7).
Алгоритм криптографического преобразования предусматривает 4 режима работы:
² Шифрование данных в режиме простой замены;
² Шифрование данных в режиме гаммирования;
² Шифрование данных в режиме гаммирования с обратной связью;
² Выработка имитовставки.
Режим простой замены
Каждый 64-битовый блок М шифруемого сообщения рассматривается как пара 32-битовых блоков М=Н L (H - правые или младшие и L – левые или старшие биты). Первый бит блока считается старшим.
Далее выполняется итеративный (i - номер итерации) процесс шифрования (f - функция шифрования):
H i = f (H i -1 [+] k ((i -1)mod8)) Å L i -1 для i =1, 2,..., 24
L i = H i -1
H i = f (H i -1 [+] k (32- i)) Å L i -1 для i =25, 26,..., 31
L i = H i -1
H32 = H31 L32 = f (H31 [+] k 0) Å L31.
64-разрядный блок зашифрованных данных C представляется в виде
C=H32L32.
Остальные блоки открытых данных в режиме простой замены зашифровываются аналогично.
Подключи ki , используемые в итерациях алгоритма, представляют собой 8 блоков k (0), k (1), …, k (7) по 32 бита, на которые разбивается 256-битовый секретный ключ K. Ключи повторяются циклически 3 раза, а в четвертый раз выбираются в обратном порядке.
Функция шифрования
Функция шифрования включает две операции над 32-разрядным аргументом. Схема функции шифрования в алгоритме ГОСТ 28147—89 показана на рисунке 4.7.
Рисунок 4.7. Функция шифрования в алгоритме ГОСТ 28147—89
Первая операция является подстановкой. Блок подстановки состоит из 8 узлов замены S(1)...S(8) с памятью 64 бита каждый. Поступающий на блок подстановки 32-разрядный вектор разбивается на 8 последовательно идущих 4-разрядных вектора, каждый из который преобразуется в 4-разрядный вектор соответствующим узлом замены.
|
|
Каждый узел замены можно представить в виде таблицы-перестановки 16-и четырехразрядных двоичных чисел в диапазоне 0...15. Входной вектор определяет адрес строки в таблице, число из которой является выходным вектором. Затем 4-разрядные векторы последовательно объединяются в 32-разрядный выходной вектор.
Вторая операция - циклический сдвиг влево (на 11 разрядов) 32-разрядного вектора, полученного в результате подстановки.
Следует учитывать, что данный режим шифрования обладает ограниченной криптостойкостью.Режим простой замены допустимо использовать для шифрования данных только в ограниченных случаях – при шифровании ключа с обеспечением имитозащиты для передачи по каналам связи или хранения его в памяти ЭВМ.
Режим гаммирования
Режим гаммирования напоминает режим OFB, также являясь вариантом потокового шифра.
Открытые данные, разбитые на 64-разрядные блоки mi (i =1,2,..., n) (n определяется объемом шифруемых данных), зашифровываются в режиме гаммирования путем поразрядного сложения по модулю 2 с гаммой шифра gш=(g1, g2,...., gm), которая вырабатывается блоками по 64 бита. ci (64-разрядный блок зашифрованного текста) получается из уравнения
ci = mi Å g i,
где гамма шифра: g i = F (yi -1, zi -1).
Здесь F обозначает функцию шифрования в режиме простой замены (аргументами этой функции являются два 32-разрядных числа).
Величины yi и zi определяются итерационно по мере формирования гаммы следующим образом:
(y 0, z 0)=F(s),
(yi, zi)=(yi -1+ a 2, zi -1+ a 1), i =1, 2,..., n.
где s – начальное значение (64-разрядная двоичная последовательность, называемая синхропосылкой), не является секретным элементом шифра. Она известна как на передающей стороне, так и на приемной или передается по каналу связи вместе с шифртекстом.
a 1=0101010116 и a 2=0101010416 - 32-разрядные двоичные константы, заданные в ГОСТе.