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
|
% Лекция 23 (31.03.23)
\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$.
{\LARGE 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$.
Если к исходному открытому тексту была применена процедура дополнения, то
после расшифрования следует произвести обратную процедуру.
Для однозначного восстановления сообщения может потребоваться знание длины
исходного сообщения.
{\LARGE 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.
{\LARGE TODO: рис 3}
\end{itemize}
|