Алгоритм криптографического преобразования данных ГОСТ 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 циклов работы заполнения накопителей и образуют блок открытых данных

,

соответствующий блоку зашифрованных данных .



lArr; Назад
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 151617
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • Далее ⇒