Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы криптологии. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
11.08.2026
Размер:
570 Кб
Скачать

к которому применяем матрицу перестановок, обратную к IP :

12

8

16

4

ù

é

 

 

 

 

ê

3

11

15

7

ú

ê

 

6

10

 

ú

ê 2

14ú

ê

9

1

13

5

ú

ë

û .

Получим исходный блок

é0

1

1

 

 

 

 

 

 

 

ê0

1

0

0ú

= (0110

 

0100

 

0101

 

1011),

T = ê

 

 

ú

 

 

 

ê0

1

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ê

0

1

ú

 

 

 

 

 

 

 

ë1

1û

 

 

 

 

 

 

 

что соответствует открытому тексту ЖДЁМ.

12. СТАНДАРТ КРИПТОСИСТЕМЫ РОССИИ ГОСТ 28147-89

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

1)простая замена;

2)гаммирование;

3)гаммирование с обратной связью.

Режим простой замены. Рассмотрим первый и самый простой режим работы алгоритма – замену. В нем очередная

последовательность бит T ( j) разделяется на две последовательности B( j) (левые, или старшие биты) и A( j) (правые, или младшие биты).

66

232 .

Далее выполняется итеративный процесс шифрования (32 итерации), основанный на преобразованиях Файстеля. В стандарте ГОСТ используемый 256-битовый ключ Х представляется в виде восьми

32-разрядных чисел (подключей) X ( j), j = 0,7 . Элементы ключа выбираются три раза в прямой (0, 1, 2, 3, …, 7) и один раз в обратной (7, 6, …, 0) последовательности. Цикл расшифрования данных использует последовательность подключей один раз в прямой и три раза в обратной.

Алгоритм ГОСТа: 1. Для i =1,24, j = (i -1)mod8

A(i) = f (A(i -1)[ +] X ( j)) Å B(i -1)

B(i) = A(i 1)

2. Для i = 25,31, j = 32 - i

A(i) = f (A(i -1)[ +] X ( j)) Å B(i -1)

B(i) = A(i 1)

3. i = 32

A(32) = A(31)

B(32) = f (A(31)[ +] X (0)) Å B(31) ,

где Å – операция сложения по модулю 2, [ +] – операция сложения по модулю

После сложения по модулю 232 с подключом X ( j) функция шифрования f включает две операции. Первая операция называется

подстановкой S. В этой операции правый блок A(i 1) складывается

сначала по модулю 232 с подключом X ( j) . Полученное 32-битовое число делится на восемь 4-битовых частей. Каждое из этих 4 битовых

чисел

преобразуется

соответствующим

Si -блоком в

новое

4-битовое

число.

 

 

 

 

 

 

 

 

 

 

S-БЛОК

Si 0

1 2 3

4 5 6 7 8

9 10 11

12 13

14 15

67

S1

1

0

10

11

15

9

8

14

6

5

2

3

13

12

7

4

S2

0

3

8

1

11

13

6

10

2

15

7

4

14

5

12

9

S3

4

7

13

5

0

3

12

1

9

8

10

14

6

2

11

15

S4

10

15

2

12

9

14

7

6

8

4

0

13

3

11

5

1

S5

6

1

4

10

2

12

0

15

8

13

3

11

5

9

14

7

S6

8

11

7

14

15

5

12

2

0

9

10

1

6

13

3

4

S7

11

5

9

4

3

1

15

8

7

2

14

0

13

12

10

6

S8

4

13

15

5

0

3

12

7

10

11

8

9

6

1

14

2

Пример: На вход S-блока поступило 32-битовое число.

 

1

2

3

4

5

6

7

8

Было

0111

0011

0101

0110

1110

1011

1000

0011

Десят.

7

3

5

6

14

11

8

3

число

 

 

 

 

 

 

 

 

Si

14

1

3

7

14

1

7

5

Стало

1110

0001

0011

0111

1110

0001

0111

0101

На

вход

S1 блока поступило 7. На пересечении

строки 1

и столбца 7

находится десятичное число 14. Этому числу

соответствует 4-битовое число 1110 и т. д.

 

 

 

Вторая операция: после преобразования S-блоком полученное 32-битовое число сдвигается влево на 11 позиций.

12 ------------------------------------------------ 32 1 ------------------------------------ 11

Число циклов – 32. Процесс дешифрования является инверсным. Рассмотрим работу алгоритма на простом примере, когда

размеры блоков T ( j) равны 16 бит, все уменьшено в 4 раза, реализуется одна итерация и выбран 64-битовый ключ X:

1

2

3

4

5

6

7

8

X(0)

X(1)

X(2)

X(3)

X(4)

X(5)

X(6)

X(7)

00000001

00000010

00000011

00000100

00000101

00000110

00000111

00001000

Первые 16 букв русского алфавита пронумерованы от 0 до 15: А – 0, Б – 1, В – 2, …, Р – 15.

Зашифруем сообщение: ЖДЕМ; Ж – 6, Д – 4, Е – 5, М – 11. ЖДЕМ – 0110|0100|0101|1011.

68

Блок T (0) имеет вид:

B(0)A(0)

Найдем A(1) = f (A(0)[ +] X (0)) Å B(0).

Здесь [ +]

– сложение по модулю 28

блока младших битов A(0) с

подключом X (0)

 

 

 

 

 

 

 

 

 

10000111

 

 

 

 

 

00000001

 

 

 

[ +]

10001000

Первая операция.

 

8-битовое число делится на

Полученное

8 однобитовых

чисел,

 

каждое из

которых преобразуется

соответствующим S-блоком в другое однобитовое число.

 

 

 

 

 

 

 

 

S-БЛОК

S

S1

S2

S3

S4

S5

S6

S7

S8

0

1

0

1

0

1

0

1

0

1

0

1

0

1

0

1

0

1

 

Например: первое однобитовое число 8 битового сообщения

равно 1, на пересечении 1 строки и столбца

S1 находится число 0.

Второе однобитовое число равно 0. На пересечении 0 строки и

столбца S2 находится 0 и т. д.

В итоге имеем 8-битовое число 00100010.

Вторая операция: после преобразования S-блоком полученное 8-битовое сообщение сдвигается влево на 3 позиции,

4 5 ………… 8 1 2 3

получили 00010001. Далее реализуется преобразование Файстеля:

B(1) = A(0) 10000111

A(1) = f (A(0)[ +] X (0)) Å B(0)

69

00010001

01010110

01000111

A(1) = Å

00010001

01010110

01000111

В итоге имеем

 

 

 

 

 

 

 

 

é

1

0

 

0

1® 9 ® K

 

 

 

 

 

 

 

ù

 

 

ê

0

0

 

0

ú

® A

T (1) = ê

 

0® 0

 

 

 

 

ú

 

Ш

ê0

1

 

0

1®ú 5 ® E

 

 

 

ê

 

 

 

 

ú

 

 

1

1

1

 

 

ë

1®15 ® P

 

 

B(1)

 

A(1) û

 

Шифротекст: КАЕР.

Процедура расшифрования является обратимой по отношению к шифрованию. Восстанавливаем

A(0) = B(1);

т. к. аргументы функции шифрования f (A(0)[ +] X (0)) остаются теми же, что и при шифровании, то

f (A(0)[ +] X (0)) = 00010001.

Блок

 

 

 

 

B(0) = A(1) Å f (A(0)[ +]

X (0)).

B(0) = Å.

 

 

 

Восстанавливаем открытый текст:

 

01000111

 

 

 

00010001

 

 

 

01010110

 

0ù® 6 ® Ж

é0

1

1

ê0

1

0

0ú® 4 ® Д

T(0) = ê

1

0

ú

 

ê0

1ú® 5 ® E

ê

 

 

ú

данные, разбитые на

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

Открытые

ë1

0

1

1û®11® М

64-битовые блоки T ( j), зашифровываются в режиме гаммирования

путем поразрядного сложения по модулю 2 с гаммой шифра TШ ( j) ,

70

S = (Y(0), Z(0))

которая вырабатывается блоками по 64 бита. Уравнение шифрования данных имеет вид

TШ ( j) = T ( ) Å jШ ( ),

где ГШ ( j) = ( f (Y ( j)), f (Z( j)).

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

Для простоты выберем нулевые подключи X ( j) . Величины

Y ( j), Z( j) определяются итерационно по мере формирования гаммы шифра следующим образом:

Y ( j) = Y ( j 1)[ +] C1; Z( j) = Z( j 1){ +} C2.

Здесь C1, C2 − константы, заданные ГОСТ, { +} – операция сложения по модулю 232 1. 64-битовая последовательность

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

Рассмотрим работу алгоритма гаммирования на предыдущем примере: ЖДЕМ – открытый текст. Все параметры алгоритма уменьшены в 4 раза.

В качестве констант возьмем 8-битовые числа:

C1 = 7 00000111;

C2 = 12 00001100.

битовая последовательность S = (Y(0), Z(0))

 

16-

 

 

 

 

 

Y (0) = (10101010),Z(0) = (01010101)

 

используется

для

инициирования

гаммы

шифра

ГШ (1) = ( f (Y (1)), f (Z(1))) :

71

Y(1) =Y(0)[+]C1= Å10101010 00000111

10110001

01010101

00001100

Z

(1) = Z(0)[ +] C2 = Å 01100001

 

Найдем f (Y (1)) .

После преобразования S-блоком

получим

8-битовое

00011011.

Осуществляя сдвиг влево на 3

позиции,

окончательно имеем f (Y(1)) = (11011000).

Аналогично найдем f (Z(1)) = (01011110). В итоге имеем гамму шифра

ГШ (1) = (1101100001011110)

ипервый блок шифротекста

 

 

 

 

(1) = Г(1)Å

 

0110010001011011

Ш

(1) = Å

Ш

1101100001011110

 

 

 

 

1011110000000101

Шифротекст: МНАЕ.

Процедура расшифрования: по тому же алгоритму находится гамма шифра ГШ (1) , тогда открытый текст

 

 

 

(1) = Ш (1)Г Å

1011110000000101

Ш (1) = Å

 

1101100001011110

 

0110010001011011

Открытый текст: ЖДЕМ.

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

72

данных элемент гаммы вырабатывается как результат преобразования по тому же циклу синхропосылки, т. е.

j = 1, TШ (1) = T (1) Å f (Y (0), f (Z(0)); j = 2 ÷ m , TШ ( j) = T ( j) Å f (TШ ( j -1)).

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

Рассмотрим работу этого метода на примере шифрования открытого текста ЖДЕМДЕДА. Поскольку при шифровании первого

блока T (1) используется алгоритм гаммирования, то воспользуемся полученным результатом предыдущего примера, в котором

TШ (1) = (1011110000000101),

из него найдем аргументы функции шифрования Y (1),Z(1) :

Y (1) = (10111100), Z(1) = (00000101) ,

f (Y (1)) = (10110000), f (Z(1)) = (01111101),

ГШ (2) = (1011000001111101).

Представим второй блок открытого текста ДЕДА 16-битовым числом

T (2) = 0100010101000000.

Его шифротекст

ТШ (2) = T (2) Å ГШ (2) = Å

0100010101000000

1011000001111101

1111010100111101

что соответствует: РЕГО.

В итоге шифротекст всего сообщения: МНАЕРЕГО.

Процедура расшифрования: по аналогии с предыдущим примером восстанавливаем первый блок открытого текста: ЖДЕМ.

73