Российский стандарт шифрования ГОСТ
В Российской Федерации установлен единый стандарт криптографического преобразования текста для информационных систем. Он рекомендован к использованию для защиты любых данных, представленных в виде двоичного кода, хотя не исключаются и другие методы шифрования. Данный стандарт формировался с учетом мирового опыта и, в частности, были приняты во внимание недостатки и нереализованные возможности алгоритма DES, поэтому использование стандарта ГОСТ предпочтительнее.
Данный алгоритм также построен с использованием сети Фейстела.
Введем ассоциативную операцию конкатенации, используя для нее мультипликативную запись. Кроме того будем использовать следующие операции сложения:
A Е B
– побитовое сложение по модулю 2;
A [+] B – сложение по модулю 232;
A {+} B – сложение по модулю 232–1;.
Алгоритм криптографического преобразования предусматривает несколько режимов работы. Во всех режимах используется ключ W длиной 256 бит, представляемый в виде восьми 32-разрядных чисел X(i).
W = X(7)X(6)X(5)X(4)X(3)X(2)X(1)X(0)
Для расшифрования используется тот же ключ, но процесс расшифрования является инверсным по отношению к исходному.
Базовым режимом работы алгоритма является режим простой замены.
Пусть открытые блоки разбиты на блоки по 64 бит в каждом, которые обозначим как TО.
Очередная последовательность бит TО
разделяется на две последовательности B(0) и A(0) по 32 бита (левый и правый блоки). Далее выполняется итеративный процесс шифрования, описываемый следующими формулами:
для i = 1ё24
;для i = 25ё31
;и для i = 32
Здесь i обозначает номер итерации. Заметим, что подобно DES, на последнем цикле перестановка половин блока не производится.
Функция шифрования включает две операции над 32-разрядным аргументом – K(Ч) и R(Ч).
Первая операция является подстановкой. Блок подстановки K
состоит из 8 узлов замены K(1)...K(8) с памятью по 64 бита каждый. Поступающий на блок подстановки 32-разрядный вектор разбивается на 8 последовательно идущих 4-разрядных вектора, каждый из который преобразуется в 4-разрядный вектор соответствующим узлом замены, представляющим из себя таблицу из 16 целых чисел в диапазоне 0...15. Входной вектор определяет адрес строки в таблице, число из которой является выходным вектором. Затем полученные 4-разрядные векторы вновь последовательно объединяются в 32-разрядный выходной.
Вторая операция – циклический сдвиг 32-разрядного вектора, полученного в результате подстановки K на 11 шагов влево.
64-разрядный блок зашифрованных данных Тш
представляется в виде
Тш = А(32)В(32).
Остальные блоки открытых данных в режиме простой замены зашифровываются аналогично.
Следует учитывать, что данный режим шифрования рекомендуется использовать только для шифрования ключевой информации. Для шифрования данных следует использовать два других режима.
Второй режим шифрования называется режимом гаммирования.
Открытые данные, разбитые на 64-разрядные блоки (i=1,2,...,m), где m определяется объемом шифруемых данных), зашифровываются в режиме гаммирования путем поразрядного сложения по модулю 2 с гаммой шифра GШ, которая вырабатывается блоками по 64 бита, т.е.
.
Уравнение шифрования данных в режиме гаммирования может быть представлено в следующем виде:
.
В этом уравнении обозначает 64-разрядный блок зашифрованного текста, А – функцию шифрования в режиме простой замены (аргументами этой функции являются два 32-разрядных числа). С1 = 01010104h
и С2 = 01010101h – константы, заданные в ГОСТ 28147-89. Величины Yi и Zi определяются итерационно по мере формирования гаммы следующим образом:
(Y0, Z0) = A(S), где S – 64-разрядная двоичная последовательность;
(Yi, Zi) = (Yi–1
[+] C2, Zi–1 {+} C1), i = 1, 2, ..., m.
64-разрядная последовательность S, называемая синхропосылкой, не является секретным элементом шифра, но ее наличие необходимо как на передающей стороне, так и на приемной.
Режим гаммирования с обратной связью очень похож на режим гаммирования. Как и в последнем, разбитые на 64-разрядные блоки открытые данные зашифровываются путем поразрядного сложения по модулю 2 с гаммой шифра GШ, которая вырабатывается блоками по 64 бита:
.
Уравнения шифрования данных в режиме гаммирования с обратной связью выглядят следующим образом:
,
.