Алгоритм криптографического преобразования данных ГОСТ 28147-89
В нашей стране установлен единый алгоритм криптографического преобразования данных для систем обработки информации в сетях ЭВМ, отдельных вычислительных комплексах и ЭВМ, который определяется ГОСТ 28147-89. Стандарт обязателен для организаций, предприятий и учреждений, применяющих криптографическую защиту, хранимых и передаваемых в сетях ЭВМ, в отдельных вычислительных комплексах и ЭВМ.
Этот алгоритм предназначен для аппаратной и программной реализации, удовлетворяет криптографическим требованиям и не накладывает ограничений на степень секретности защищаемой информации. Он представляет собой 64-битовый блочный алгоритм с 256-битовым ключом, основанный на сети Фейстеля.
Алгоритм шифрования блока данных по ГОСТ 28147-89 описывается схемой, представленной на рис. 3.2. Обозначения на схеме:
– 32-разрядные накопители;
– 32-разрядный сумматор по модулю 232 ([+]);
– 32-разрядный сумматор по модулю 2 (Å);
R – 32-разрядный регистр циклического сдвига;
КЗУ – ключевое запоминающее устройство на 256 бит, состоящее из восьми 32-разрядных накопителей ;
S – блок подстановки, состоящий из восьми узлов замены (S-блоков замены) .
![]() |
Рис. 3.2. Схема преобразования информации в алгоритме шифрования блока по ГОСТ 28147–89. |
Открытые данные, подлежащие шифрованию, разбивают на 64-разрядные блоки . Процедура шифрования 64-разрядного блока
включает 32 раунда (цикла) (j = 1…32).
В ключевое запоминающее устройство вводят 256 бит ключа K в виде восьми 32-разрядных подключей :
.
Последовательность битов блока
разбивают на две последовательности по 32 бита: b(0) а(0), где b(0) – левые или старшие биты, а(0) – правые или младшие биты.
Эти последовательности вводят в накопители и
; перед началом первого раунда шифрования.
В результате начальное заполнение накопителя :
Номер разряда | … | ||||
a(0) = ( | ![]() | ![]() | …, | ![]() | ![]() |
Начальное заполнение накопителя :
Номер разряда | … | ||||
b(0) = ( | ![]() | ![]() | …, | ![]() | ![]() |
Первый раунд (j = 1) процедуры шифрования 64-разрядного блока открытых данных можно описать уравнениями:
,
.
Здесь а(1) – заполнение , b(1) – заполнение
после 1-го раунда шифрования; f – функция шифрования.
Аргументом функции f является сумма по модулю числа а(0) (начального заполнения накопителя
) и числа
– подключа, считываемого из накопителя
КЗУ. Каждое из этих чисел равно 32 битам.
Функция f включает две операции над полученной 32-разрядной суммой .
Первая операция является подстановкой (заменой) и выполняется блоком подстановки S. Блок подстановки S состоит из восьми узлов замены (S-блоков замены) с памятью 64 бит каждый. Поступающий из
на блок подстановки S 32-разрядный вектор разбивают на восемь последовательно идущих 4-разрядных векторов, каждый из которых преобразуется в четырехразрядный вектор соответствующим узлом замены. Каждый узел замены можно представить в виде таблицы-подстановки шестнадцати четырехразрядных двоичных чисел в диапазоне 0000…1111. Входной вектор указывает адрес строки в таблице, а число в этой строке является выходным вектором. Затем четырехразрядные выходные векторы последовательно объединяют в 32-разрядный вектор. Узлы замены (таблицы-подстановки) представляют собой ключевые элементы, которые являются общими для сети ЭВМ и редко изменяются. Эти узлы замены должны сохраняться в секрете. Считается, что стойкость алгоритма ГОСТ 28147-89 во многом определяется структурой узлов замены.
Долгое время структура S-блоков в открытой печати не публиковалась. В настоящее время известны S-блоки, которые используются в приложениях Центрального Банка Российской Федерации и считаются достаточно сильными. Их устройство дано в табл. 3.1. Каждый S-блок может быть представлен в виде строки чисел от 0 до 15, расположенных в некотором порядке. Тогда порядковый номер числа будет являться входным значением S-блока, а само число – выходным значением S-блока.
Таблица 3.1
Рекомендуемые узлы замены для алгоритма ГОСТ 28147-89
№ S-блока | Значение входа | |||||||||||||||
Вторая операция – циклический сдвиг влево (на 11 разрядов) 32-разрядного вектора, полученного с выхода блока подстановки S. Циклический сдвиг выполняется регистром сдвига R.
Далее результат работы функции шифрования f суммируют поразрядно по модулю 2 в сумматоре с 32-разрядным начальным заполнением b(0) накопителя
. Затем полученный на выходе
результат (значение а(1)) записывают в накопитель
, а старое значение
(значение а(0)) переписывают в накопитель
(значение b(1) = а(0)). На этом первый раунд завершается.
Последующие раунды осуществляются аналогично, при этом во втором раунде из КЗУ считывают заполнение – подключ
, в третьем – подключ
и т.д., в восьмом раунде – подключ
. В раундах с 9-го по 16-й, а также в с 17-го по 24-й подключи из КЗУ считываются в том же порядке:
. В последних восьми раундах с 25-го по 32-й порядок считывания подключей из КЗУ обратный:
. Таким образом, при шифровании в 32 циклах осуществляется следующий порядок выборки из КЗУ подключей:
В 32-м раунде результат из сумматора вводится в накопитель
, а в накопителе
сохраняется прежнее заполнение. Полученные после 32-го раунда заполнения накопителей
и
являются блоком зашифрованных данных
, соответствующим блоку открытых данных
.
Таким образом уравнения шифрования блока имеют вид:
при j = 1…24,
при j = 25…31,
при j = 32,
где – заполнение
после j-го раунда шифрования,
– заполнение
после j-го раунда, j = 1…32.
Блок зашифрованных данных (64 разряда) выводится из накопителей
,
в следующем порядке: из разрядов 1…32 накопителя
, затем из разрядов 1…32 накопителя
, имело вид:
Номер разряда | … | ||||
a(32) = ( | ![]() | ![]() | …, | ![]() | ![]() |
Начальное заполнение накопителя :
Номер разряда | … | ||||
b(32) = ( | ![]() | ![]() | …, | ![]() | ![]() |
Расшифрование осуществляется по тому же алгоритму, что и шифрование, с тем изменением, что заполнения накопителей считываются из КЗУ в раундах расшифрования в следующем порядке:
Уравнения расшифрования имеют вид:
при j=1…8,
при j=9…31,
при j=32.
Полученные после 32 циклов работы заполнения накопителей и
образуют блок открытых данных
,
соответствующий блоку зашифрованных данных .