% Лекция 22 (24.03.23) \subsection{ГОСТ 34.13-2015} Национальный стандарт Российской Федерации ГОСТ Р 34.13-2015 <<Информационная технология. Криптографическая защита информации. Режимы работы блочных шифров>> разработан Центром защиты информации и специальной связи ФСБ России с участием ОАО <<ИнфоТеКС>>, утверждён и введён в действие Приказом Федерального агентства по техническому регулированию и метрологии от 19 нюня 2015 г. №750-ст. Данный стандарт содержит описание режимов работы блочных шифров. Данные режимы работы блочных шифров определяют правила криптографического преобразования данных и выработки имитовставки для сообщений произвольного размера. Настоящий стандарт определяет следующие режимы работы алгоритмов блочного шифрования: \begin{itemize} \item режим простой замены (Electronic Codebook, ECB); \item режим гаммирования (Counter, CTR); \item режим гаммирования с обратной связью по выходу (Output Feedback, OFB); \item режим простой замены с зацеплением (Cipher Block Chaining, CBC); \item режим гаммирования с обратной связью по шифртексту (Cipher Feedback, CFB); \item режим выработки имитовставки (Message Authentication Code algorithm). \end{itemize} Данные режимы могут использоваться в качестве режимов для блочных шифров с произвольной длиной блока $n$. \subsubsection{Обозначения} \begin{enumerate} \item $\boxplus_s$ --- операция сложения в кольце $\Z_{2^s}$; \item $MSB_s : V^* \backslash \cup_{i = 0}^{s - 1} V_i \to V_s$ --- отображение, ставящее в соответствие строке $z_{m - 1} \| \dots \| z_1 \| z_0$, $m \geq s$, строку $z_{m - 1} \| \dots \| z_{m - s + 1} \| z_{m - s}$, $z_i \in V_1$, $i = 0, 1, \dots, m - 1$; \item $T_s = MSB_s$; \item $LSB_s : V^* \backslash \cup_{i = 0}^{s - 1} V_i \to V_s$ --- отображение, ставящее в соответствие строке $z_{m - 1} \| \dots \| z_1 \| z_0$, $m \geq s$, строку $z_{s - 1} \| \dots \| z_1 \| z_0$, $z_i \in V_1$, $i = 0, 1, \dots, m - 1$; \item $A \ll r$ --- операция логического сдвига строки $A$ на $r$ компонент в сторону компонент, имеющих большие номера. Если $A \in V_s$, то $A \ll r \in V_s$, причём \begin{equation*} A \ll r = \begin{cases} LSB_{s - r}(A) \| 0^r, &\text{если } r < s, \\ 0^s, &\text{если } r \geq s; \end{cases} \end{equation*} \item $Poly_s : V_s \to GF(2)[x]$ --- отображение, ставящее в соответствие строке $z = (z_{s - 1} \| \dots \| z_0) \in V_s$ многочлен $Poly_s(z) = \sum_{i = 0}^{s - 1} z_i x^i$; \item $k$ --- параметр алгоритма блочного шифрования, называемый длиной ключа; \item $n$ --- параметр алгоритма блочного шифрования, называемый длиной блока; \item $E : V_n \times V_k \to V_n$ --- отображение, реализующее базовый алгоритм блочного шифрования и осуществляющее преобразование блока открытого текста $P \in V_n$ с использованием ключа (шифрования) $K \in V_k$ в блок шифртекста $C \in V_n : E(P, K) = C$; \item $e_K : V_n \to V_n$ --- отображение, реализующее шифрование с использованием ключа $K \in V_k$, то есть $e_K(P) = E(P, K)$ для всех $P \in V_n$; \item $d_K : V_n \to V_n$ --- отображение, реализующее расшифрование с использованием ключа $K \in V_k$, то есть $d_K = e_K^{-1}$. \end{enumerate} \subsubsection{Дополнение сообщения} Отдельные из описанных режимов работы могут осуществлять криптографическое преобразование сообщений произвольной длины, для других режимов требуется, чтобы длина сообщения была кратна некоторой величине $l$. В последнем случае при работе с сообщениями произвольной длины необходимо применение процедуры дополнения сообщения до требуемой длины. Пусть $P \in V^*$ --- исходное сообщение, подлежащее зашифрованию. \begin{enumerate} \item Пусть $|P| \equiv r \pmod{l}$. Положим \begin{equation*} P^* = \begin{cases} P, &\text{если } r = 0, \\ P \| 0^{l - r}, &\text{иначе}. \end{cases} \end{equation*} Описанная процедура в некоторых случаях не обеспечивает однозначного восстановления исходного сообщения. Например, результаты дополнения сообщения $P_1$, такого что $|P_1| = l \cdot q - 1$ для некоторого $q$, и $P_2 = P_1 \| 0$ будут одинаковы. \item Пусть $|P| \equiv r \pmod{l}$. Положим $P^* = P \| 1 \| 0^{l - r - 1}$. Данная процедура обеспечивает однозначное восстановление исходного сообщения. При этом если длина исходного сообщения кратна $l$, то длина дополненного сообщения будет увеличена. \item Пусть $|P| \equiv r \pmod{l}$. В зависимости от значения $r$ возможны случаи: \begin{itemize} \item если $r = n$, то последний блок не изменяется $P^* = P$; \item если $r < n$, то применяется процедура 2. \end{itemize} Данная процедура обязательна для режима выработки имитовставки. \end{enumerate} \subsubsection{Режимы работы алгоритмов блочного шифрования} \paragraph{Режим гаммирования с обратной связью по выходу.} Параметры: целочисленные величины $s$ и $m$, $0 < s \leq n$, $n \leq m$, $m = n \cdot z$, $z \geq 1$ --- целое число. При использовании режима не требуется применение процедуры дополнения сообщения. При шифровании на одном ключе для каждого отдельного открытого текста используется значение уникальной или непредсказуемой (случайной или псевдослучайной) синхропосылки $IV \in V_m$. При шифровании используется двоичный регистр сдвига $R$ длины $m$. Начальным заполнением регистра является значение синхропосылки $IV$. Зашифрование в режиме заключается в покомпонентном сложении открытого текста с гаммой шифра, которая вырабатывается блоками длины $s$. При вычислении очередного блока гаммы выполняется зашифрование $n$ разрядов регистра сдвига с большими номерами базовым алгоритмом блочного шифрования. Затем заполнение регистра сдвигается на $n$ бит в сторону разрядов с большими номерами, при этом в разряды с меньшими номерами записывается полученный выход базового алгоритма блочного шифрования. Блок гаммы вычисляется путём усечения выхода базового алгоритма блочного шифрования. \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} Y_i = e_K(MSB_n(R_i)), \\ C_i = P_i \oplus T_s(Y_i), i = 1, 2, \dots, q - 1, \\ R_{i + 1} = LSB_{m - n}(R_i) \| Y_i, \end{cases} \\ &Y_q = e_K(MSB_n(R_q)), \\ &C_q = P_q \oplus T_r(Y_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} Y_i = e_K(MSB_n(R_i)), \\ P_i = C_i \oplus T_s(Y_i), i = 1, 2, \dots, q - 1, \\ R_{i + 1} = LSB_{m - n}(R_i) \| Y_i, \end{cases} \\ &Y_q = e_K(MSB_n(R_q)), \\ &P_q = C_q \oplus T_r(Y_q). \end{align*} Исходный открытый текст: $P = P_1 \| P_2 \| \dots \| P_q$. % TODO: рис 2 \end{itemize} \paragraph{Режим гаммирования с обратной связью по шифртексту.} Параметры: целочисленные величины $s$ и $m$, $0 < s \leq n$, $n \leq m$. Если в конкретной системе обработки информации на длину исходного сообщения $P$ накладывается ограничение $|P| = s \cdot q$, то к исходному сообщению, при необходимости, должна быть предварительно применена процедура дополнения. При шифровании на одном ключе для каждого отдельного открытого текста используется значение непредсказуемой (случайной или псевдослучайной) синхропосылки $IV \in V_m$. % TODO: пропуск Начальным заполнением регистра является значение синхропосылки $IV$. Зашифрование заключается в покомпонентном сложении открытого текста с гаммой шифра, которая вырабатывается блоками длины $s$. При вычислении очередного блока гаммы выполняется зашифрование $n$ разрядов регистра сдвига с большими номерами базовым алгоритмом блочного шифрования с последующим усечением. Затем заполнение регистра сдвигается на $s$ разрядов в сторону разрядов с большими номерами, при этом в разряды с меньшими номерами записывается полученный блок шифртекста, являющийся результатом покомпонентного сложения гаммы шифра и блока открытого текста.