summaryrefslogtreecommitdiff
path: root/cryptography/lectures/lecture18.tex
diff options
context:
space:
mode:
Diffstat (limited to 'cryptography/lectures/lecture18.tex')
-rw-r--r--cryptography/lectures/lecture18.tex260
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}