summaryrefslogtreecommitdiff
path: root/cryptography/lectures/lecture23.tex
diff options
context:
space:
mode:
authorAndrew Guschin <guschin.drew@gmail.com>2023-04-02 19:06:38 +0400
committerAndrew Guschin <guschin.drew@gmail.com>2023-04-02 19:06:38 +0400
commit95eca38f113413c68759cfa4afed8455b27df116 (patch)
tree323c963000c99107c687dc6d9f8bd8872e9ea48a /cryptography/lectures/lecture23.tex
parent9cb86163437b86bb1c2a059eff5bb32b7a29082e (diff)
Добавлены исправления в лекции до контрольной и добавлена 23 лекция.
Diffstat (limited to 'cryptography/lectures/lecture23.tex')
-rw-r--r--cryptography/lectures/lecture23.tex153
1 files changed, 153 insertions, 0 deletions
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}