1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
|
% Лекция 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$.
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{lecture22/gost-encrypt}
\label{fig:gost-encrypt}
\end{figure}
\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$.
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{lecture22/gost-decrypt}
\label{fig:gost-decrypt}
\end{figure}
\end{itemize}
\paragraph{Режим гаммирования с обратной связью по шифртексту.}
Параметры: целочисленные величины $s$ и $m$, $0 < s \leq n$, $n \leq m$.
Если в конкретной системе обработки информации на длину исходного сообщения
$P$ накладывается ограничение $|P| = s \cdot q$, то к исходному сообщению, при
необходимости, должна быть предварительно применена процедура дополнения.
При шифровании на одном ключе для каждого отдельного открытого текста
используется значение непредсказуемой (случайной или псевдослучайной)
синхропосылки $IV \in V_m$.
При шифровании используется двоичный регистр сдвига $R$ длины $m$. Начальным
заполнением регистра является значение синхропосылки $IV$.
Зашифрование заключается в покомпонентном сложении открытого текста с гаммой
шифра, которая вырабатывается блоками длины $s$.
При вычислении очередного блока гаммы выполняется зашифрование $n$ разрядов
регистра сдвига с большими номерами базовым алгоритмом блочного шифрования с
последующим усечением.
Затем заполнение регистра сдвигается на $s$ разрядов в сторону разрядов
с большими номерами, при этом в разряды с меньшими номерами записывается
полученный блок шифртекста, являющийся результатом покомпонентного сложения
гаммы шифра и блока открытого текста.
|