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/lecture20.tex | 236 ++++++++++++++++++++++++++++++++++++
 1 file changed, 236 insertions(+)
 create mode 100644 cryptography/lectures/lecture20.tex

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

diff --git a/cryptography/lectures/lecture20.tex b/cryptography/lectures/lecture20.tex
new file mode 100644
index 0000000..9efc760
--- /dev/null
+++ b/cryptography/lectures/lecture20.tex
@@ -0,0 +1,236 @@
+% Лекция 20 (10.03.23)
+
+Шифр AES является чисто алгебраической криптосистемой. В шифре AES
+обрабатываются блоки длины 128 бит. Возможная длина ключа --- 128, 192 или 256
+бит. При 128-битном ключе осуществляется 10 раундов шифрования. Обрабатываемый
+128-битный блок разбивается на 16 блоков.
+
+Они образуют поле $GF(2^8)$, то есть интерпретируются как многочлены степени 8
+над полем вычетов $\Z_2 = GF(2)$.
+
+\begin{example}
+  $11001110 = x + x^2 + x^3 + x^6 + x^7$
+\end{example}
+
+Сложение $+$ --- это обычное сложение многочленов над $\Z_2$, иначе говоря,
+поразрядное сложение байтов по модулю 2.
+
+\begin{example}
+  $01010111 + 10000011 = 11010100$
+\end{example}
+
+Чтобы получить произведение $\cdot$ байтов, их перемножают как многочлены над
+$\Z_2$ и берут остаток от деления результата на неприводимый многочлен $m(x) =
+x^8 + x^4 + x^3 + x + 1$.
+
+% TODO: пример 1???
+\begin{example}
+  $01010111 \cdot 10000011 = \dots = 11000001$
+\end{example}
+
+Все блоки, проходящие через алгоритм, называются состояниями (States), входной
+блок --- это начальное состояние (Initial State). Состояние представляется в
+виде массива байтов размерности $4 \times 4$.
+
+Таблица --- Состояние.
+\begin{table}[H]
+  \centering
+  \begin{tabular}{|c|c|c|c|}
+    \hline
+    $S_{00}$ & $S_{01}$ & $S_{02}$ & $S_{03}$ \\ \hline
+    $S_{10}$ & $S_{11}$ & $S_{12}$ & $S_{13}$ \\ \hline
+    $S_{20}$ & $S_{21}$ & $S_{22}$ & $S_{23}$ \\ \hline
+    $S_{30}$ & $S_{31}$ & $S_{32}$ & $S_{33}$ \\ \hline
+  \end{tabular}
+\end{table}
+
+Ключ шифрования и раундовый 128-битные ключи (Key) также представляются в виде
+массивов байтов.
+
+Таблица --- Ключ.
+\begin{table}[H]
+  \centering
+  \begin{tabular}{|c|c|c|c|}
+    \hline
+    $K_{00}$ & $K_{01}$ & $K_{02}$ & $K_{03}$ \\ \hline
+    $K_{10}$ & $K_{11}$ & $K_{12}$ & $K_{13}$ \\ \hline
+    $K_{20}$ & $K_{21}$ & $K_{22}$ & $K_{23}$ \\ \hline
+    $K_{30}$ & $K_{31}$ & $K_{32}$ & $K_{33}$ \\ \hline
+  \end{tabular}
+\end{table}
+
+Раундовое преобразование состоит из четырёх операций:
+\begin{enumerate}
+  \item Замена байтов SubBytes;
+  \item Сдвиг строк ShiftRows;
+  \item Перемешивание столбцов MixColumns;
+  \item Прибавление раундового ключа AddRoundKey.
+\end{enumerate}
+
+\paragraph{Замена байтов SubBytes.}
+
+Над байтом-аргументом осуществляются следующие действия:
+\begin{enumerate}
+  \item
+    В поле $GF(2^8)$ для этого байта берётся обратный элемент (для нуля им
+    считается ноль);
+  \item
+    К полученному байту $b$, рассматриваемому как вектор-столбец над $\Z_2$,
+    применяется преобразование
+    \begin{equation*}
+      b\ = \fn{SubBytes}(b) = Ab + c
+    \end{equation*}
+    где
+    \begin{equation*}
+      A = \begin{vmatrix}
+        1 & 0 & 0 & 0 & 1 & 1 & 1 & 1 \\
+        1 & 1 & 0 & 0 & 0 & 1 & 1 & 1 \\
+        1 & 1 & 1 & 0 & 0 & 0 & 1 & 1 \\
+        1 & 1 & 1 & 1 & 0 & 0 & 0 & 1 \\
+        1 & 1 & 1 & 1 & 1 & 0 & 0 & 0 \\
+        0 & 1 & 1 & 1 & 1 & 1 & 0 & 0 \\
+        0 & 0 & 1 & 1 & 1 & 1 & 1 & 0 \\
+        0 & 0 & 0 & 1 & 1 & 1 & 1 & 1 \\
+      \end{vmatrix},\,
+      c = \begin{vmatrix}
+        1 \\
+        1 \\
+        0 \\
+        0 \\
+        0 \\
+        1 \\
+        1 \\
+        0 \\
+      \end{vmatrix}
+    \end{equation*}
+\end{enumerate}
+
+
+\paragraph{Сдвиг строк ShiftRows.}
+
+В аргументе-состоянии первая строка остаётся неизменной, вторая сдвигается
+циклически влево на 1 байт, третья --- на 2 байта, четвёртая --- на 3 байта.
+
+\begin{table}[H]
+  \centering
+  \caption{State}
+  \begin{tabular}{|c|c|c|c|}
+    \hline
+    $S_{00}$ & $S_{01}$ & $S_{02}$ & $S_{03}$ \\ \hline
+    $S_{10}$ & $S_{11}$ & $S_{12}$ & $S_{13}$ \\ \hline
+    $S_{20}$ & $S_{21}$ & $S_{22}$ & $S_{23}$ \\ \hline
+    $S_{30}$ & $S_{31}$ & $S_{32}$ & $S_{33}$ \\ \hline
+  \end{tabular}
+\end{table}
+
+\begin{table}[H]
+  \centering
+  \caption{ShiftRows(State)}
+  \begin{tabular}{|c|c|c|c|}
+    \hline
+    $S_{00}$ & $S_{01}$ & $S_{02}$ & $S_{03}$ \\ \hline
+    $S_{11}$ & $S_{12}$ & $S_{13}$ & $S_{10}$ \\ \hline
+    $S_{22}$ & $S_{23}$ & $S_{20}$ & $S_{21}$ \\ \hline
+    $S_{33}$ & $S_{30}$ & $S_{31}$ & $S_{32}$ \\ \hline
+  \end{tabular}
+\end{table}
+
+\paragraph{Перемешивание столбцов MixColumns.}
+
+Образ столбца-аргумента $s_i, 0 \leq i \leq 3$, из состояния вычисляется как
+произведение над $GF(2^8): s'_i = \fn{MixColumns}(s_i) = S s_i$, где
+\begin{equation*}
+  S = \begin{vmatrix}
+    \set{2} & \set{3} & \set{1} & \set{1} \\
+    \set{1} & \set{2} & \set{3} & \set{1} \\
+    \set{1} & \set{1} & \set{2} & \set{3} \\
+    \set{3} & \set{1} & \set{1} & \set{2} \\
+  \end{vmatrix}
+\end{equation*}
+где $\set{n}$ --- двоичная восьмибитовая запись числа $n$.
+
+Применение операции ко всем четырём столбцам состояния обозначается
+$\fn{MixColumns}(\fn{State})$.
+
+
+\paragraph{Прибавление раундового ключа AddRoundKey.}
+
+Поразрядно по модулю 2 к состоянию прибавляется раундовый ключ.
+
+Как осуществляется выработка раундовых ключей (KeySchedule)?
+
+Первым этапом является расширение ключа (KeyExpansion).
+
+Расширенный ключ в AES представляет собой линейный массив длиной 1408 битов,
+разбитый на 44 слова, состоящих из 4 байтов каждое.
+
+\begin{equation*}
+  \underbrace{w_0 w_1 w_2 w_3}_{K_0} \underbrace{w_4 w_5 w_6 w_7}_{K_1} w_8 \dots w_{39}
+  \underbrace{w_{40} w_{41} w_{42} w_{43}}_{K_{10}}
+\end{equation*}
+
+При этом первые 4 слова --- ключ шифрования $K = K_0$. Все остальные слова
+определяются рекурсивно из слов с меньшими индексами:
+\begin{enumerate}
+  \item Если $4 \nmid i$, то $w_i = w_{i - 1} \oplus w_{i - 4}$;
+  \item Пусть $4 \mid i$.
+\end{enumerate}
+
+В слове $w_{i - 1}$ осуществляется побайтовый сдвиг $w_{i - 1} = b_0 b_1 b_2 b_3
+\mapsto b_1 b_2 b_3 b_0 = \fn{RotWord}(w_{i - 1}) = w'_{i - 1}$.
+
+В итоге, $w_i = \fn{SubWord}(\fn{RotWord}(w_{i - 1})) \oplus \fn{Rcon} \left(
+\frac{i}{4} \right) \oplus w_{i - 4}$. Здесь $\fn{Rcon}(j)$ --- раундовая
+константа, равная $2^{j - 1}$.
+
+Выбор раундового ключа (Round Key Selection) для раунда с номером $i$
+производится выделением из расширенного ключа массива слов
+\begin{equation*}
+  w_{4i} w_{4i + 1} w_{4i + 2} w_{4i + 3}
+\end{equation*}
+
+Схема шифрования:
+% TODO: рисунок 1 (опечатка 2 раунд -> 9 раунд)
+
+Все четыре преобразования SubBytes, ShiftRows, MixColumns, AddRoundKey обратимы
+(у последнего обратное совпадает с ним самим).
+
+При дешифровании к выходному блоку криптограммы в обратной по отношению
+к шифрованию последовательности выполняются инверсии соответствующих
+преобразований. При этом меняется и порядок использования раундовых ключей
+$(K_{10}, K_9, \dots, K_1, K_1)$.
+
+
+\subsection{ГОСТ Р 34.12-2015}
+
+В конце 1989 года был открыт и зарегистрирован в качестве государственного
+стандарта шифрования ГОСТ 28147-89 <<Система обработки информации. Защита
+криптографическая. Алгоритм криптографического преобразования>>.
+
+Данный блочный шифр был разработан в 1978 году группой советских криптографов
+во главе с И. А. Заботиным в 8-м главном управлении КГБ СССР.
+
+Он был предназначен для шифрования сообщений, содержащих высшие грифы
+секретности (государственная тайна) и сам имел гриф <<совершенно секретно>>.
+
+В 1988 году гриф шифра был понижен до <<секретно>>, в 1989 году --- для
+служебного пользования.
+
+В 2015 году утверждён новый национальный стандарт РФ ГОСТ Р 34.12-2015
+<<Информационная технология. Криптографическая защита информации. Блочные
+шифры>>.
+
+Разработан Центром защиты информации и специальной связи ФСБ России с участием
+ОАО <<ИнфоТеКС>>. Утверждён и введён в действие Приказом Федерального агентства
+по техническому регулированию и метрологии от 19 июня 2015 г. №749-ст.
+
+Настоящий стандарт содержит описание алгоритмов блочного шифрования, которые
+применяются в криптографических методах защиты информации.
+
+Необходимость разработки стандарта вызвана потребностью в создании блочных
+шифров с различными длинами блока, соответствующих современным требованиям к
+криптографической стойкости и эксплуатационными качествам.
+
+В настоящем стандарте приведено описание двух базовых блочных шифров с длинами
+блоков $n = 128$ бит (<<Кузнечик>>) и $n = 64$ бит (<<Магма>>) и длинами ключей
+$k = 256$ бит.
-- 
cgit v1.2.3

