summaryrefslogtreecommitdiff
path: root/cryptography/lectures/lecture20.tex
diff options
context:
space:
mode:
Diffstat (limited to 'cryptography/lectures/lecture20.tex')
-rw-r--r--cryptography/lectures/lecture20.tex236
1 files changed, 236 insertions, 0 deletions
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$ бит.