Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Румбешт_Уч.пос._для печати.doc
Скачиваний:
5
Добавлен:
01.04.2025
Размер:
11.86 Mб
Скачать

3.2. Алгоритм криптографического преобразования данных гост 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) – правые или младшие биты.

Эти последовательности вводят в накопители и ; перед началом первого раунда шифрования.

В результате начальное заполнение накопителя :

Номер разряда

32

31

2

1

a(0) = (

,

,

…,

,

)

Начальное заполнение накопителя :

Номер разряда

32

31

2

1

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-блока

Значение входа

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

1

4

10

9

2

13

8

0

14

6

11

1

12

7

15

5

3

2

14

11

4

12

6

13

15

10

2

3

8

1

0

7

5

9

3

5

8

1

13

10

3

4

2

14

15

12

7

6

0

9

11

4

7

13

10

1

0

8

9

15

14

4

6

12

11

2

5

3

5

6

12

7

1

5

15

13

8

4

10

9

14

0

3

11

2

6

4

11

10

0

7

2

1

13

3

6

8

5

9

12

15

14

7

13

11

4

1

3

15

5

9

0

10

14

7

6

8

2

12

8

1

15

13

0

5

7

10

4

9

2

3

14

6

11

8

12

Вторая операция – циклический сдвиг влево (на 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 накопителя , т.е. начиная с младших разрядов:

.

Криптосхема, реализующая алгоритм расшифрования блока, имеет тот же вид, что и при шифровании (см. рис. 3.2).

В КЗУ вводят 256 бит ключа, на котором осуществлялось шифрование. Зашифрованные данные, подлежащие расшифрованию, разбиты на блоки по 64 бита в каждом. Ввод любого блока в накопители и производят так, чтобы начальное значение накопителя , имело вид:

Номер разряда

32

31

2

1

a(32) = (

,

,

…,

,

)

Начальное заполнение накопителя :

Номер разряда

32

31

2

1

b(32) = (

,

,

…,

,

)

Расшифрование осуществляется по тому же алгоритму, что и шифрование, с тем изменением, что заполнения накопителей считываются из КЗУ в раундах расшифрования в следующем порядке:

Уравнения расшифрования имеют вид:

при j=1…8,

при j=9…31,

при j=32.

Полученные после 32 циклов работы заполнения накопителей и образуют блок открытых данных

,

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