Отечественный стандарт шифрования. Статья обновлена в 2023 году.

Отечественный стандарт шифрования

Отечественный стандарт шифрования
С. Панасенко,
  
                                                                                                                                                                 Источник: Мир и безопасность, № 5, 2003

Несмотря на то, что ГОСТ 28147-89 был принят в далеком 1989 году, в наши дни он является весьма широко используемым как в России, так и в мире в целом. Во-первых, этому способствует отечественное законодательство. Государственные организации и ряд коммерческих обязаны использовать для защиты информации только сертифицированные ФАПСИ криптосредства, а получение сертификата ФАПСИ подразумевает, что «в указанных криптосредствах реализованы криптографические алгоритмы, объявленные государственными или отраслевыми стандартами Российской Федерации...». Несмотря на упразднение ФАПСИ в текущем году, нормативные документы, устанавливающие данные требования, действительны и сейчас. Во-вторых, данный алгоритм разрабатывался с огромным запасом в криптостойкости, причем с совсем небольшим ущербом скорости шифрования.

Алгоритм ГОСТ 28147-89 является классическим алгоритмом симметричного шифрования на основе сети Фейстеля (см. рис. 1). Данный алгоритм шифрует информацию блоками по 64 бита (такие алгоритмы называются «блочными»). Смысл сети Фейстеля состоит в том, что блок шифруемой информации разбивается на два или более субблоков, часть которых обрабатывается по определенному закону, после чего результат этой обработки накладывается (операцией побитового сложения по модулю 2) на необрабатываемые субблоки. Затем субблоки меняются местами, после чего обрабатываются снова и т.д. определенное для каждого алгоритма число раз -раундов.

Рис. 1. Сеть Фейстеля

Основное отличие алгоритмов симметричного шифрования друг от друга состоит именно в различных функциях обработки субблоков. Данная функция часто называется «основным криптографическим преобразованием», поскольку именно она несет основную нагрузку при шифровании информации. Основное преобразование алгоритма ГОСТ 28147-89 является достаточно простым, что обеспечивает высокое быстродействие алгоритма; в нем выполняются следующие операции (см. рис. 2):

Рис. 2. Основное преобразование алгоритма ГОСТ 28147-89

1. Сложение субблока с определенным фрагменом ключашифрования по модулю 232. Кх  — это 32-битная часть («подключ») 256-битного ключа шифрования, который можно представить как конкатенацию 8 подключей: К = К0К1К2К3К4К5К6 К7. В зависимости от номера раунда и режима работы алгоритма (о них — ниже), для данной операции выбирается один из подключей.

2. Табличная замена. Для ее выполнения субблок разбивается на 8 4-битных фрагментов, каждый из которых прогоняется через свою таблицу замены. Таблица замены содержит в определенной последовательности значения от 0 до 15 (т.е. все варианты значений 4-битного фрагмента данных); на вход таблицы подается блок данных, числовое представление которого определяет номер выходного значения. Например, подается значение 5 на вход следующей таблицы: «13 0 11 74 91 10 143 5 122 15 8 6». В результате на выходе получается значение 9 (поскольку 0 заменяется на 13, 1 — на 0, 2 — на 11 и т.д.).

3. Побитовый циклический сдвиг данных внутри субблока на 11 бит влево.

Алгоритм ГОСТ 28147-89 имеет 4 режима работы:

  1. Режим простой замены.
  2. Режим гаммирования.
  3. Режим гаммирования с обратной связью.
  4. Режим выработки имитоприставок.

Все режимы используют одно и то же основное преобразование, но с разным числом раундов и различным образом.

Режим простой замены предназначен для шифрования ключей (существует множество схем применения алгоритмов симметричного шифрования, использующих несколько ключей различного назначения; в этих случаях требуется шифрование одних ключей на другие). В данном режиме выполняется 32 раунда основного преобразования. В каждом из раундов, как было сказано выше, используется определенный подключ, который выбирается следующим образом:

К((г — 1) % 8)  — для раундов с 1 -го по 24-й (r обозначает номер раунда, а % — операция вычисления остатка от деления), т.е. К0, К1, К2, К3, К4, К5, К6, К7, К0, К1, К2 и т. д.;

К ( (32 – r) % 8) — для раундов с 25-го по 32-й, т.е. в обратном порядке: К7, К6, К5, К4, К3, К2, К1, К0.

Для расшифровывания информации в режиме простой замены также выполняется 32 раунда основного преобразования, но с использованием подключей по другой схеме:

  • в прямом порядке в раундах с 1-го по 8-й;
  • в обратном порядке в последующих раундах.

Для собственно шифрования информации используются режимы гаммирования и гаммирования с обратной связью. В данных режимах шифрование информации производится побитовым сложением по модулю 2 каждого 64-битного блока шифруемой информации с блоком гаммы шифра. Гамма шифра — это псевдослучайная последовательность, вырабатываемая с использованием основного преобразования алгоритма ГОСТ 28147-89 следующим образом (см. рис. 3):

Рис. 3. Режим гаммирования

1. В регистры N1 и N2 записывается их начальное заполнение — 64-битная величина, называемая «синхропосылкой».

2. Выполняется зашифровывание содержимого регистров N1 и N2 (в данном случае — синхропосылки) в режиме простой замены.

3. Содержимое N1 складывается по модулю (232 — 1) с константой С1 = 224 + 216 + 28 + 24, результат сложения записывается в регистр N1.

4. Содержимое N2 складывается по модулю 232 с константой С2 = 224 + 216 + 28 + 1, результат сложения записывается в регистр N2.

5. Содержимое регистров N1 и N2 подается на выход в качестве 64-битного блока гаммы шифра (т.е. в данном случае N1 и N2 образуют первый блок гаммы).

6. Если необходим следующий блок гаммы (т.е. необходимо продолжить зашифровывание или расшифровывание), выполняется возврат к шагу 2.

Для последующего расшифровывания аналогичным образом вырабатывается гамма шифра и складывается с зашифрованной информацией. В результате получается исходная информация, поскольку известно, что:

А ? В ? В=А

для любых последовательностей одинаковой размерности А и В, где ?— операция побитного сложения по модулю 2.

Ясно, что для расшифровывания информации необходимо иметь тот же ключ шифрования и то же самое значение синхропосылки, что и при зашифровывании. Существуют реализации алгоритма ГОСТ 28147-89, в которых синхропосылка также является секретным элементом, наряду с ключом шифрования. Фактически в этом случае можно считать, что ключ шифрования увеличивается на длину синхропосылки (64 бита), что усиливает стойкость алгоритма.

Режим гаммирования с обратной связью отличается от режима гаммирования только тем, что перед возвратом к шагу 2 (для выработки следующего блока гаммы) в регистры N1 и N2 записывается содержимое блока зашифрованной информации, для зашифровывания которого использовался предыдущий блок гаммы.

С помощью режима выработки имитоприставок вычисляются имитоприставки — криптографические контрольные суммы информации, вычисленные с использованием определенного ключа шифрования. Имитоприставки обычно вычисляются до зашифровывания информации и хранятся или отправляются вместе с зашифрованными данными, чтобы впоследствии использоваться для контроля целостности. После расшифровывания информации имитоприставка вычисляется снова и сравнивается с хранимой; несовпадение значений указывает на порчу или преднамеренную модификацию данных при хранении или передаче или на ошибку расшифровывания.

В режиме выработки имитоприставки выполняются следующие операции:

1. Первый 64-битный блок информации, для которой вычисляется имитоприставка, записывается в регистры N1 и N2 и зашифровывается в сокращенном режиме простой замены, в котором выполняется 16 раундов основного преобразования вместо32-х.

2. Полученный результат суммируется по модулю 2 со следующим блоком открытого текста и сохраняется в N1 и N2.

3. И т.д. до последнего блока открытого текста.

В качестве имитоприставки используется результирующее содержимое регистров N1 и N2 или его часть (в зависимости от требуемого уровня стойкости) — часто имитоприставкой считается 32-битное содержимое регистра N1.

При разработке алгоритма ГОСТ 28147-89 криптографами отечественных спецслужб была заложена избыточная стойкость — до сих пор не известны более эффективные методы взлома данного алгоритма, чем метод полного перебора возможных вариантов ключей шифрования. А полный перебор 2256 ключей (не считая секретной синхропосылки) при современном развитии компьютерной техники за реальное время осуществить невозможно.