Лабораторная работа №3. Изучение принципов создания блочных шифров на примере алгоритма DES
Целью лабораторной работы является изучение принципов построения блочных шифров, основанных на сети Фейстеля, на примере алгоритма DES.
Требования к содержанию, оформлению и порядку выполнения
Отчет по выполнению лабораторной работы должен содержать: титульный лист, название работы, цель работы и содержательную часть.
В содержательной части отчета по выполнению лабораторной работы требуется привести:
· общее описание алгоритма DES;
· результаты шифрования сообщения на заданном ключе (сообщение и ключ определяются индивидуальным заданием);
· выводы по лабораторной работе.
Теоретическая часть
Самым распространенным и наиболее известным алгоритмом симметричного шифрования является DES(Data Encryption Standard). Алгоритм был разработан в 1977 году, в 1980 году был принят NIST (National Institute of Standards and Technolody США) в качестве стандарта (FIPS PUB 46).
В основу алгоритма DES положена классическая сеть Фейстеля с двумя ветвями (см. раздел 3.1). Он осуществляет шифрование 64-битовых блоков данных с помощью 64-битового ключа, в котором значащими являются 56 бит (остальные 8 бит – проверочные биты для контроля на четность). Обобщенная схема процесса шифрования в алгоритме DES показана на рис. Л3.1. Этот процесс заключается в начальной перестановке битов 64-битового блока, шестнадцати раундах шифрования и, наконец, в конечной перестановке битов.
При описании алгоритма DES применены следующие обозначения:
· L и R – последовательности битов (левая (left) и правая (right));
· LR – конкатенация последовательностей L и R, т.е. такая последовательность битов, длина которой равна сумме длин L и R; в последовательности LR биты последовательности R следуют за битами последовательности L;
· Å – операция побитового сложения по модулю 2.
Пусть из файла исходного текста считан очередной 64-битовый (8-байтовый) блок Т. Этот блок Т преобразуется с помощью матрицы начальной перестановки IP (табл. Л3.1).
Рис. Л3.1. Структура алгоритма DES. |
Таблица Л3.1
Матрица начальной перестановки IP
58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7
Биты входного блока Т (64 бита) переставляются в соответствии с матрицей IP: бит 58 входного блока Т становится битом 1, бит 50 – битом 2 и т.д. Эту перестановку можно описать выражением Т0 = IP(Т). Полученная последовательность битов Т0 разделяется на две последовательности: L0 – левые или старшие биты, R0 – правые или младшие биты, каждая из которых содержит 32 бита.
Затем выполняется итеративный процесс шифрования, состоящий из 16 раундов. Пусть Тi , – результат i-й итерации:
Тi = Li Ri
где Li=t1, t2,…,t32 (первые 32 бита), Ri=t33, t34,…,t64 (последние 32 бита). Тогда результат i-й итерации описывается следующими формулами:
Li = Ri–1, i = 1, 2,…,16;
Ri== Li–1 Å f(Ri–1, Ki), i = 1, 2,…,16.
Функция f называется функцией шифрования. Ее аргументами являются последовательность Ri–1, получаемая на предыдущем шаге итерации, и 48-битовый раундовый подключ Ki который является результатом преобразования 64-битового ключа шифра К.
На последнем шаге итерации получают последовательности R16 и L16 , которые конкатенируются в 64-битовую последовательность R16 L16.
По окончании шифрования осуществляется восстановление позиций битов с помощью матрицы обратной перестановки IP –1 (табл. Л3.2).
Таблица Л3.2
Матрица обратной перестановки IP –1
40 8 48 16 56 24 64 32
39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30
37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28
35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26
33 1 41 9 49 17 57 25
Процесс расшифрования аналогичен процессу шифрования. На входе алгоритма используется зашифрованный текст, который подвергается начальной перестановке IP, затем следуют 16 раундов преобразования, но ключи Ki используются в обратной последовательности: K16 используется на первом раунде, K1 используется на последнем раунде. После последнего раунда процесса расшифрования две половины выхода меняются местами и подвергаются обратной перестановке IP –1. Выходом этой стадии является незашифрованный текст.
Схема вычисления функции шифрования f(Ri–1, Ki) показана на рис. Л3.2.
Рис. Л3.2. Схема вычисления функции шифрования f. |
Для вычисления значения функции f используются:
· функция E (расширение 32 бит до 48);
· функция S1 , S2 ,..., S8 (преобразование 6-битового числа в 4-битовое);
· функция P (перестановка битов в 32-битовой последовательности).
Аргументами функции шифрования f являются Ri–1 (32 бита) и Ki (48 бит). Результат функции E(Ri–1) есть 48-битовое число. Функция расширения E, выполняющая расширение 32 бит до 48 (принимает блок из 32 бит и порождает блок из 48 бит), определяется табл. Л3.3.
В соответствии с этой таблицей первые три бита E(Ri–1) – это биты 32, 1 и 2, а последние – 31, 32, 1. Полученный результат складывается по модулю 2 (операция XOR) с текущим значением ключа Ki и затем разбивается на восемь 6-битовых блоков B1 , B2 ,…, B8:
E(Ri–1) Å Ki.= B1 , B2 ,…, B8 .
Таблица Л3.3
Функция расширения E
32 1 2 3 4 5
4 5 6 7 8 9
8 9 10 11 12 13
12 13 14 15 16 17
16 17 18 19 20 21
20 21 22 23 24 25
24 25 26 27 28 29
28 29 30 31 32 1
Далее каждый из этих блоков используется как номер элемента в функциях-матрицах (S–блоках): S1 , S2 ,..., S8 , содержащих 4-битовые значения (табл. Л3.4).
Следует отметить, что выбор элемента в матрице Sj , осуществляется достаточно оригинальным образом. Пусть на вход матрицы Sj; поступает 6-битовый блок Bj =b1 b2 b3 b4 b5 b6 , тогда 2-битовое число b1 b6 указывает номер строки матрицы, а 4-битовое число b2 b3 b4 b5 – номер столбца.
Например, если на вход матрицы S1 поступает 6-битовый блок
B1 =b1 b2 b3 b4 b5 b6 = 100110,
то 2-битовое число b1 b6= 10(2)=2(10) указывает строку с номером 2 матрицы S1, а 4-битовое число b2 b3 b4 b5=0011(2)=3(10) – указывает столбец с номером 3 матрицы S1. Это означает, что в матрице S1 блок B1 = 100110 выбирает элемент на пересечении строки с номером 2 и столбца с номером 3, т.е. элемент 8(10) = 1000(2) . Совокупность 6-битовых блоков B1 , B2 ,…, B8 обеспечивает выбор 4-битового элемента в каждой из матриц S1 , S2 ,..., S8.
В результате получаем S1(B1), S2(B2),...,S8(B8), т.е. 32-битовый блок. Этот 32-битовый блок преобразуется с помощью функции перестановки битов P (табл. Л3.5).
Таким образом, функция шифрования есть
f(Ri–1,Ki) = P(S1(B1), S2(B2),…,S8(B8)).
На каждой итерации используется новое значение ключа Ki (длиной 48 бит). Новое значение ключа Ki вычисляется из начального ключа K (рис. Л3.3). Ключ K представляет собой 64-битовый блок с 8 битами контроля по четности, расположенными в позициях 8, 16, 24, 32, 40, 48, 56, 64. Для удаления контрольных битов и подготовки ключа к работе используется функция G первоначальной подготовки ключа (табл. Л3.6).
Таблица Л3.6 разделена на две части. Результат преобразования G(K) разбивается на две половины C0 и D0 по 28 бит каждая. Первые четыре строки матрицы G определяют, как выбираются биты последовательности C0 (первым битом C0 будет бит 57 ключа шифра, затем бит 49 и т.д., а последними битами – биты 44 и 36 ключа). Следующие четыре строки матрицы G определяют, как выбираются биты последовательности D0 (т.е. последовательность D0 будет состоять из битов 63, 55, 47, ...,12, 4 ключа шифра).
Таблица Л3.4
Функции преобразования S1 , S2 ,..., S8
Номер столбца | ||||||||||||||||||
S1 | ||||||||||||||||||
S2 | ||||||||||||||||||
Н | ||||||||||||||||||
о | S3 | |||||||||||||||||
м | ||||||||||||||||||
е | ||||||||||||||||||
р | ||||||||||||||||||
S4 | ||||||||||||||||||
с | S5 | |||||||||||||||||
т | ||||||||||||||||||
р | ||||||||||||||||||
о | ||||||||||||||||||
к | S6 | |||||||||||||||||
и | ||||||||||||||||||
S7 | ||||||||||||||||||
S8 | ||||||||||||||||||
Таблица Л3.5
Функция перестановки битов P
16 7 20 21
29 12 28 17
1 15 23 26
5 18 31 10
2 8 24 14
32 27 3 9
19 13 30 6
22 11 4 25
Рис. Л3.3. Схема алгоритма вычисления ключей. |
Таблица Л3.6
Функция G первоначальной подготовки ключа
(переставленная выборка 1)
57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36
63 55 47 39 31 23 15
7 62 54 46 38 30 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4
Как видно из табл. Л3.6, для генерации последовательностей C0 и D0 не используются биты 8, 16, 24, 32, 40, 48, 56 и 64 ключа шифра. Эти биты не влияют на шифрование и могут служить для других целей (например, для контроля по четности). Таким образом, в действительности ключ шифра является 56-битовым.
После определения C0 и D0 рекурсивно определяются Ci и Di,
i=1, 2,…,16. Для этого применяются операции циклического сдвига влево на один или два бита в зависимости от номера шага итерации, как показано в табл. Л3.7.
Таблица Л3.7
Таблица сдвигов для вычисления ключа
Номер итерации | Количество сдвигов влево | Номер итерации | Количество сдвигов влево |
Операции сдвига выполняются для последовательностей Ci и Di независимо. Например, последовательность C3 получается посредством циклического сдвига влево на две позиции последовательности C2 , а последовательность D3 – посредством сдвига влево на две позиции последовательности D2 , C16 и D16 получаются из C15 и D15 посредством сдвига влево на одну позицию.
Ключ Ki , определяемый на каждом шаге итерации, есть результат выбора конкретных битов из 56-битовой последовательности Ci Di и их перестановки. Другими словами, ключ Ki = H(Ci Di ), где функция Н определяется матрицей, завершающей обработку ключа (табл. Л3.8).
Таблица Л3.8
Функция Н завершающей обработки ключа
(переставленная выборка 2)
14 17 11 24 1 5
3 28 15 6 21 10
23 19 12 4 26 8
16 7 27 20 13 2
41 52 31 37 47 55
30 40 51 45 33 48
44 49 39 56 34 53
46 42 50 36 29 32
Как следует из табл. Л3.8, первым битом ключа Ki будет 14-й бит последовательности Ci Di , вторым – 17-й бит, 47-м битом ключа Ki , будет 29-й бит Ci Di , а 48-м битом – 32-й бит Ci Di.
Общая постановка задачи
В лабораторной работе требуется:
1. Изучить раздел 3.1 и теоретическую часть к данной лабораторной работе.
2. В соответствии с выбранным вариантом, зашифровать и расшифровать заданное сообщение на заданном ключе, используя алгоритм шифрования DES. Варианты заданий представлены в таблице в следующем разделе.
Для выполнения этого задания следует воспользоваться программой DES Tutorial, разработанной Кабановым Е.В. и Прокоповым М.В. (см. рис. Л3.4), которую Вы можете взять в приложении №2 данного УМК.
Рис. Л3.4. Окно "О программе" DES Tutorial. |
Данная программа представляет собой систему интерактивного обучения алгоритму DES. Кроме описания самого алгоритма шифрования она позволит вам самому поучаствовать в процессе шифрования и получить результат. После окончания шифрования вы получите результаты вашего тестирования. Также программа позволяет шифровать и дешифровать небольшие участки текста с заданным вами ключом. Программа содержит полную документацию по алгоритму DES с подробным объяснением всех шагов шифрования и дешифрования на русском языке.
DES Tutorial позволяет пользователю работать в 2 режимах:
1) Режим тестирования – программа вместе с пользователем проводит процесс шифрования данных. В этом режиме программа поэтапно выполняет шифрование данных и просит пользователя закончить за нее работу на том или ином этапе.
2) Режим шифрования/расшифрования – программа зашифровывает и расшифровывает текстовые строки, используя введенный ключ. В этом режиме программа сама выполняет шифрование и дешифрование данных.
Режим тестирования предусматривает следующие задания:
· Тест 1 "Начальная перестановка";
· Тест 2 "Получение последовательностей R0 и L0";
· Тест 3 "Функция выборки и перестановки ключевой последовательности G";
· Тест 4 "Получение последовательностей C0 и D0";
· Тест 5 "Получение последовательности Ci";
· Тест 6 "Получение последовательности Di";
· Тест 7 "Получение последовательности Ki (ключа раунда i)";
· Тест 8 "Функция E";
· Тест 9 "Функции Si";
· Тест 10 "Функция шифрования f";
· Тест 11 "Конечная перестановка".
Для своих индивидуальных данных необходимо без ошибок пройти все предусмотренные программой тесты и их результаты привести в отчет.