Алгоритм криптографического преобразования данных ГОСТ 28147-89

09.10.2017 22:40

    В России в качестве стандарта на блочные алгоритмы шифрования с закрытым ключом в 1989 году был принят ГОСТ 28147-89. Он рекомендуется к использованию для криптографической защиты данных. Шифр, предлагаемый ГОСТ 28147-89 построен по тем же принципам, что и американский DES, однако по сравнению с DES отечественный стандарт шифрования более удобен для программной реализации.

    В отличие от американского DES в отечественном стандарте применяется более длинный ключ – 256 бит. Кроме того, российский стандарт предлагает использовать 32 раунда шифрования, тогда как DES – только 16.

    Таким образом, основные параметры алгоритма криптографического преобразования данных ГОСТ 28147-89 следующие: размер блока составляет 64 бита, размер ключа – 256 бит, количество раундов – 32.

    Алгоритм представляет собой классическую сеть Фейштеля. Шифруемый блок данных разбивается на две одинаковые части, правую R и левую L. Правая часть складывается с подключом раунда и посредством некоторого алгоритма шифрует левую часть. Перед следующим раундом левая и правая части меняются местами. Такая структура позволяет использовать один и тот же алгоритм как для шифрования, так и для дешифрования блока.

    В алгоритме шифрования используются следующие операции:

  • сложение слов по модулю 232;
  • циклический сдвиг слова влево на указанное число бит;
  • побитовое сложение по модулю 2;
  • замена по таблице.

    На различных шагах алгоритмов ГОСТа данные, которыми они оперируют, интерпретируются и используются различным образом. В некоторых случаях элементы данных обрабатываются как массивы независимых битов, в других случаях – как целое число без знака, в третьих – как имеющий структуру сложный элемент, состоящий из нескольких более простых элементов.

Структура раунда ГОСТ 28147-89

    Структура одного раунда ГОСТ 28147-89 приведена на рисунке 1.

    Шифруемый блок данных разбивается на две части, которые затем обрабатываются как отдельные 32-битовые целые числа без знака. Сначала правая половина блока и подключ раунда складываются по модулю 232. Затем производится поблочная подстановка. 32-битовоезначение, полученное на предыдущем шаге (обозначим его S), интерпретируется как массив из восьми 4-битовых блоков кода: S=(S0,S1,S2,S3,S4,S5,S6,S7).     Далее значение каждого из восьми блоков заменяется на новое, которое выбирается по таблице замен следующим образом: значение блока Si заменяется на Si-тый по порядку элемент (нумерация с нуля) i-го узла замен (т.е. i-той строки таблицы замен, нумерация также с нуля). Другими словами, в качестве замены для значения блока выбирается элемент c номером строки, равным номеру заменяемого блока, и номером столбца, равным значению заменяемого блока как 4-битового целого неотрицательного числа. В каждой строке таблицы замен записаны числа от 0 до 15 в произвольном порядке без повторений. Значения элементов таблицы замен взяты от 0 до 15, так как в четырех битах, которые подвергаются подстановке, может быть записано целое число без знака в диапазоне от 0 до 15. Например, первая строка S-блока может содержать такие значения: 5, 8, 1, 13, 10, 3, 4, 2, 14, 15, 12, 7, 6, 0, 9, 11. В этом случае значение блока S0 (четыре младших бита 32-разрядного числа S) заменится на число, стоящее на позиции, номер которой равен значению заменяемого блока. Если S0 = 0, то оно заменится на 5, если S0= 1, то оно заменится на 8 и т.д.

Рис. 1. Структура одного раунда ГОСТ 28147-89

 

    После выполнения подстановки все 4-битовые блоки снова объединяются в единое 32-битное слово, которое затем циклически сдвигается на 11 битов влево. Наконец, с помощью побитовой операции "сумма по модулю 2" результат объединяется с левой половиной, вследствие чего получается новая правая половина Ri. Новая левая часть Li берется равной младшей части преобразуемого блока: Li= Ri-1.

    Полученное значение преобразуемого блока рассматривается как результат выполнения одного раунда алгоритма шифрования.

Процедуры шифрования и расшифрования

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

    Рассмотрим процесс создания подключей раундов. В ГОСТ эта процедура очень проста, особенно по сравнению с DES. 256-битный ключ K разбивается на восемь 32-битных подключей, обозначаемых K0, K1, K2,K3, K4, K5, K6, K7

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

Таблица 1.

    Процесс расшифрования производится по тому же алгоритму, что и шифрование. Единственное отличие заключается в порядке использования подключей Ki.

    При расшифровании подключи должны быть использованы в обратном порядке, а именно, как указано в талице 2.

Таблица 2.

Основные режимы шифрования

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

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

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

    Режимы гаммирования и гаммирования с обратной связью могут использоваться для шифрования данных произвольного размера.

    В режиме гаммирования биты исходного текста складываются по модулю 2 с гаммой, которая вырабатывается с помощью алгоритма шифрования по ГОСТ 28147-89. То есть алгоритм шифрования по ГОСТ 28147-89 в данном режиме используется в качестве генераторов 64-разрядных блоков гаммы. При шифровании каждого нового блока данных гамма, использованная на предыдущем шаге, зашифровывается и используется уже как "новая" гамма. В качестве начального массива данных, шифруемых для получения самой первой гаммы, используется так называемая синхропосылка – 64-разрядный начальный блок данных, который должен быть одинаковым на шифрующей и расшифровывающей стороне. Благодаря тому, что наложение и снятие гаммы осуществляется при помощи одной и той же операциисложения по модулю 2, алгоритмы зашифрования и расшифрования в режиме гаммирования совпадают.

    Так как все элементы гаммы различны для реальных шифруемых массивов, то результат зашифрования даже двух одинаковых блоков в одном массиве данных будет различным. Кроме того, хотя элементы гаммы и вырабатываются одинаковыми порциями в 64 бита, использоваться может и часть такого блока с размером, равным размеру шифруемого блока. Именно это дает возможность шифрования неполных блоков данных.

    Режим гаммирования с обратной связью похож на режим гаммирования и отличается от него только способом выработки элементов гаммы. При гаммировании с обратной связью очередной 64-битный элемент гаммы вырабатывается как результат преобразования по базовому циклу алгоритма ГОСТ 28147-89 предыдущего блока зашифрованных данных. Для зашифрования первого блока массива данных элемент гаммы вырабатывается как результат преобразования по тому же циклу синхропосылки. Этим достигается зацепление блоков – каждый блок шифротекста в этом режиме зависит от соответствующего и всех предыдущих блоков открытого текста. Поэтому данный режим иногда называется гаммированием с зацеплением блоков. На стойкость шифра факт зацепления блоков не оказывает никакого влияния.

    Для решения задачи обнаружения искажений в зашифрованном массиве данных в ГОСТе 28147-89 предусмотрен дополнительный режим криптографического преобразования – выработка имитовставки

    Имитовставка – это контрольная комбинация, зависящая от открытых данных и секретной ключевой информации. Целью использования имитовставки является обнаружение всех случайных или преднамеренных изменений в массиве информации. В режиме выработки имитовставки входной текст обрабатывается блоками следующим образом:

где f – базовый цикл по ГОСТ 28147-89; Xi – 64-разрядный блок исходного текста; K – ключ.

    В качестве имитовставки берется часть блока Yn, полученного на выходе, обычно 32 его младших бита.

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

Отличия алгоритмов шифрования по ГОСТ 28147-89 и DES

    Несмотря на то, что алгоритм, изложенный в ГОСТ 28147-89, проектировался достаточно давно, в него заложен достаточный запас по надежности. Это связано, прежде всего, с большой длиной ключа шифрования.

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

    В шифре, реализуемом в ГОСТ 28147-89, используется 256-битовый ключ, и объем ключевого пространства составляет 2256. Даже если, как и в алгоритмах шифрования DES и AES предположить, что на взлом шифра брошены все силы вычислительного комплекса с возможностью перебора 1012 (это примерно равно 240) ключей в одну секунду, то на полный перебор всех 2256 ключей потребуется 2216секунд (это время составляет более миллиарда лет).

    К уже отмеченным отличиям между алгоритмами DES и ГОСТ 28147 можно добавить также следующее. В основном раунде DES применяются нерегулярные перестановки исходного сообщения, в ГОСТ 28147 используется 11-битный циклический сдвиг влево. Последняя операция гораздо удобнее для программной реализации. Однако перестановка DES увеличивает лавинный эффект. В ГОСТ 28147 изменение одного входного бита влияет на один 4-битовый блок при замене в одном раунде, который затем влияет на два 4-битовых блока следующего раунда, три блока следующего и т.д. В ГОСТ 28147 требуется 8 раундов прежде, чем изменение одного входного бита повлияет на каждый бит результата; DES для этого нужно только 5 раундов.

    Также следует отметить, что в отличие от DES, у ГОСТ 28147-89 таблицу замен для выполнения операции подстановки можно произвольно изменять, то есть таблица замен является дополнительным 512-битовым ключом.