5.5. ГОСТ 28147-89

Российский стандарт шифрования, получивший известность как ГОСТ 28147-89 ([131]), относится к действующим симметричным одноключевым криптографическим алгоритмам. Он зарегистрирован 2 июня 1989 года и введён в действие Постановлением Государственного комитета СССР по стандартам от 02.06.89 №1409. В настоящий момент шифр известен под названиями «ГОСТ» («GOST») и «Магма». Последнее название появилось в стандарте ГОСТ Р 34.12-2015 [117], описывающем как данный блочный шифр, так и более новый шифр «Кузнечик», о котором будет рассказано в разделе 5.7.

ГОСТ 28147-89 устанавливает единый алгоритм криптографических преобразований для систем обмена информацией в вычислительных сетях и определяет правила шифрования и расшифрования данных, а также выработки имитовставки. Основные параметры шифра таковы: размер блока составляет 64 бита, число раундов $m=32$, имеется 8 ключей по 32 бита каждый, так что общая длина ключа – 256 бит. Основа алгоритма – цепочка ячеек Фейстеля.

Рис. 5.7 — Схема ГОСТ 28147-89

Структурная схема алгоритма шифрования представлена на рис. 5.7 и включает:

Блок подстановки $(S)$ состоит из 8 узлов замены – s-блоков с памятью на 64 бита каждый. Поступающий на вход блока подстановки 32-разрядный вектор разбивается на 8 последовательных 4-разрядных векторов, каждый из которых преобразуется в 4-разрядный вектор соответствующим узлом замены. Узел замены представляет собой таблицу из 16 строк, содержащих по 4 бита в строке. Входной вектор определяет адрес строки в таблице, заполнение данной строки является выходным вектором. Затем 4-разрядные выходные векторы последовательно объединяются в 32-разрядный вектор.

При перезаписи информации содержимое $i$-го разряда одного накопителя переписывается в $i$-й разряд другого накопителя.

Ключ, определяющий заполнение КЗУ, и таблицы блока подстановки $K$ являются секретными элементами.

Стандарт не накладывает ограничений на степень секретности защищаемой информации.

ГОСТ 28147-89 удобен как для аппаратной, так и для программной реализаций.

Алгоритм имеет четыре режима работы:

Из них первые три – режимы шифрования, а последний – генерирования имитовставки (другие названия: инициализирующий вектор, синхропосылка). Подробно данные режимы описаны в следующем разделе.