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
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
|
% Лекция 18 (17.02.23)
\subsection{DES}
В 1973--1974 гг. Национальное бюро стандартов США объявило открытый конкурс на
создание общедоступного алгоритма шифрования с гарантированной надёжностью.
Оценку представленных кандидатов осуществляло Агентство Национальной
Безопасности США.
В январе 1977 года предложенный фирмой IBM и оказавшийся победителем конкурса
<<Алгоритм шифрования для защиты данных ЭВМ>> был зарегистрирован в качестве
государственного стандарта США: Data Encryption Standard (Стандарт шифрования
данных, DES).
Сразу же после создания DES были созданы чипы для быстрого аппаратного
шифрования. Вся структура DES была полностью опубликована при его введении в
качестве стандарта. Создание шифра DES была полностью опубликована при его
введении в качестве стандарта.
Создание шифра DES (главным идеологом проекта был Х. Фейстель (1915--1990))
явилось выдающимся научно-техническим достижением, оказавшим глубокое влияние
на дальнейшее развитие криптографии и на её использование в интересах широких
деловых кругов.
Достоинства: простота ключевой системы, высокая скорость аппаратной и
программной реализации, достаточно высокая криптографическая стойкость алгоритма
шифрования при заданной длине ключа.
Алгоритм DES является блочным шифром. Открытый текст, представленный в двоичном
виде, разбивается на блоки длины 64 бита, которые переводятся в такой же длины
блоки криптограммы с помощью чередования перестановочных и подстановочных
шифров.
Обозначения:
\begin{itemize}
\item $L_i$, $R_i$ --- левая и правая половины 64-битного блока $L_i R_i$;
\item $\oplus$ --- операция побитового сложения вектор-блоков по модулю 2;
\item $k_i$ --- 48-битовые ключи;
\item $f$ --- функции шифрования;
\item $IP$ --- начальная перестановка степени 64.
\end{itemize}
\begin{remark}
Все приводимые таблицы являются стандартными и должны использоваться при
реализации алгоритма DES в неизменном виде. Все перестановки и коды в таблицах
подобраны разработчиками таким образом, чтобы максимально затруднить процесс
вскрытия шифра путём подбора ключа.
\end{remark}
\begin{enumerate}
\item
При зашифровании очередного блока $T$ его биты подвергаются начальной
перестановке $IP$ согласно таблице \ref{tbl:ip-permutation}.
\begin{table}[h]
\centering
\caption{Начальная перестановка $IP$}
\begin{tabular}{|c|c|c|c|c|c|c|c|}
\hline
58 & 50 & 42 & 34 & 26 & 18 & 10 & 2 \\ \hline
60 & 52 & 44 & 36 & 28 & 20 & 12 & 4 \\ \hline
62 & 54 & 46 & 38 & 30 & 22 & 14 & 6 \\ \hline
64 & 56 & 48 & 40 & 32 & 24 & 16 & 8 \\ \hline
57 & 49 & 41 & 33 & 25 & 17 & 9 & 1 \\ \hline
59 & 51 & 43 & 35 & 27 & 19 & 11 & 3 \\ \hline
61 & 53 & 45 & 37 & 29 & 21 & 13 & 5 \\ \hline
63 & 55 & 47 & 39 & 31 & 23 & 15 & 7 \\ \hline
\end{tabular}
\label{tbl:ip-permutation}
\end{table}
Полученный после перестановки блок $IP(T)$ разделяется на две половины:
$L_0$, состоящую из 32 старших бит, и $R_0$, состоящую из 32 младших бит.
После этого следуют 16 раундов шифрования с использованием секретного ключа
$k$.
Пусть $T_{i - 1} = L_{i - 1} R_{i - 1}$ --- результат $(i - 1)$-й итерации.
Тогда результат $i$-й итерации $T_i = L_i R_i$ определяется формулами:
\begin{align*}
L_i &= R_{i - 1} \\
R_i &= L_{i - 1} \oplus f(R_{i - 1}, k_i), i = \overline{1, 16}
\end{align*}
Функция $f$ называется \emph{функцией шифрования}. Её аргументами являются
32-битовый вектор $R_{i - 1}$ и 48-битовый ключ $k_i$, который является
результатом преобразования 56-битового ключа шифра $k$.
% TODO: рисунок 1, в конце поменять местами R_16 и L_16
Результатом последней итерации является блок $T_{16} = L_{16} R_{16}$. По
окончании шифрования осуществляется восстановление позиций битов применением
к $T_{16}$ обратной перестановки $IP^{-1}$.
При расшифровании все действия выполняются в обратном порядке, при этом
следует использовать соотношения
\begin{equation*}
R_{i - i} &= L_i, \\
L_{i - 1} &= R_i + f(L_i, k_i),\, i = \overline{16, 1},
\end{equation*}
пользуясь которыми можно <<спуститься>> от $L_{16}$ и $R_{16}$ к $L_0$ и
$R_0$.
На каждой итерации используется текущее значение ключа $k_i$ (48 бит),
получаемое из исходного ключа $k$ следующим образом.
Сначала пользователи выбирают сам ключ $k$, содержащий 56 случайных значащих
битов.
\item
Восемь битов, находящихся в позициях 8, 16, \dots, 64 добавляются в ключ
таким образом, чтобы каждый байт содержал начётное число единиц. Это
используется для обнаружения ошибок при обмене и хранении ключей.
\item
Значащие 56 бит ключа подвергаются перестановке, приведённой в таблице
\ref{tbl:des-permutation}
\begin{table}[H]
\centering
\caption{}
\begin{tabular}{|c|c|c|c|c|c|c|}
\hline
57 & 49 & 41 & 33 & 25 & 17 & 9 \\ \hline
1 & 58 & 50 & 42 & 34 & 26 & 18 \\ \hline
10 & 2 & 59 & 51 & 43 & 35 & 27 \\ \hline
19 & 11 & 3 & 60 & 52 & 44 & 36 \\ \hline
63 & 55 & 47 & 39 & 31 & 23 & 15 \\ \hline
7 & 62 & 54 & 46 & 38 & 30 & 22 \\ \hline
14 & 6 & 61 & 53 & 45 & 37 & 29 \\ \hline
21 & 13 & 5 & 28 & 20 & 12 & 4 \\ \hline
\end{tabular}
\label{tbl:des-permutation}
\end{table}
Эта перестановка определяется двумя блоками $C_0$ и $D_0$ по 28 бит в каждом
(они занимают соответственно верхнюю и нижнюю половину таблицы).
Затем индуктивно определяются блоки $C_i$ и $D_i$, $i = \overline{1,
16}$. Если уже определены $C_{i - 1}$ и $D_{i - 1}$, то $C_i$ и $D_i$
получаются из них циклическим сдвигом влево на одну или две позиции в
зависимости от номера раунда. При $i = 1, 2, 9, 16$ сдвиг на одну позицию,
при остальных значениях --- на две. После сдвигов по заданному способу
строится 48"=битовый раундовый ключ.
\item
Теперь определим ключи $k_i$, $1 \leq i \leq 16$. Ключ $k_i$ состоит из 48
битов, выбираемых из битов блока $C_i D_i$ согласно таблице
\ref{tbl:des-key-blocks}
\begin{table}[H]
\centering
\caption{}
\begin{tabular}{|c|c|c|c|c|c|c|}
\hline
14 & 17 & 11 & 24 & 1 & 5 \\ \hline
3 & 28 & 15 & 6 & 21 & 10 \\ \hline
23 & 19 & 12 & 4 & 26 & 8 \\ \hline
16 & 7 & 27 & 20 & 13 & 2 \\ \hline
41 & 52 & 31 & 37 & 47 & 55 \\ \hline
30 & 40 & 51 & 45 & 33 & 48 \\ \hline
44 & 49 & 39 & 56 & 34 & 53 \\ \hline
46 & 42 & 50 & 36 & 29 & 32 \\ \hline
\end{tabular}
\label{tbl:des-key-blocks}
\end{table}
Первыми тремя битами в $k_i$ являются биты 14, 17, 11 из блока $C_i D_i$.
Заметим, что 8 из 56 бит (с номерами 9, 18, 22, 25, 35, 38, 43, 54) из
$C_i D_i$ отсутствуют в $k_i$.
\item
Центральной частью шифра является предложенная Х. Фейстелем функция $f(R_{i
- 1}, k_i)$.
% TODO: рисунок 2
Для вычисления значения функции $f$ используются: функция расширения $E$;
преобразование $S$, составленное из восьми преобразования S-блоков $S1, S2,
\dots, S8$; перестановка $P$.
Аргументами функции $f$ являются вектор $R_{i - 1}$ (32 бита) и вектор
$k_i$ (48 бит). Функция $E$ <<расширяет>> 32-битовый вектор $R_{i - 1}$ до
48-битового вектора $R_{i - 1}$, при этом порядок следования битов в $E(R_{i
- 1})$ указан в таблице \ref{tbl:des-feistel}
\begin{table}[H]
\centering
\caption{}
\begin{tabular}{|c|c|c|c|c|c|c|}
\hline
32 & 1 & 2 & 3 & 4 & 5 \\ \hline
4 & 5 & 6 & 7 & 8 & 9 \\ \hline
8 & 9 & 10 & 11 & 12 & 13 \\ \hline
12 & 13 & 14 & 15 & 16 & 17 \\ \hline
16 & 17 & 18 & 19 & 20 & 21 \\ \hline
20 & 21 & 22 & 23 & 24 & 25 \\ \hline
24 & 25 & 26 & 27 & 28 & 29 \\ \hline
28 & 29 & 30 & 31 & 32 & 1 \\ \hline
\end{tabular}
\label{tbl:des-feistel}
\end{table}
Полученный результат складывается побитно по модулю 2 с текущим значением
ключа $k_i$ и затем разбивается на 8 последовательных 6-битовых групп,
каждая из которых подаётся на вход соответствующего подстановочного
шифратора, так называемого S-бокса (substitution boxes --- таблицы замены,
$S1, S2, \dots, S8$).
S-бокс представляет собой таблицу размерности $4 \times 16$ с нумерацией
строк $0, 1, 2, 3$ и столбцов от 0 до 15.
В каждой строке стоит своя перестановка столбцовых номеров.
\begin{table}[H]
\centering
\caption{}
\begin{tabular}{|c|cccccccccccccccc|}
\hline
S7 & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 \\ \hline
0 & 4 & 11 & 2 & 14 & 15 & 0 & 8 & 13 & 3 & 12 & 9 & 7 & 5 & 10 & 6 & 1 \\
1 & 13 & 0 & 11 & 7 & 4 & 9 & 1 & 10 & 14 & 3 & 5 & 12 & 2 & 15 & 8 & 6 \\
2 & 1 & 4 & 11 & 13 & 12 & 3 & 7 & 14 & 10 & 15 & 6 & 8 & 0 & 5 & 9 & 2 \\
3 & 6 & 11 & 13 & 8 & 1 & 4 & 10 & 7 & 9 & 5 & 0 & 15 & 14 & 2 & 3 & 12 \\ \hline
\end{tabular}
\label{tbl:des-feistel-sbox}
\end{table}
На вход S-бокса подаётся 6-разрядный двоичный блок $a_0 a_1 a_2 a_3 a_4 a_5$.
Первый и последний его символы $a_0 a_5$ определяют строку S-бокса, средние
$a_1 a_2 a_3 a_4$ --- его столбец. Стоящее на пересечении строки и столбца
число даёт в двоичной записи 4-разрядный выходной блок. Переработка
6-буквенных двоичных блоков в 4-буквенные и является функцией S-бокса.
\begin{example}
Пусть на вход S-бокса 7 подаётся двоичное слово 001011. Оно выделяет
в таблице строку с номером 1 (01) и столбец с номером 5 (0101). На их
пересечении стоит число 9. Его двоичная запись 1001 и появляется на
выходе.
\end{example}
Полученные восемь 4-битовых выходных вектора соединяются в один 32-битный.
\item
Значение $f(R_{i - 1}, k_i)$ получается применением перестановки битов $P$,
заданной таблицей к результирующему 32-битовому блоку.
\begin{table}[H]
\centering
\caption{}
\begin{tabular}{|c|c|c|c|}
\hline
16 & 7 & 20 & 21 \\ \hline
29 & 12 & 28 & 17 \\ \hline
1 & 15 & 23 & 26 \\ \hline
5 & 18 & 31 & 10 \\ \hline
2 & 8 & 24 & 14 \\ \hline
32 & 27 & 3 & 9 \\ \hline
19 & 13 & 30 & 6 \\ \hline
22 & 11 & 4 & 25 \\ \hline
\end{tabular}
\label{tbl:des-feistel-sbox}
\end{table}
\end{enumerate}
|