diff options
| author | Andrew Guschin <guschin.drew@gmail.com> | 2023-03-27 23:17:04 +0400 |
|---|---|---|
| committer | Andrew Guschin <guschin.drew@gmail.com> | 2023-03-27 23:17:04 +0400 |
| commit | 5d8de74a3609fe5d453352923bc7daab6a8aaed4 (patch) | |
| tree | e1ea840fc8fbdef22a726b050933a16d7311c0bb /cryptography/lectures/lecture21.tex | |
| parent | 7a61d8748bd4a8024f8efb59f494d58d1e4d2aff (diff) | |
Добавлены лекции по криптографии второго семестра до контрольной
Diffstat (limited to 'cryptography/lectures/lecture21.tex')
| -rw-r--r-- | cryptography/lectures/lecture21.tex | 276 |
1 files changed, 276 insertions, 0 deletions
diff --git a/cryptography/lectures/lecture21.tex b/cryptography/lectures/lecture21.tex new file mode 100644 index 0000000..688b6e2 --- /dev/null +++ b/cryptography/lectures/lecture21.tex @@ -0,0 +1,276 @@ +% Лекция 21 (17.03.23) + +Введём обозначения: +\begin{itemize} + \item + $V^*$ --- множество всех двоичных строк конечной длины, включая пустую + строку; + \item + $V_s$ --- множество всех двоичных строк длины $s$, где $s$ --- целое + неотрицательное число, нумерация подстрок и компонент строки осуществляется + справа налево, начиная с нуля; + \item + $U \times W$ --- прямое (декартово) произведение множества $U$ и + множества $W$; + \item + $|A|$ --- число компонент (длина) строки $A \in V^*$ (если $A$ --- пустая + строка, то $|A| = 0$); + \item + $A \| B$ --- конкатенация строк $A, B \in V^*$; + \item + $A \lll_{11}$ --- циклический сдвиг строки $A \in V_{32}$ на 11 компонент в + сторону компонент, имеющих большие номера; + \item + $\oplus$ --- операция покомпонентного сложения по модулю 2 двух двоичных + строк одинаковой длины; + \item + $Z_{2^s}$ --- кольцо вычетов по модулю $2^s$; + \item + $\boxplus$ --- операция сложения в кольце $\Z_{2^{32}}$; + \item + $\mathbb{F}$ --- конечное поле $GF(2)[x] / p(x)$, где $p(x) = x^8 + x^7 + + x^6 + x + 1 \in GF(2)[x]$; элементы поля $\mathbb{F}$ представляются целыми + числами, причём элементу $z_0 + z_1 \cdot \theta + \dots z_7 \cdot \theta^7 + \in \mathbb{F}$ соответствует число $z_0 + 2 \cdot z_1 + \dots + 2^7 \cdot + z_7$, где $z_i \in \set{0, 1},\, i = 0, 1, \dots, 7$ и $\theta$ обозначает + класс вычетов по модулю $p(x)$, содержащий $x$; + \item + $Vec_s : Z_{2^s} \to V_s$ --- биективное отображение, сопоставляющее + элементу кольца $Z_{2^s}$ его двоичное представление; + \item + $Int_s : V_s \to Z_{2^s}$ --- отображение, обратное к отображению $Vec_s$; + \item + $\Delta : V_8 \to \mathbb{F}$ --- биективное отображение, сопоставляющее + двоичной строке из $V_8$ элемент поля $\mathbb{F}$ следующим образом: + строке $z_7 \| \dots \| z_1 \| z_0$, $z_i \in \set{0, 1}$, $i = 0, 1, \dots, + 7$, соответствует элемент $z_0 + z_1 \cdot \theta + \dots + z_7 \cdot + \theta^7 \in \mathbb{F}$; + \item + $\triangledown : \mathbb{F} \to V_8$ --- отображение, обратное к + отображению $\Delta$. + \item + $\Phi \Psi$ --- произведение отображений, при котором отображение $\Psi$ + действует первым; + \item + $\Phi^s$ --- композиция отображений $\Phi^{s - 1}$ и $\Phi$, причём + $\Phi^1 = \Phi$. +\end{itemize} + + +\paragraph{Шифр <<Магма>>.} + +Это по сути шифр ГОСТ 28147-89 с фиксированным набором подстановок (таблицы +замены $S$). + +\begin{enumerate} + \item + \textbf{Значения параметров.} + + В качестве нелинейного биективного преобразования выступают подстановки + $\pi_i = Vec_4 \pi_i' Int_4 : V_4 \to V_4$, где $\pi_i' : Z_{2^4} \to + Z_{2^4}$, $i = 0, 1, \dots, 7$. Значения подстановок $\pi_i'$ записаны + в стандарте в виде массивов: + \begin{equation*} + \pi_i' = (\pi_i'(0), \pi_i'(1), \dots, \pi_i'(15)),\, i = 0, 1, \dots, 7 + \end{equation*} + + Например, + \begin{equation*} + \pi_6' = (8, 14, 2, 5, 6, 8, 1, 12, 15, 4, 11, 0, 13, 10, 3, 7) + \end{equation*} + + \item + \textbf{Преобразования.} + + При реализации алгоритмов шифрования и расшифрования используются + следующие преобразования: + \begin{equation*} + t : V_{32} \to V_{32}, t(a) = t(a_7 \| \dots \| a_0) = + \pi_7(a_7) \| \dots \| \pi_0(a_0) + \end{equation*} + где $a = a_7 \| \dots \| a_0 \in V_{32}$, $a_i \in V_4$, $i = 0, \dots, 7$. + + \begin{equation*} + g[k] : V_{32} \to V_{32}, + g[k](a) = (T(Vec_{32}(Int_{32}(a) \boxplus Int_{32}(k)))) \lll_{11} + \end{equation*} + где $k, a \in V_{32}$; + + \begin{equation*} + G[k] : V_{32} \times V_{32} \to V_{32} \times V_{32}, + G[K](a_1, a_0) = (a_0, g[k](a_0) \oplus a_1) + \end{equation*} + где $k, a_0, a_1 \in V_{32}$; + + \begin{equation*} + G^*[k] : V_{32} \times V_{32} \to V_{64}, + G^*[k](a_1, a_0) = (g[k](a_0) \oplus a_1) \| a_0 + \end{equation*} + где $k, a_0, a_1 \in V_{32}$. + + \item + \textbf{Алгоритм развёртывания ключа.} + + Итерационные ключи $K_i \in V_{32}$, $i = 1, 2, \dots, 32$, вырабатываются + на основе исходного ключа $K = k_{255} \| \dots \| k_0 \in V_{256}$, + $k_i \in V_1$, $i = 0, 1, \dots, 255$, и определяются равенствами: + \begin{align*} + K_1 &= k_{255} \| \dots \| k_{224}; \\ + K_2 &= k_{223} \| \dots \| k_{192}; \\ + &\dots \\ + K_8 &= k_{31} \| \dots \| k_{0}; \\ + K_{i + 8} &= K_i,\, i = 1, 2, \dots, 8; \\ + K_{i + 16} &= K_i,\, i = 1, 2, \dots, 8; \\ + K_{i + 24} &= K_{9 - i},\, i = 1, 2, \dots, 8; \\ + \end{align*} + + \item + \textbf{Базовый алгоритм шифрования.} + + \begin{enumerate} + \item + Алгоритм зашифрования в зависимости от значений итерационных ключей + $K_i \in V_{32}$, $i = 1, 2, \dots, 32$, реализует подстановку + $E_{K_1, \dots, K_{32}}$, заданную на множестве $V_{64}$ в + соответствии с равенством + \begin{equation*} + E_{K_1, \dots, K_{32}}(a) = G^*[K_{32}] G[K_{31}] \dots + G[K_2] G[K_1](a_1, a_0) + \end{equation*} + где $a = a_1 \| a_0 \in V_{64},\, a_0, a_1 \in V_{32}$. + + \item + Алгоритм расшифрования в зависимости от значений итерационных ключей + $K_i \in V_{32},\, i = 1, 2, \dots, 32$, реализует подстановку + $D_{K_1, \dots, K_{32}}$, заданную на множестве $V_{64}$ в + соответствии с равенством + \begin{equation*} + D_{K_1, \dots, K_{32}}(a) = G^*[K_1] G[K_2] \dots + G[K_{31}] G[K_{32}](a_1, a_0) + \end{equation*} + где $a = a_1 \| a_0 \in V_{64},\, a_0, a_1 \in V_{32}$. + \end{enumerate} + Сложность алгоритма $c = 2^{256}$. +\end{enumerate} + + +\paragraph{Шифр <<Кузнечик>>.} + +\begin{enumerate} + \item + \textbf{Значения параметров.} + + \begin{enumerate} + \item + В качестве нелинейного биективного преобразования выступает подстановка + $\pi = Vec_8 \pi' Int_8 : V_8 \to V_8$, где $\pi' : Z_{2^8} \to Z_{2^8}$. + Значения подстановки $\pi'$ записаны в стандарте в виде массива: + \begin{align*} + \pi' &= (\pi'(0), \pi'(1), \dots, \pi'(255)) \\ + \pi' &= (252, 238, 221, \dots, 75, 99, 182) + \end{align*} + \item + Линейное преобразование задаётся отображением $l : V_8^{16} \to + V_8$, которое определяется следующим образом: + \begin{align*} + l(a_{15}, \dots, a_0) &= + \triangledown(148 \cdot \Delta(a_{15}) + 32 \cdot \Delta(a_{14}) + 133 \cdot \Delta(a_{13}) +\\ + &+ 16 \cdot \Delta(a_{12}) + 194 \cdot \Delta(a_{11}) + 192 \cdot \Delta(a_{10}) +\\ + &+ 1 \cdot \Delta(a_9) + 251 \cdot \Delta(a_8) + 1 \Delta(a_7) + 192 \cdot \Delta(a_6) +\\ + &+ 194 \cdot \Delta(a_5) + 16 \cdot \Delta(a_4) + 133 \cdot \Delta(a_3) +\\ + &+ 32 \cdot \Delta(a_2) + 148 \cdot \Delta(a_1) + 1 \cdot \Delta(a_0)) + \end{align*} + для любых $a_i \in V_8$, $i = 0, 1, \dots, 15$, где операции + сложения и умножения осуществляются в поле $\mathbb{F}$, а константы + являются элементами поля в указанном ранее смысле. + \end{enumerate} + \item + \textbf{Преобразования.} + + При реализации алгоритмов шифрования используются следующие преобразования: + \begin{equation*} + X[k] : V_{128} \to V_{128}, X[k](a) = k \oplus a + \end{equation*} + где $k, a \in V_{128}$. + + \begin{equation*} + S : V_{128} \to V_{128}, S(a) = S(a_{15} \| \dots \| a_0) = + \pi(a_{15}) \| \dots \| \pi(a_0) + \end{equation*} + где $a = a_{15} \| \dots \| a_0 \in V_{128}, a_i \in V_8, i = 0, 1, \dots, 15$. + + \begin{equation*} + R : V_{128} \to V_{128}, R(a) = R(a_{15} \| \dots \| a_0) = + l(a_{15}, \dots, a_0) \| a_15 \| \dots \| a_1 + \end{equation*} + где $a = a_{15} \| \dots \| a_0 \in V_{128}, a_i \in V_8, i = 0, 1, \dots, 15$. + + $R^{-1} : V_{128} \to V_{128}$ --- преобразование, обратное к преобразованию + $R$, которое может быть вычислено, например, следующим образом: + \begin{equation*} + R^{-1}(a) = R^{-1}(a_{15} \| \dots \| a_0) = a_{14} \| a_{13} \| \dots \| + a_0 \| l(a_{14}, a_{13}, \dots, a_0, a_{15}) + \end{equation*} + где $a = a_{15} \| \dots \| a_0 \in V_{128}, a_i \in V_8, i = 0, 1, \dots, 15$. + + \begin{equation*} + L : V_{128} \to V_{128}, L(a) = R^{16}(a) + \end{equation*} + где $a \in V_{128}$. + + \begin{equation*} + L^{-1} : V_{128} \to V_{128}, L^{-1}(a) = (R^{-1})^{16}(a) + \end{equation*} + где $a \in V_{128}$. + + \begin{equation*} + F[k] : V_{128} \times V_{128} \to V_{128} \times V_{128}, + F[k](a_1, a_0) = (LSX[k](a_1) \oplus a_0, a_1) + \end{equation*} + где $k, a_0, a_1 \in V_{128}$. + \item + \textbf{Алгоритм развёртывания ключа.} + + Алгоритм развёртывания ключа использует итерационные константы $C_i \in + V_{128},\, i = 1, 2, \dots, 32$, которые определены следующим образом: + $C_i = L(Vec_{128}(i)),\, i = 1, 2, \dots, 32$. + + Итерационные ключи $K_i \in V_{128},\, i = 1, 2, \dots, 10$, вырабатываются + на основе исходного ключа $K = k_{255} \| \dots \| k_0 \in V_{256},\, + k_i \in V_1,\, i = 0, 1, \dots, 255$, и определяются следующим образом: + \begin{align*} + K_1 &= k_{255} \| \dots \| k_{128}; \\ + K_2 &= k_{127} \| \dots \| k_0; \\ + (K_{2i + 1}, K_{2i + 2}) &= F[C_{8(i - 1) + 8} \dots F[C_{8(i - 1) + 1}]( + K_{2i - 1}, K_{2i}),\, i = 1, 2, 3, 4 + \end{align*} + + \item + \textbf{Базовый алгоритм шифрования.} + + \begin{enumerate} + \item + Алгоритм зашифрования в зависимости от значений итерационных ключей + $K_i \in V_{128},\, i = 1, 2, \dots, 10$, реализует подстановку + $E_{K_1, \dots, K_{10}}$, заданную на множестве $V_{128}$ в + соответствии с равенством + \begin{equation*} + E_{K_1, \dots, K_{10}} = X[K_{10}] LSX[K_9] \dots LSX[K_2] LSX[K_1] + (a) + \end{equation*} + где $a \in V_{128}$. + + \item + Алгоритм расшифрования в зависимости от значений итерационных ключей + $K_i \in V_{128},\, i = 1, 2, \dots, 10$, реализует подстановку + $D_{K_1, \dots, K_{10}}$, заданную на множестве $V_{128}$ в + соответствии с равенством + \begin{equation*} + D_{K_1, \dots, K_{10}}(a) = X[K_1] S^{-1} L^{-1} X[K_2] \dots + S^{-1} L^{-1} X[K_9] S^{-1} L^{-1} X[K_{10}](a) + \end{equation*} + где $a \in V_{128}$. + \end{enumerate} + Сложность алгоритма $c = 2^{256}$. +\end{enumerate} + |