diff options
| author | Andrew Guschin <guschin.drew@gmail.com> | 2023-03-27 23:17:04 +0400 |
|---|---|---|
| committer | Andrew Guschin <guschin.drew@gmail.com> | 2023-03-27 23:17:04 +0400 |
| commit | 5d8de74a3609fe5d453352923bc7daab6a8aaed4 (patch) | |
| tree | e1ea840fc8fbdef22a726b050933a16d7311c0bb /cryptography/lectures/lecture18.tex | |
| parent | 7a61d8748bd4a8024f8efb59f494d58d1e4d2aff (diff) | |
Добавлены лекции по криптографии второго семестра до контрольной
Diffstat (limited to 'cryptography/lectures/lecture18.tex')
| -rw-r--r-- | cryptography/lectures/lecture18.tex | 260 |
1 files changed, 260 insertions, 0 deletions
diff --git a/cryptography/lectures/lecture18.tex b/cryptography/lectures/lecture18.tex new file mode 100644 index 0000000..610a91d --- /dev/null +++ b/cryptography/lectures/lecture18.tex @@ -0,0 +1,260 @@ +% Лекция 18 (17.02.23) + +\subsection{DES} + +В 1973--1974 гг. Национальное бюро стандартов США объявило открытый конкурс на +создание общедоступного алгоритма шифрования с гарантированной надёжностью. + +Оценку представленных кандидатов осуществляло Агентство Национальной +Безопасности США. + +В январе 1977 года предложенный фирмой IBM и оказавшийся победителем конкурса +<<Алгоритм шифрования для защиты данных ЭВМ>> был зарегистрирован в качестве +государственного стандарта США: Data Encryption Standard (Стандарт шифрования +данных, DES). + +Сразу же после создания DES были созданы чипы для быстрого аппаратного +шифрования. Вся структура DES была полностью опубликована при его введении в +качестве стандарта. Создание шифра DES была полностью опубликована при его +введении в качестве стандарта. + +Создание шифра DES (главным идеологом проекта был Х. Фейстель (1915--1990)) +явилось выдающимся научно-техническим достижением, оказавшим глубокое влияние +на дальнейшее развитие криптографии и на её использование в интересах широких +деловых кругов. + +Достоинства: простота ключевой системы, высокая скорость аппаратной и +программной реализации, достаточно высокая криптографическая стойкость алгоритма +шифрования при заданной длине ключа. + +Алгоритм DES является блочным шифром. Открытый текст, представленный в двоичном +виде, разбивается на блоки длины 64 бита, которые переводятся в такой же длины +блоки криптограммы с помощью чередования перестановочных и подстановочных +шифров. + +Обозначения: +\begin{itemize} + \item $L_i$, $R_i$ --- левая и правая половины 64-битного блока $L_i R_i$; + \item $\oplus$ --- операция побитового сложения вектор-блоков по модулю 2; + \item $k_i$ --- 48-битовые ключи; + \item $f$ --- функции шифрования; + \item $IP$ --- начальная перестановка степени 64. +\end{itemize} + +\begin{remark} + Все приводимые таблицы являются стандартными и должны использоваться при + реализации алгоритма DES в неизменном виде. Все перестановки и коды в таблицах + подобраны разработчиками таким образом, чтобы максимально затруднить процесс + вскрытия шифра путём подбора ключа. +\end{remark} + +\begin{enumerate} + \item + При зашифровании очередного блока $T$ его биты подвергаются начальной + перестановке $IP$ согласно таблице \ref{tbl:ip-permutation}. + + \begin{table}[h] + \centering + \caption{Начальная перестановка $IP$} + \begin{tabular}{|c|c|c|c|c|c|c|c|} + \hline + 58 & 50 & 42 & 34 & 26 & 18 & 10 & 2 \\ \hline + 60 & 52 & 44 & 36 & 28 & 20 & 12 & 4 \\ \hline + 62 & 54 & 46 & 38 & 30 & 22 & 14 & 6 \\ \hline + 64 & 56 & 48 & 40 & 32 & 24 & 16 & 8 \\ \hline + 57 & 49 & 41 & 33 & 25 & 17 & 9 & 1 \\ \hline + 59 & 51 & 43 & 35 & 27 & 19 & 11 & 3 \\ \hline + 61 & 53 & 45 & 37 & 29 & 21 & 13 & 5 \\ \hline + 63 & 55 & 47 & 39 & 31 & 23 & 15 & 7 \\ \hline + \end{tabular} + \label{tbl:ip-permutation} + \end{table} + + Полученный после перестановки блок $IP(T)$ разделяется на две половины: + $L_0$, состоящую из 32 старших бит, и $R_0$, состоящую из 32 младших бит. + После этого следуют 16 раундов шифрования с использованием секретного ключа + $k$. + + Пусть $T_{i - 1} = L_{i - 1} R_{i - 1}$ --- результат $(i - 1)$-й итерации. + Тогда результат $i$-й итерации $T_i = L_i R_i$ определяется формулами: + \begin{align*} + L_i &= R_{i - 1} \\ + R_i &= L_{i - 1} \oplus f(R_{i - 1}, k_i), i = \overline{1, 16} + \end{align*} + + Функция $f$ называется \emph{функцией шифрования}. Её аргументами являются + 32-битовый вектор $R_{i - 1}$ и 48-битовый ключ $k_i$, который является + результатом преобразования 56-битового ключа шифра $k$. + + % TODO: рисунок 1, в конце поменять местами R_16 и L_16 + + Результатом последней итерации является блок $T_{16} = L_{16} R_{16}$. По + окончании шифрования осуществляется восстановление позиций битов применением + к $T_{16}$ обратной перестановки $IP^{-1}$. + + При расшифровании все действия выполняются в обратном порядке, при этом + следует использовать соотношения + \begin{equation*} + R_{i - i} &= L_i, \\ + L_{i - 1} &= R_i + f(L_i, k_i),\, i = \overline{16, 1}, + \end{equation*} + пользуясь которыми можно <<спуститься>> от $L_{16}$ и $R_{16}$ к $L_0$ и + $R_0$. + + На каждой итерации используется текущее значение ключа $k_i$ (48 бит), + получаемое из исходного ключа $k$ следующим образом. + + Сначала пользователи выбирают сам ключ $k$, содержащий 56 случайных значащих + битов. + + \item + Восемь битов, находящихся в позициях 8, 16, \dots, 64 добавляются в ключ + таким образом, чтобы каждый байт содержал начётное число единиц. Это + используется для обнаружения ошибок при обмене и хранении ключей. + + \item + Значащие 56 бит ключа подвергаются перестановке, приведённой в таблице + \ref{tbl:des-permutation} + \begin{table}[H] + \centering + \caption{} + \begin{tabular}{|c|c|c|c|c|c|c|} + \hline + 57 & 49 & 41 & 33 & 25 & 17 & 9 \\ \hline + 1 & 58 & 50 & 42 & 34 & 26 & 18 \\ \hline + 10 & 2 & 59 & 51 & 43 & 35 & 27 \\ \hline + 19 & 11 & 3 & 60 & 52 & 44 & 36 \\ \hline + 63 & 55 & 47 & 39 & 31 & 23 & 15 \\ \hline + 7 & 62 & 54 & 46 & 38 & 30 & 22 \\ \hline + 14 & 6 & 61 & 53 & 45 & 37 & 29 \\ \hline + 21 & 13 & 5 & 28 & 20 & 12 & 4 \\ \hline + \end{tabular} + \label{tbl:des-permutation} + \end{table} + + Эта перестановка определяется двумя блоками $C_0$ и $D_0$ по 28 бит в каждом + (они занимают соответственно верхнюю и нижнюю половину таблицы). + + Затем индуктивно определяются блоки $C_i$ и $D_i$, $i = \overline{1, + 16}$. Если уже определены $C_{i - 1}$ и $D_{i - 1}$, то $C_i$ и $D_i$ + получаются из них циклическим сдвигом влево на одну или две позиции в + зависимости от номера раунда. При $i = 1, 2, 9, 16$ сдвиг на одну позицию, + при остальных значениях --- на две. После сдвигов по заданному способу + строится 48"=битовый раундовый ключ. + + \item + Теперь определим ключи $k_i$, $1 \leq i \leq 16$. Ключ $k_i$ состоит из 48 + битов, выбираемых из битов блока $C_i D_i$ согласно таблице + \ref{tbl:des-key-blocks} + \begin{table}[H] + \centering + \caption{} + \begin{tabular}{|c|c|c|c|c|c|c|} + \hline + 14 & 17 & 11 & 24 & 1 & 5 \\ \hline + 3 & 28 & 15 & 6 & 21 & 10 \\ \hline + 23 & 19 & 12 & 4 & 26 & 8 \\ \hline + 16 & 7 & 27 & 20 & 13 & 2 \\ \hline + 41 & 52 & 31 & 37 & 47 & 55 \\ \hline + 30 & 40 & 51 & 45 & 33 & 48 \\ \hline + 44 & 49 & 39 & 56 & 34 & 53 \\ \hline + 46 & 42 & 50 & 36 & 29 & 32 \\ \hline + \end{tabular} + \label{tbl:des-key-blocks} + \end{table} + + Первыми тремя битами в $k_i$ являются биты 14, 17, 11 из блока $C_i D_i$. + Заметим, что 8 из 56 бит (с номерами 9, 18, 22, 25, 35, 38, 43, 54) из + $C_i D_i$ отсутствуют в $k_i$. + + \item + Центральной частью шифра является предложенная Х. Фейстелем функция $f(R_{i + - 1}, k_i)$. + + % TODO: рисунок 2 + + Для вычисления значения функции $f$ используются: функция расширения $E$; + преобразование $S$, составленное из восьми преобразования S-блоков $S1, S2, + \dots, S8$; перестановка $P$. + + Аргументами функции $f$ являются вектор $R_{i - 1}$ (32 бита) и вектор + $k_i$ (48 бит). Функция $E$ <<расширяет>> 32-битовый вектор $R_{i - 1}$ до + 48-битового вектора $R_{i - 1}$, при этом порядок следования битов в $E(R_{i + - 1})$ указан в таблице \ref{tbl:des-feistel} + + \begin{table}[H] + \centering + \caption{} + \begin{tabular}{|c|c|c|c|c|c|c|} + \hline + 32 & 1 & 2 & 3 & 4 & 5 \\ \hline + 4 & 5 & 6 & 7 & 8 & 9 \\ \hline + 8 & 9 & 10 & 11 & 12 & 13 \\ \hline + 12 & 13 & 14 & 15 & 16 & 17 \\ \hline + 16 & 17 & 18 & 19 & 20 & 21 \\ \hline + 20 & 21 & 22 & 23 & 24 & 25 \\ \hline + 24 & 25 & 26 & 27 & 28 & 29 \\ \hline + 28 & 29 & 30 & 31 & 32 & 1 \\ \hline + \end{tabular} + \label{tbl:des-feistel} + \end{table} + + Полученный результат складывается побитно по модулю 2 с текущим значением + ключа $k_i$ и затем разбивается на 8 последовательных 6-битовых групп, + каждая из которых подаётся на вход соответствующего подстановочного + шифратора, так называемого S-бокса (substitution boxes --- таблицы замены, + $S1, S2, \dots, S8$). + + S-бокс представляет собой таблицу размерности $4 \times 16$ с нумерацией + строк $0, 1, 2, 3$ и столбцов от 0 до 15. + + В каждой строке стоит своя перестановка столбцовых номеров. + \begin{table}[H] + \centering + \caption{} + \begin{tabular}{|c|cccccccccccccccc|} + \hline + S7 & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 \\ \hline + 0 & 4 & 11 & 2 & 14 & 15 & 0 & 8 & 13 & 3 & 12 & 9 & 7 & 5 & 10 & 6 & 1 \\ + 1 & 13 & 0 & 11 & 7 & 4 & 9 & 1 & 10 & 14 & 3 & 5 & 12 & 2 & 15 & 8 & 6 \\ + 2 & 1 & 4 & 11 & 13 & 12 & 3 & 7 & 14 & 10 & 15 & 6 & 8 & 0 & 5 & 9 & 2 \\ + 3 & 6 & 11 & 13 & 8 & 1 & 4 & 10 & 7 & 9 & 5 & 0 & 15 & 14 & 2 & 3 & 12 \\ \hline + \end{tabular} + \label{tbl:des-feistel-sbox} + \end{table} + На вход S-бокса подаётся 6-разрядный двоичный блок $a_0 a_1 a_2 a_3 a_4 a_5$. + + Первый и последний его символы $a_0 a_5$ определяют строку S-бокса, средние + $a_1 a_2 a_3 a_4$ --- его столбец. Стоящее на пересечении строки и столбца + число даёт в двоичной записи 4-разрядный выходной блок. Переработка + 6-буквенных двоичных блоков в 4-буквенные и является функцией S-бокса. + + \begin{example} + Пусть на вход S-бокса 7 подаётся двоичное слово 001011. Оно выделяет + в таблице строку с номером 1 (01) и столбец с номером 5 (0101). На их + пересечении стоит число 9. Его двоичная запись 1001 и появляется на + выходе. + \end{example} + + Полученные восемь 4-битовых выходных вектора соединяются в один 32-битный. + + \item + Значение $f(R_{i - 1}, k_i)$ получается применением перестановки битов $P$, + заданной таблицей к результирующему 32-битовому блоку. + \begin{table}[H] + \centering + \caption{} + \begin{tabular}{|c|c|c|c|} + \hline + 16 & 7 & 20 & 21 \\ \hline + 29 & 12 & 28 & 17 \\ \hline + 1 & 15 & 23 & 26 \\ \hline + 5 & 18 & 31 & 10 \\ \hline + 2 & 8 & 24 & 14 \\ \hline + 32 & 27 & 3 & 9 \\ \hline + 19 & 13 & 30 & 6 \\ \hline + 22 & 11 & 4 & 25 \\ \hline + \end{tabular} + \label{tbl:des-feistel-sbox} + \end{table} +\end{enumerate} |