diff options
| author | Andrew Guschin <guschin.drew@gmail.com> | 2023-04-02 19:06:38 +0400 |
|---|---|---|
| committer | Andrew Guschin <guschin.drew@gmail.com> | 2023-04-02 19:06:38 +0400 |
| commit | 95eca38f113413c68759cfa4afed8455b27df116 (patch) | |
| tree | 323c963000c99107c687dc6d9f8bd8872e9ea48a /cryptography/lectures/lecture23.tex | |
| parent | 9cb86163437b86bb1c2a059eff5bb32b7a29082e (diff) | |
Добавлены исправления в лекции до контрольной и добавлена 23 лекция.
Diffstat (limited to 'cryptography/lectures/lecture23.tex')
| -rw-r--r-- | cryptography/lectures/lecture23.tex | 153 |
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} |