From 95eca38f113413c68759cfa4afed8455b27df116 Mon Sep 17 00:00:00 2001
From: Andrew Guschin <guschin.drew@gmail.com>
Date: Sun, 2 Apr 2023 19:06:38 +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=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8?=
 =?UTF-8?q?=D1=8F=20=D0=B2=20=D0=BB=D0=B5=D0=BA=D1=86=D0=B8=D0=B8=20=D0=B4?=
 =?UTF-8?q?=D0=BE=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D1=8C=D0=BD?=
 =?UTF-8?q?=D0=BE=D0=B9=20=D0=B8=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?=
 =?UTF-8?q?=D0=B5=D0=BD=D0=B0=2023=20=D0=BB=D0=B5=D0=BA=D1=86=D0=B8=D1=8F.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

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

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

diff --git a/cryptography/lectures/lecture23.tex b/cryptography/lectures/lecture23.tex
new file mode 100644
index 0000000..ed979e9
--- /dev/null
+++ b/cryptography/lectures/lecture23.tex
@@ -0,0 +1,153 @@
+\begin{itemize}
+  \item
+    \textbf{Зашифрование}
+
+    Открытый текст $P \in V^*$ представляется в виде
+    $P = P_1 \| P_2 \| \dots \| P_q, P_i \in V_s$, $i = 1, 2, \dots, q - 1$,
+    $P_q \in V_r$, $r \leq s$.
+
+    Блоки шифротекста вычисляются по следующему правилу:
+    \begin{align*}
+      &R_1 = IV, \\
+      &\begin{cases}
+        C_i = P_i \oplus MSB_s(e_K(MSB_n(R_i))) \\
+        R_{i + 1} = LSB_{m - s}(R_i) \| C_i \\
+        i = 1, 2, \dots, q - 1 \\
+      \end{cases} \\
+      &C_q = P_q \oplus MSB_r(e_K(MSB_n(R_q)))
+    \end{align*}
+    
+    Результирующий шифртекста: $C = C_1 \| C_2 \| \dots \| C_q$.
+
+    % TODO: рис 1
+
+  \item
+    \textbf{Расшифрование}
+
+    Шифртекст представляется в виде: $C = C_1 \| C_2 \| \dots \| C_q$, $C_i \in
+    V_s$, $i = 1, 2, \dots, q - 1$, $C_q \in V_r$, $r \leq s$.
+
+    Блоки открытого текста вычисляются по следующему правилу:
+    \begin{align*}
+      &R_1 = IV, \\
+      &\begin{cases}
+        P_i = C_i \oplus MSB_s(e_K(MSB_n(R_i))) \\
+        R_{i + 1} = LSB_{m - s}(R_i) \| C_i \\
+        i = 1, 2, \dots, q - 1 \\
+      \end{cases} \\
+      &P_q = C_q \oplus MSB_r(e_K(MSB_n(R_q)))
+    \end{align*}
+
+    Исходный (дополненный) открытый текст: $P = P_1 \| P_2 \| \dots \| P_q$.
+
+    Если к исходному открытому тексту была применена процедура дополнения, то
+    после расшифрования следует произвести обратную процедуру.
+
+    Для однозначного восстановления сообщения может потребоваться знание длины
+    исходного сообщения.
+
+    % TODO: рис 2
+\end{itemize}
+
+
+\paragraph{Режим выработки имитовставки.}
+
+Данный режим выработки имитовставки реализует конструкцию OMAC1
+(стандартизирован в ISO под названием CMAC). Параметр: длина имитовставки
+(в битах) $0 < s \leq n$.
+
+\begin{itemize}
+  \item
+    \textbf{Выработка вспомогательных ключей.}
+
+    При вычислении значения имитовставки используются вспомогательные ключи,
+    которые вычисляются с использованием ключа $K$.
+
+    Длины вспомогательных ключей равны длине блока $n$ базового алгоритма
+    блочного шифрования.
+
+    Процедура выработки вспомогательных ключей может быть представлена в
+    следующей форме
+    \begin{align*}
+      R &= e_K(0^n); \\
+      K_1 &= \begin{cases}
+        R \ll 1, &\text{если } MSB_1(R) = 0, \\
+        (R \ll 1) \oplus B_n, &\text{иначе}
+      \end{cases} \\
+      K_2 &= \begin{cases}
+        K_1 \ll 1, &\text{если } MSB_1(K_1) = 0, \\
+        (K_1 \ll 1) \oplus B_n, &\text{иначе}
+      \end{cases}
+    \end{align*}
+    где $B_{64} = 0^{59} \| 11011$, $B_{128} = 0^{120} \| 10000111$.
+
+    Если значение $n$ отлично от 64 и 12, следует использовать следующую
+    процедуру определения значения константы $B_n$.
+
+    Рассмотрим множество примитивных полиномов степени $n$ над полем $GF(2)$ с
+    наименьшим количеством ненулевых коэффициентов.
+
+    Упорядочим это множество лексикографически по возрастанию векторов
+    коэффициентов и обозначим через $f_n(x)$ первый полином в этом упорядоченном
+    множестве.
+
+    Рассмотрим поле $GF(2^n)[x]/(f_n(x))$, зафиксируем в нём степенной базис и
+    будем обозначать операцию умножения в этом поле символом $\otimes$.
+
+    Вспомогательные ключи $K_1$ и $K_2$ вычисляются следующим образом:
+    \begin{equation*}
+      \begin{cases}
+        R = e_K(0^n), \\
+        K_1 = Poly_n^{-1}(Poly_n(R) \otimes x), \\
+        K_2 = Poly_n^{-1}(Poly_n(R) \otimes x^2).
+      \end{cases}
+    \end{equation*}
+
+    Вспомогательные ключи $K_1, K_2$ и промежуточное значение $R$ наряду с
+    ключом $K$ являются секретными параметрами.
+
+    Компрометация какого-либо из этих значений приводит к возможности построения
+    эффективных методов анализа всего алгоритма.
+
+  \item
+    \textbf{Вычисление значения имитовставки.}
+
+    Процедура вычисления значения имитовставки похожа на процедуру зашифрования
+    в режиме простой замены с зацеплением при $m = n$ и инициализации начального
+    заполнения регистра сдвига значением $0^n$: на вход алгоритму шифрования
+    подаётся результат покомпонентного сложения очередного блока текста и
+    результата зашифрования на предыдущем шаге.
+
+    Основное отличие заключается в процедуре обработки последнего блока:
+    на вход базовому алгоритму блочного шифрования подаётся результат
+    покомпонентного сложения последнего блока, результата зашифрования на
+    предыдущем шаге и одного из вспомогательных ключей.
+
+    Конкретный вспомогательный ключ выбирается в зависимости от того, является
+    ли последний блок исходного сообщения полным или нет.
+
+    Значением имитовставки MAC является результат применения процедуры усечения
+    к выходу алгоритма шифрования при обработке последнего блока.
+
+    Исходное сообщение $P \in V^*$, для которого требуется вычислить
+    имитовставку, представляется в виде: $P = P_1 \| P_2 \| \dots \| P_q$, где
+    $P_i \in V_n,\, i = 1, 2, \dots, q - 1$, $P_q \in V_r,\, r \leq n$.
+
+    Процедура вычисления имитовставки описывается следующим образом:
+    \begin{align*}
+      C_0 &= 0^n, \\
+      C_i &= e_K(P_i \oplus C_{i - 1}),\, i = 1, 2, \dots, q - 1, \\
+      MAC &= MSB_s(e_K(P^*_q \oplus C_{q - 1} \oplus K^*)),
+    \end{align*}
+    где
+    \begin{equation*}
+      K^* = \begin{cases}
+        K_1, &\text{если } |P_q| = n, \\
+        K_2, &\text{иначе},
+      \end{cases}
+    \end{equation*}
+    $P^*_q$ --- последний блок сообщения, полученного в результате дополнения
+    исходного сообщения с помощью процедуры 3.
+
+    % TODO: рис 3
+\end{itemize}
-- 
cgit v1.2.3

