ОПИСАНИЕ АЛГОРИТМА КРИПТОГРАФИЧЕСКИХ ПРЕОБРАЗОВАНИЙ В СООТВЕТСТВИИ С ГОСТ 28147-89

1. Сфера применения стандарта

Данный стандарт устанавливает единый алгоритм криптографического преобразования для систем обработки информации в сетях электронных вычислительных машин (ЭВМ), отдельных вычислительных комплексах и ЭВМ, который определяет правила шифрования данных и выработки имитовставки.

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

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

2. Структурная схема алгоритма криптографического преобразования

Структурная схема алгоритма криптографического преобразования (криптосхема), приведенного на рисунке 1, содержит:

- ключевое запоминающее устройство (КЗУ) на 256 бит, состоящее из восьми 32-разрядных накопителей (Х0, Х1, Х2, Х3, Х4, Х5, Х6, Х7);

- четыре 32-разрядных накопителя (N1, N2, N3, N4);

- два 32-разрядных накопителя (N5, N6) с записанными в них постоянными заполнения С2, С1;

- два 32-разрядных сумматора по модулю 232 (СМ1, СМ3);

- 32- разрядный сумматор поразрядного суммирования по модулю 2 (СМ2);

- 32-разрядный сумматор по модулю (232-1) (СМ4);

- сумматор по модулю 2 (СМ5), ограничение на разрядность сумматора СМ5 не накладывается;

- блок подстановки (К);

- регистр циклического сдвига на одиннадцать шагов в сторону старшего разряда (R).

Рисунок 1.

Блок подстановки К состоит из восьми узлов замены К1, К2, К3, К4, К5, К6, К7, К8 с памятью на 64 бита каждый. Поступающий на блок подстановки 32-разрядный вектор разбивается на восемь последовательно идущих 4-разрядных векторов, каждый из которых преобразуется в 4-разрядный вектор соответствующим узлом замены, представляющим собой таблицу из шестнадцати строк, содержащих по четыре бита заполнения в строке. Входной вектор определяет адрес строки в таблице, заполнение данной строки является выходящим вектором. Затем 4-разрядные выходные векторы последовательно объединяются в 32-разрядный вектор.

При сложении и циклическом сдвиге двоичных векторов старшими разрядами считаются разряды накопителей с большими номерами.

При записи ключа (W1, W2, …, W256), WqЄ{0,1}, q=i÷256, â КЗУ значение W1 вводится в 1-й разряд накопителя Х0, значение W2 вводится во 2-й разряд накопителя Х0, …, значение W32 вводится в 32-й разряд накопителя Х0; значение W33 вводится в 1-й разряд накопителя Х1, значение W34 вводится во 2-й разряд накопителя Х1, …, значение W64 вводится в 32-й разряд накопителя Х1; значение W65 вводится в 1-й разряд накопителя Х2 и т.д., значение W256 вводится в 32-й разряд накопителя Х7.

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

Значение постоянной заполнения С1 (константа) накопителя N6 приведено в таблице 1.

Таблица 1

Разряд накопителя N6

32

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

Значение разряда

0

0

0

0

0

0

0

1

0

0

0

0

0

0

0

1

Разряд накопителя N6

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

Значение разряда

0

0

0

0

0

0

0

1

0

0

0

0

0

1

0

0

Значение постоянной заполнения С2 (константа) накопителя N5 приведено в таблице 2.

Таблица 2

Разряд накопителя N5

32

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

Значение разряда

0

0

0

0

0

0

0

1

0

0

0

0

0

0

0

1

Разряд накопителя N5

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

Значение разряда

0

0

0

0

0

0

0

1

0

0

0

0

0

0

0

1

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

Заполнение таблиц блока подстановки К является долговременным ключевым элементом, общим для сети ЭВМ.

Организация различных видов связи достигается построением соответствующей ключевой системы. При этом может быть использована возможность выработки ключей (заполнения КЗУ) в режиме простой замены и зашифрования их в режиме простой замены с обеспечением имитозащиты для передачи по каналам связи или хранения в памяти ЭВМ.

В криптосхеме предусмотрены четыре вида работы:

- зашифрование (расшифрование) данных в режиме простой замены;

- зашифрование (расшифрование) данных в режиме гаммирования:

- зашифрование (расшифрование) данных в режиме гаммирования с обратной связью;

- режим выработки имитовставки.

3. Шифрование в режиме простой замены

3.1. Зашифрование открытых данных в режиме простой замены

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

Рисунок 2

Открытые данные, подлежащие зашифрованию, разбиваются на блоки по 64 бита в каждом. Ввод любого блока Т0=(a1(0), a2(0), …, a32(0), b1(0), b2(0), …, b32(0)) двоичной информации в накопители N1 и N2 производится так, что значение a1(0) вводится в 1-й разряд N1, значение a2(0) вводится во 2-й разряд N1, и т.д., значение a32(0) вводится в 32-й разряд N1; значение b1(0) вводится в 1-й разряд N2, значение b2(0) вводится во 2-й разряд N2 и т.д., значение b32(0) вводится в 32-й разряд N2. В результате получают состояние (a32(0), a31(0), …, a2(0), a1(0)) накопителя N1 и состояние (b32(0), b31(0), …, b2(0), b1(0)) накопителя N2.

В КЗУ вводятся 256 бит ключа. Содержимое восьми 32-разрядных накопителей Х0, Х1, …, Х7 имеет вид:

Х0=(W32, W31, …, W2, W1)

Х1=(W64, W63, …, W34, W33)

. . . . . . . . . . . . .

Х7=(W256, W255, …, W226, W225)

Алгоритм зашифрования 64-разрядного блока открытых данных в режиме простой замены состоит из 32 циклов.

В первом цикле начальное заполнение накопителя N1 суммируется по модулю 232 в сумматоре СМ1 с заполнением накопителя Х0, при этом заполнение накопителя N1 сохраняется.

Результат суммирования преобразуется в блоке подстановки К и полученный вектор поступает на вход регистра R, где циклически сдвигается на одиннадцать шагов в сторону старших разрядов. Результат сдвига суммируется поразрядно по модулю 2 в сумматоре СМ2 с 32-разрядным заполнением накопителя N2. Полученный в СМ2 результат записывается в N1, при этом старое значение N1 переписывается в N2. Первый цикл заканчивается.

Последующие циклы осуществляются аналогично, при этом во 2-м цикле из КЗУ считывается заполнение Х1, в 3-м цикле из КЗУ считывается заполнение Х2 и т.д., в 8-м цикле из КЗУ считывается заполнение Х7. В циклах с 9-го по 16-й, а также в циклах с 17-го по 24-й заполнения из КЗУ считываются в том же порядке:

Х0, Х1, Х2, Х3, Х4, Х5, Х6, Х7.

В последних восьми циклах с 25-го по 32-й порядок считывания заполнений КЗУ обратный:

Х7, Х6, Х5, Х4, Х3, Х2, Х1, Х0.

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

Х0, Х1, Х2, Х3, Х4, Х5, Х6, Х7, Х0, Х1, Х2, Х3, Х4, Х5, Х6, Х7,

Х0, Х1, Х2, Х3, Х4, Х5, Х6, Х7, Х7, Х6, Х5, Х4, Х3, Х2, Х1, Х0.

В 32-м цикле результат из сумматора СМ2 вводится в накопитель N2, а в накопителе N1 сохраняется старое заполнение.

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

3.2. Расшифрование зашифрованных данных в режиме простой замены

Криптосхема, реализующая алгоритм расшифрования в режиме простой замены, имеет тот же вид (см. рисунок 2), что и при зашифровании. В КЗУ вводятся 256 бит того же ключа, на котором осуществлялось зашифрование. Зашифрованные данные, подлежащие расшифрованию, разбиты на блоки по 64 бита в каждом. Ввод любого блока Тш=(а1(32), а2(32), …, а32(32), b1(32), b2(32), …, b32(32)) в накопители N1 и N2 производится так, что значение а1(32) вводится в 1-й разряд N1, значение a2(32) вводится во 2-й разряд N1, и т.д., значение a32(32) вводится в 32-й разряд N1; значение b1(32) вводится в 1-й разряд N2, значение b2(32) вводится во 2-й разряд N2 и т.д., значение b32(32) вводится в 32-й разряд N2.

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

Х0, Х1, Х2, Х3, Х4, Х5, Х6, Х7, Х7, Х6, Х5, Х4, Х3, Х2, Х1, Х0,

Х7, Х6, Х5, Х4, Х3, Х2, Х1, Х0, Х7, Х6, Х5, Х4, Х3, Х2, Х1, Х0.

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

Т0=(a1(0), a2(0), …, a32(0), b1(0), b2(0), …, b32(0)), соответствующий блоку зашифрованных данных, при этом значение а1(0) блока Т0 соответствует содержимому 1-го разряда N1, значение а2(0) соответствует содержимому 2-го разряда N1 и т.д., значение а32(0) соответствует содержимому 32-го разряда N1; значение b1(0) соответствует содержимому 1-го разряда N2, значение b2(0) соответствует содержимому 2-го разряда N2, и т.д., значение b32(0) соответствует содержимому 32-го разряда N2.

Аналогично расшифровываются остальные блоки зашифрованных данных.

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

4.1. Зашифрование открытых данных в режиме гаммирования

Криптосхема, реализующая алгоритм зашифрования в режиме гаммирования, должна иметь вид, приведенный на рисунке 3.

Рисунок 3

Открытые данные, разбитые на 64-разрядные блоки Т0(1), Т0(2), …, Т0(М-1), Т0(М), зашифровываются в режиме гаммирования путем поразрядного суммирования по модулю 2 в сумматоре СМ5 с гаммой шифра Гш, которая вырабатывается блоками по 64 бита, т.е.

Гш=(Гш(1), Гш(2), …, Гш(М-1), Гш(М)),

где М – определяется объемом шифруемых данных.

Гш(i) – i-й 64-разрядный блок, i=1÷Ì, число двоичных разрядов в блоке Т0(М) может быть меньше 64, при этом неиспользованная для зашифрования часть гаммы шифра из блока Гш(М) отбрасывается.

В КЗУ вводятся 256 бит ключа. В накопители N1, N2 вводится 64-разрядная двоичная последовательность (синхропосылка) S=(S1, S2, …, S64), являющаяся исходным заполнением этих накопителей для последующей выработки М блоков гаммы шифра. Синхропосылка вводится в N1 и N2 так, что значение S1 вводится в 1-й разряд N1, значение S2 вводится во 2-й разряд N1, и т.д., значение S32 вводится в 32-й разряд N1; значение S33 вводится в 1-й разряд N2, значение S34 вводится во 2-й разряд N2 и т.д., значение S64 вводится в 32-й разряд N2.

Исходное заполнение накопителей N1 и N2 (синхропосылка S) зашифровывается в режиме простой замены в соответствии с требованиями пункта 1.3.1. Результат зашифрования переписывается в 32-разрядые накопители N3 и N4 так, что заполнение N1 переписывается в N3, а заполнение N2 переписывается в N4.

Заполнение накопителя N4 суммируется по модулю (232-1) в сумматоре СМ4 с 32-разрядной константой С1 из накопителя N6, результат записывается в N4.

Заполнение накопителя N3 суммируется по модулю 232 в сумматоре СМ3 с 32-разрядной константой С2 из накопителя N5, результат записывается в N3.

Заполнение N3 переписывается в N1, а заполнение N4 переписывается в N2, при этом заполнение N3, N4 сохраняется.

Заполнение N1 и N2 зашифровывается в режиме простой замены в соответствии с требованиями пункта 3.1. Полученное в результате зашифрования заполнение N1, N2 образует первый 64-разрядный блок гаммы шифра Гш(1), который суммируется поразрядно по модулю 2 в сумматоре СМ5 с первым 64-разрядным блоком открытых данных Т0(1)=(t1(1), t2(1), …, t63(1), t64(1)). В результате суммирования получается 64-разрядный блок зашифрованных данных Тш(1)=(τ1(1), τ2(1), …, τ63(1), τ64(1)).

Значение τ1(1) блока Тш(1) является результатом суммирования по модулю 2 в СМ5 значения t1(1) из блока Т0(1) со значением 1-го разряда N1, значение τ2(1) блока Тш(1) является результатом суммирования по модулю 2 в СМ5 значения t2(1) из блока Т0(1) со значением 2-го разряда N1 и т.д., значение τ64(1) блока Тш(1) является результатом суммирования по модулю 2 в СМ5 значения t64(1) из блока Т0(1) со значением 32-го разряда N2.

Для получения следующего 64-разрядного блока гаммы шифра Гш(2) заполнение N4 суммируется по модулю (232-1) в сумматоре СМ4 с константой С1 из N6, заполнение N3 суммируется по модулю 232 в сумматоре СМ3 с константой С2 из N5. Новое заполнение N3 переписывается в N1, а новое заполнение N4 переписывается в N2, при этом заполнение N3 и N4 сохраняется.

Заполнение N1 и N2 зашифровывается в режиме простой замены в соответствии с требованиями пункта 3.1. Полученное в результате зашифрования заполнение N1, N2 образует второй 64-разрядный блок гаммы шифра Гш(2), который суммируется поразрядно по модулю 2 в сумматоре СМ5 со вторым блоком открытых данных Т0(2). Аналогично вырабатываются блоки гаммы шифра Гш(3), Гш(4) …, Гш(М) и зашифровываются блоки открытых данных Т0(3), Т0(4) …, Т0(М). Если длина последнего М-го блока открытых данных Т0(М) меньше 64 бит, то из последнего М-го блока гаммы шифра Гш(М) для зашифрования используется только соответствующее число разрядов гаммы шифра, остальные разряды отбрасываются.

В канал связи или память ЭВМ передаются синхропосылка S и блоки зашифрованных данных Тш(1), Тш(2) …, Тш(М).

 

4.2. Расшифрование зашифрованных данных в режиме гаммирования

При расшифровании криптосхема имеет тот же вид, что и при зашифровании (см. рисунок 3). В КЗУ вводятся 256 бит ключа, с помощью которого осуществлялось зашифрование данных Т0(1), Т0(2) …, Т0(М) при этом Т0(М) может содержать меньше 64 разрядов.

5. Режим гаммирования с обратной связью

5.1. Зашифрование открытых данных в режиме гаммирования с обратной связью

Криптосхема, реализующая режим гаммирования с обратной связью, должна иметь вид, приведенный на рисунке 4.

Рисунок 4

Открытые данные, разбитые на 64-разрядные блоки Т0(1), …, Т0(М), зашифровываются в режиме гаммирования с обратной связью путем поразрядного суммирования по модулю 2 в сумматоре СМ5 с гаммой шифра Гш, которая вырабатывается блоками по 64 бита, т.е. Гш=(Гш(1), Гш(2), …, Гш(М)), где М – определяется объемом шифруемых данных, Гш(i) – i-й 64-разрядный блок, i=1÷Ì. Число двоичных разрядов в блоке Т0(М) может быть меньше 64.

В КЗУ вводятся 256 бит ключа. В накопители N1, N2 вводится 64-разрядная двоичная последовательность (синхропосылка) S=(S1, S2, …, S64). Синхропосылка вводится в N1 и N2 так, что значение S1 вводится в 1-й разряд N1, значение S2 вводится во 2-й разряд N1, и т.д., значение S32 вводится в 32-й разряд N1; значение S33 вводится в 1-й разряд N2, значение S34 вводится во 2-й разряд N2 и т.д., значение S64 вводится в 32-й разряд N2.

Исходное заполнение накопителей N1 и N2 зашифровывается в режиме простой замены в соответствии с требованиями пункта 3.1. Полученное в результате зашифрования заполнение N1 и N2 образует первый 64-разрядный блок гаммы шифра Гш(1), который суммируется поразрядно по модулю 2 в сумматоре СМ5 с первым 64-разрядным блоком открытых данных Т0(1)=(t1(1), t2(1), …, t63(1), t64(1)).

В результате суммирования получается 64-разрядный блок зашифрованных данных Тш(1)=(τ1(1), τ2(1), …, τ63(1), τ64(1)).

Блок зашифрованных данных Тш(1) одновременно является также исходным состоянием N1, N2 для выработки второго блока гаммы шифра Гш(2) и по обратной связи записывается в указанные накопители. При этом значение τ1(1) вводится в 1-й разряд N1, значение τ2(1) вводится во 2-й разряд N1 и т.д., значение τ32(1) вводится в 32-й разряд N1; значение τ33(1) вводится в 1-й разряд N2, значение τ34(1) вводится во 2-й разряд N2 и т.д., значение τ64(1) вводится в 32-й разряд N2.

Заполнение N1, N2 зашифровывается в режиме простой замены в соответствии с требованиями пункта 3.1. Полученное в результате зашифрования заполнение N1, N2 образует второй 64-разрядный блок гаммы шифра Гш(2), который суммируется поразрядно по модулю 2 в сумматоре СМ5 со вторым блоком открытых данных Т0(2).

Выработка последующих блоков гаммы шифра Гш(i) и зашифрование соответствующих блоков открытых данных Т0(i) (i=3÷Ì) производится аналогично. Если длина последнего М-го блока открытых данных Т0(М) меньше 64 разрядов, то из Гш(М) используется только соответствующее число разрядов гаммы шифра, остальные разряды отбрасываются.

В канал связи или память ЭВМ передаются синхропосылка S и блоки зашифрованных данных Тш(1), Тш(2) …, Тш(М).

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

При расшифровании криптосхема имеет тот же вид, что и при зашифровании (см. рисунок 4). В КЗУ вводятся 256 бит того же ключа, на котором осуществлялось зашифрование Т0(1), Т0(2) …, Т0(М). Синхропосылка вводится в N1, N2 так, что значение S1 вводится в 1-й разряд N1, значение S2 вводится во 2-й разряд N1, и т.д., значение S32 вводится в 32-й разряд N1; значение S33 вводится в 1-й разряд N2, значение S34 вводится во 2-й разряд N2 и т.д., значение S64 вводится в 32-й разряд N2.

Исходное заполнение накопителей N1 и N2 (синхропосылка S) зашифровывается в режиме простой замены в соответствии с требованиями пункта 3.1. Полученное в результате зашифрования заполнение N1, N2 образует первый 64-разрядный блок гаммы шифра Гш(1), который суммируется поразрядно по модулю 2 в сумматоре СМ5 с блоком зашифрованных данных Тш(1). В результате получается первый блок открытых данных Т0(1).

Блок зашифрованных данных Тш(1) является исходным заполнением N1, N2 для выработки второго блока гаммы шифра Гш(2). Блок Тш(1) записывается в N1, N2. При этом значение τ1(1) вводится в 1-й разряд N1, значение τ2(1) вводится во 2-й разряд N1 и т.д., значение τ32(1) вводится в 32-й разряд N1; значение τ33(1) вводится в 1-й разряд N2, значение τ34(1) вводится во 2-й разряд N2 и т.д., значение τ64(1) вводится в 32-й разряд N2. Полученное заполнение N1, N2 зашифровывается в режиме простой замены в соответствии с требованиями пункта 3.1, полученный в результате блок Гш(2) суммируется поразрядно по модулю 2 в сумматоре СМ5 со вторым блоком зашифрованных данных Тш(2). В результате получается блок открытых данных Т0(2).

Аналогично в N1, N2 последовательно записываются блоки зашифрованных данных Тш(2), Тш(3) …, Тш(М-1), из которых в режиме простой замены вырабатываются блоки гаммы шифра Гш(3), Гш(4), …, Гш(М). Блоки гаммы шифра суммируются поразрядно по модулю 2 в сумматоре СМ5 с блоками зашифрованных данных Тш(3), Тш(4) …, Тш(М), в результате получаются блоки открытых данных Т0(3), Т0(4), …, Т0(М), при этом длина последнего блока открытых данных Т0(М) может содержать меньше 64-разрядов.

6. Режим выработки имитовставки

Для обеспечения имитозащиты открытых данных, состоящих из М 64-разрядных блоков Т0(1), Т0(2), …, Т0(М), М≥2, вырабатывается дополнительный блок из l бит (имитовставки Иl). Процесс выработки имитовставки единообразен для всех режимов шифрования.

Первый блок открытых данных Т0(1)=(t1(1), t2(1), …, t64(1))=(a1(1)(0), a2(1)(0), …, a32(1)(0), b1(1)(0), b2(1)(0), …, b32(1)(0)) записывается в накопители N1 и N2, при этом значение t1(1)=a1(1)(0) вводится в 1-й разряд N1, значение t2(1)=a2(1)(0) вводится во 2-й разряд N1, и т.д., значение t32(1)=a32(1)(0) вводится в 32-й разряд N1; значение t33(1)=b1(1)(0) вводится в 1-й разряд N2 и т.д., значение t34(1)=b32(1)(0) вводится в 32-й разряд N2.

Заполнение N1 и N2 подвергается преобразованию, соответствующему первым 16 циклам алгоритма зашифрования в режиме простой замены, в соответствии с требованиями пункта 3.1. В КЗУ при этом находится тот же ключ, которым зашифровываются блоки открытых данных Т0(1), Т0(2), …, Т0(М) в соответствующие блоки зашифрованных данных Тш(1), Тш(2), …, Тш(М).

Полученное после 16 циклов работы заполнение N1 и N2, имеющее вид (a1(1)(16), a2(1)(16), …, a32(1)(16), b1(1)(16), b2(1)(16), …, b32(1)(16)), суммируется в СМ5 по модулю 2 со вторым блоком Т0(2)=(t1(2), t2(2), …, t64(2)). Результат суммирования заносится в N1 и N2 и подвергается преобразованию, соответствующему первым 16 циклам алгоритма зашифрования в режиме простой замены.

Полученное заполнение N1 и N2 суммируется в СМ5 по модулю 2 с третьим блоком Т0(3) и т.д., последний блок Т0(М)=(t1(М), t2(М), …, t64(М)), при необходимости дополненный до полного 64-разрядного блока нулями, суммируется в СМ5 по модулю 2 с заполнением N1, a1(М-1)(16), a2(М-1)(16), …, a32(М-1)(16), b1(М-1)(16), b2(М-1)(16), …, b32(М-1)(16). Результат суммирования заносится в N1, N2 и зашифровывается в режиме простой замены по первым 16 циклам работы алгоритма. Из полученного заполнения накопителей N1 и N2 выбираем отрезок Иl=[a32-l+1(М)(16), a32-l+1(М)(16), …, a32(М)(16)].

Имитовставка Иl передается по каналу связи или в память ЭВМ в конце зашифрованных данных, т.е. Тш(1), Тш(2), …, Тш(М), Иl.

Поступившие зашифрованные данные Тш(1), Тш(2), …, Тш(М) расшифровываются, из полученных блоков открытых данных Т0(1), Т0(2), …, Т0(М) вырабатывается имитовставка Иl, которая затем сравнивается с имитовставкой Иl, полученной вместе с зашифрованными данными из канала связи или памяти ЭВМ. В случае несовпадения имитовставок полученные блоки открытых данных Т0(1), Т0(2), …, Т0(М) считают ложными.

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