- •ВВЕДЕНИЕ
- •1. ОСНОВНЫЕ ПОНЯТИЯ
- •2. ИСТОРИЧЕСКИЕ ШИФРЫ
- •3. МОДУЛЯРНАЯ АРИФМЕТИКА
- •4. АСИММЕТРИЧНЫЕ СИСТЕМЫ ШИФРОВАНИЯ. КРИПТОСИСТЕМА RSA
- •5. ПРОСТЫЕ ЧИСЛА. ГЕНЕРАЦИЯ ПРОСТЫХ ЧИСЕЛ
- •6. АТАКА ВИНЕРА НА RSA
- •7. РЮКЗАЧНЫЙ МЕТОД ШИФРОВАНИЯ
- •9. КРИПТОСИСТЕМА НА ОСНОВЕ ЭЛЛИПТИЧЕСКИХ КРИВЫХ
- •10. СИММЕТРИЧНЫЕ КРИПТОСИСТЕМЫ
- •11. СТАНДАРТ ШИФРОВАНИЯ ДАННЫХ DES
- •12. СТАНДАРТ КРИПТОСИСТЕМЫ РОССИИ ГОСТ 28147-89
- •13. ДЕЙСТВИЯ НАД ПОЛИНОМАМИ В ПОЛЕ
- •14. УСОВЕРШЕНСТВОВАННЫЙ СТАНДАРТ ШИФРОВАНИЯ AES
- •15. УСТАНОВЛЕНИЕ ПОДЛИННОСТИ ОБЪЕКТА
- •16. КРИПТОГРАФИЧЕСКИЕ ХЕШ-ФУНКЦИИ
- •СПИСОК ЛИТЕРАТУРЫ
к которому применяем матрицу перестановок, обратную к IP :
12 |
8 |
16 |
4 |
ù |
|
é |
|
|
|
|
|
ê |
3 |
11 |
15 |
7 |
ú |
ê |
|
6 |
10 |
|
ú |
ê 2 |
14ú |
||||
ê |
9 |
1 |
13 |
5 |
ú |
ë |
û . |
||||
Получим исходный блок
é0 |
1 |
1 |
0ù |
|
|
|
|
|
|
|
ê0 |
1 |
0 |
0ú |
= (0110 |
|
0100 |
|
0101 |
|
1011), |
T = ê |
|
|
ú |
|
|
|
||||
ê0 |
1 |
0 |
1ú |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
ê |
0 |
1 |
ú |
|
|
|
|
|
|
|
ë1 |
1û |
|
|
|
|
|
|
|
что соответствует открытому тексту ЖДЁМ.
12. СТАНДАРТ КРИПТОСИСТЕМЫ РОССИИ ГОСТ 28147-89
Стандарт шифрования ГОСТ разработан на тех же принципах, что и алгоритм DES, но при этом были приняты во внимание недостатки и нереализованные возможности DES. В этом алгоритме заложен метод, позволяющий обнаружить случайное или умышленное изменение шифрованной информации. ГОСТ – это блочный шифр (размер блоков 64 бита) с симметричными ключами размерностью 256 бит. ГОСТ предусматривает три режима шифрования:
1)простая замена;
2)гаммирование;
3)гаммирование с обратной связью.
Режим простой замены. Рассмотрим первый и самый простой режим работы алгоритма – замену. В нем очередная
последовательность бит T ( j) разделяется на две последовательности B( j) (левые, или старшие биты) и A( j) (правые, или младшие биты).
66
Далее выполняется итеративный процесс шифрования (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
которая вырабатывается блоками по 64 бита. Уравнение шифрования данных имеет вид
TШ ( j) = T ( jГ) Å 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)
ипервый блок шифротекста
|
|
|
|
TТ(1) = Г(1)Å |
|
0110010001011011 |
|
Ш |
(1) = Å |
||
Ш |
1101100001011110 |
||
|
|
||
|
|
1011110000000101 |
|
Шифротекст: МНАЕ.
Процедура расшифрования: по тому же алгоритму находится гамма шифра ГШ (1) , тогда открытый текст
|
|
|
TТ(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
