From 5d8de74a3609fe5d453352923bc7daab6a8aaed4 Mon Sep 17 00:00:00 2001
From: Andrew Guschin <guschin.drew@gmail.com>
Date: Mon, 27 Mar 2023 23:17:04 +0400
Subject: =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B?=
 =?UTF-8?q?=20=D0=BB=D0=B5=D0=BA=D1=86=D0=B8=D0=B8=20=D0=BF=D0=BE=20=D0=BA?=
 =?UTF-8?q?=D1=80=D0=B8=D0=BF=D1=82=D0=BE=D0=B3=D1=80=D0=B0=D1=84=D0=B8?=
 =?UTF-8?q?=D0=B8=20=D0=B2=D1=82=D0=BE=D1=80=D0=BE=D0=B3=D0=BE=20=D1=81?=
 =?UTF-8?q?=D0=B5=D0=BC=D0=B5=D1=81=D1=82=D1=80=D0=B0=20=D0=B4=D0=BE=20?=
 =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D1=8C=D0=BD=D0=BE?=
 =?UTF-8?q?=D0=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 cryptography/lectures/lecture18.tex | 260 ++++++++++++++++++++++++++++++++++++
 1 file changed, 260 insertions(+)
 create mode 100644 cryptography/lectures/lecture18.tex

(limited to 'cryptography/lectures/lecture18.tex')

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}
-- 
cgit v1.2.3

