- •Содержание
- •Crypton v1.0
- •Алгоритм зашифрования
- •Алгоритм расшифрования
- •Алгоритм зашифрования
- •Алгоритм расшифрования
- •Loki 91 и 97.
- •Serpent
- •Звездова mars
- •Алгоритм зашифрования
- •Алгоритм расшифрования
- •Генерация раундовых подключей
- •Noekeon
- •Алгоритм зашифрования
- •Rijndael
- •Skipjack
- •Алгоритм зашифрования
- •Алгоритм расшифрования
- •TwoFish
- •Алгоритм зашифрования
- •Алгоритм расшифрования
- •Гост 28147-89
- •Blowfish
- •Camellia
- •Алгоритм зашифрования
- •6 Раундов
- •6 Раундов
- •6 Раундов
- •4. Режимы использования блочных шрифтов
- •2. Функции хеширования
- •2.1. Ключевые функции хеширования
- •2.2. Бесключевые функции хеширования
- •3 А. Схемы эцп с использованием дискретных логарифмов в простом конечном поле
- •Предисловие
- •Введение
- •1 Область применения
- •2 Нормативные ссылки
- •3 Термины, определения и обозначения
- •3.1 Термины и определения
- •3.2 Обозначения
- •4 Общие положения
- •5 Значения параметров
- •5.1 Инициализационные векторы
- •5.2 Нелинейное биективное преобразование множества двоичных векторов
- •5.3 Перестановка байт
- •6 Преобразования
- •Государственный Стандарт Российской Федерации
- •Введение
- •1 Область применения
- •2 Нормативные ссылки
- •3 Определения и обозначения
- •3.1 Определения
- •3.2 Обозначения
- •4. Общие положения
- •5. Математические соглашения
- •5.1. Математические определения
- •5.2. Параметры цифровой подписи
- •5.3. Двоичные векторы
- •6. Основные процессы
- •6.1. Формирование цифровой подписи
- •6.2. Проверка цифровой подписи
- •Приложение а (справочное) Дополнительные термины в области эцп
- •Приложение б (справочное) Контрольный пример
- •Б.2. Процесс формирования цифровой подписи (алгоритм I)
- •4.Датчики псевдослучайных последовательностей (чисел)
- •4.1. Алгоритм rc4
Crypton v1.0
Криптоалгоритм , автором которого является (Южная Корея), шифрует -битовые блоки открытых данных под управлением ‑битового
‑байтовые блоки , участвующие в криптографическом преобразовании, представляются в виде ‑матрицы
В алгоритме используются следующие преобразования над -матрицами:
Нелинейные преобразования , или определяются как
; , , .
Здесь , , и − подстановки на множестве байтов, причем , , (ввиду этого и ). Подстановки и конструируются следующим образом. Сначала на основе двух подстановок и , заданных на множестве полубайтов (см. в табл. 1), строится инволютивная подстановка , заданная на множестве байтов (далее , ,…, − биты, образующие байт со значением ; полубайты и имеют значения и ; аналогично, , и − биты, образующие байты , и :
-
w7
:=
0
0
1
0
1
0
0
0
z7
w6
1
0
0
0
0
1
1
0
z6
w5
0
0
0
1
0
1
0
0
z5
w4
0
1
1
0
0
0
0
1
z4
w3
1
0
0
1
0
1
0
0
z3
w2
0
1
0
0
0
0
0
1
z2
w1
0
0
1
0
1
0
0
1
z1
w0
1
0
0
0
0
0
1
0
z0
На основе подстановки определяются подстановки :
,
где − циклический сдвиг байта влево на битовых позиций.
Таблица 1. Подстановки и
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
a |
b |
c |
d |
e |
f |
f |
e |
a |
1 |
b |
5 |
8 |
d |
9 |
3 |
2 |
7 |
0 |
6 |
4 |
c | |
b |
a |
d |
7 |
8 |
e |
0 |
5 |
f |
6 |
3 |
4 |
1 |
9 |
2 |
c | |
c |
3 |
a |
9 |
e |
5 |
d |
b |
6 |
8 |
2 |
4 |
f |
7 |
1 |
0 | |
6 |
c |
e |
a |
b |
7 |
9 |
3 |
4 |
d |
1 |
0 |
f |
2 |
5 |
8 |
Преобразования , или , определяются как к
,
где , , ; , , , .
Отметим, что , , .
Преобразование − обычное транспонирование матрицы . Очевидно, что .
Алгоритм зашифрования
Вход: Р – 128‑битовый (16‑байтовый) блок открытых данных в виде 4´4‑матрицы.
В алгоритме зашифрования используются раундовые подключи ke0, ke1,…, ke12, представленные, как и блок Р, в виде 4´4‑матриц
С:=P;
С:=СÅС ke0;
for r:=1 to 12 do {n:=(r-1) mod 2; t(pn(γn(С))); С:=СÅker};
t(p1(t(C))).
Выход: C – 128‑битовый блок шифртекста.
Замечание. Можно показать, что алгоритм зашифрования пригоден и для расшифрования, если последовательность раундовых подключей kei заменить на kdi:
kdi:=t(pi+1 mod 2(t(ke12-i))), i:=0,1,…,12.
Алгоритм расшифрования
Вход: C – 128‑битовый блок шифртекста в виде 4´4‑матрицы.
P:=C; t(p1(t(Р)));
for r:=12 downto 1 do {P:=PÅker; γr mod 2(πr+1 mod 2(τ(P)))};
P:=PÅke0.
Выход: P – 128‑битовый блок открытых данных.
Вычисление раундовых подключей. Раундовые подключи ke0, ke1,…,ke12 генерируются на основе 32‑байтового секретного ключа К=(k0,k1,…,k31). Каждый раундовый ключ представлен 4´4‑матрицей; i-ая строка матрицы ker обозначается keri, 0£i£3, 0£r£12. При вычислении значений keri используются вспомогательные переменные u0,u1,u2,u3; v0,v1,v2,v3; e0,e1,…,e7 и константы с0,с1,…,c12; mс0,mс1,mc2, mс3. Каждая из них рассматривается либо как 4‑байтовый массив, либо как 32‑битовое число. Операции roln и rolbn определяются следующим образом:
roln(X) – циклический сдвиг 32‑битового числа X влево на n битов;
rolbn(X) – циклический сдвиг каждого байта в 4‑байтовом массиве X влево на n битов;
;
for i:=0 to 3 do {ei:=uiÅv0Åv1Åv2Åv3; ei+4:=viÅu0Åu1Åu2Åu3};
c0:=$a54ff53a;
for i:=1 to 12 do ci:=(ci-1+$3c6ef372) mod 232;
mc0:=$acacacac;
for i:=0 to 3 do mci:=rolb1(mci-1);
for i:=0 to 3 do {ke0,i:=eiÅc0Åmci; ke1i:=ei+4Åc1Åmci};
for r:=2 to 12 do {
if r нечетно then {
(e4,e5,e6,e7):=(rolb2(e7),rolb2(e4),rol8(e5),rol16(e6));
for i:=0 to 3 do ker,i:=ei+4ÅcrÅmci;}
else {
(e0,e1,e2,e3):=(rol24(e1),rol16(e2),rolb6(e3),rolb6(e0));
for i:=0 to 3 do ker,i:=eiÅcrÅmci;}}.
Вафина
E2
Криптоалгоритм , разработанный в японской телефонной и телеграфной корпорации, шифрует 128‑битовые блоки открытых данных под управлением секретного ключа, длина которого может составлять , или битов.
По своей структуре шифр – классический шифр Фейстеля (см. рис.1). В алгоритме используются следующие преобразования:
– побитовое сложение по модулю блоков и одинаковой длины (в , или байтов).
В операциях и аргументы и результат – -байтовые блоки, представленные в виде массивов -битовых слов:
, , , .
Значения и вычисляются как
, , , , , .
Слова , , , рассматриваются в данном случае как неотрицательные целые ‑разрядные числа (в которых левый байт считается старшим).
Операция умножения () выполняется по модулю . Значения
и определяются как
( – число, обратное к относительно умножения по модулю , т.е. , если нечётное число). Отметим, что .
Функция от ‑байтового аргумента определяется как
.
Другими словами, – перестановка байтов в : в позицию перемещается байт из позиции , ,,,…,. Обратная функция возвращает к исходному значению: в позицию перемещается байт из позиции , ,,,…,, т.е.
.
Функция возвращает ‑байтовый аргумент , циклически сдвинутый на один байт влево:
.
Функция от ‑байтового аргумента возвращает 8-байтовое значение , где – подстановка на множестве байтов, являющаяся произведением двух подстановок:
,
.
В подстановке байты интерпретируются как элементы конечного поля , где (соответственно и операция возведения в степень выполняется в этом поле); в подстановке байты интерпретируются как целые числа (более точно: как элементы кольца ), а операции умножения и сложения выполняются по модулю . Значение определяется как
.
Подстановка также представлена в табл.1.
Функция от ‑байтового аргумента возвращает 8‑байтовое значение :
|
y0 |
|
:= |
|
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
|
|
|
x0 |
|
y1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
x1 | ||||||||
y2 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
x2 | ||||||||
y3 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
x3 | ||||||||
y4 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
x4 | ||||||||
y5 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
x5 | ||||||||
y6 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
x6 | ||||||||
y7 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
x7 |
т.е. y0:=x1x2x3x4x5x6 и т.д. Значения можно последовательно вычислить как
y7:=x7x3; y6:=x6x2; y5:=x5x1; y4:=x4x0;
y3:=x3x5; y2:=x2x4; y1:=x1x7; y0:=x0x6;
y7:=y7y2; y6:=y6y1; y5:=y5y0; y4:=y4y3;
y3:=y3y7; y7:=y2y6; y1:=y1y5; y0:=y0y4.
Раундовая функция , зависящая от ‑байтового аргумента и 16‑байтового аргумента , определяется как:
,
где и – левая и правая половины .
Вычисление раундовых подключей. В алгоритме используются шестнадцать ‑байтовых раундовых подключей , ,…, , формируемых на основе секретного ключа К с использованием функции от ‑байтового аргумента и ‑байтового аргумента , возвращающей вектор с ‑байтовыми компонентами и и ‑байтовым компонентом .
Представим , и в виде массивов ‑байтовых подблоков , и :
, , ;
Тогда значения , и , возвращаемые функцией , вычисляются следующим образом:
for i:=0 to 3 do Yi:=P(S(Xi));
L0:=Y0P(S(U));
for i:=0 to 3 do Li:=P(S(Li-1));
V:=L3.
Предполагается, что секретный ключ имеет длину в битов и представлен в виде четырёх ‑байтовых подблоков, т.е. . Если – ‑битовый ключ, то его расширяют, полагая , , где – ‑байтовая константа (−левый байт); если – ‑битовый ключ, то полагают .
В алгоритме формирования ‑байтовых раундовых подключей используется массив , с ‑байтовыми компонентами :
U:=g; (L,Y,U):=G(K,U); p:=0;
for i:=0 to 7 do
{(L,Y,U):=G(Y,U); (q4i,q4i+1,q4i+2,q4i+3):=L};
for i:=0 to 7 do
Алгоритм зашифрования
Вход: – -битовый блок открытых данных, представленный в виде конкатенации ‑байтовых подблоков и .
(Начальное преобразование.)
M:=BP((Mk13)k14);
(12 раундов шифрования по схеме Фейстеля.)
for i:=1 to 11 do {L:=LF(R,ki); L↔R};
L:=LF(R,k12);
(Заключительное преобразование.)
C:=(BP-1(M)k15)k16.
Выход: – -битовый блок шифртекста.
Алгоритм расшифрования
Для расшифрования используется тот же алгоритм, что и для зашифрования, но последовательность раундовых подключей ,, …,,,,,преобразуется к виду:,, …,,,,,.
Таблица 1. Подстановка S в E2
225 |
66 |
62 |
129 |
78 |
23 |
158 |
253 |
180 |
63 |
44 |
218 |
49 |
30 |
224 |
65 |
204 |
243 |
130 |
125 |
124 |
18 |
142 |
187 |
228 |
88 |
21 |
213 |
111 |
233 |
76 |
75 |
53 |
123 |
90 |
154 |
144 |
69 |
188 |
248 |
121 |
214 |
27 |
136 |
2 |
171 |
207 |
100 |
9 |
12 |
240 |
1 |
164 |
176 |
246 |
147 |
67 |
99 |
134 |
220 |
17 |
165 |
131 |
139 |
201 |
208 |
25 |
149 |
106 |
161 |
92 |
36 |
110 |
80 |
33 |
128 |
47 |
231 |
83 |
15 |
145 |
34 |
4 |
237 |
166 |
72 |
73 |
103 |
236 |
247 |
192 |
57 |
206 |
242 |
45 |
190 |
93 |
28 |
227 |
135 |
7 |
13 |
122 |
244 |
251 |
50 |
245 |
140 |
219 |
143 |
37 |
150 |
168 |
234 |
205 |
51 |
101 |
84 |
6 |
141 |
137 |
10 |
94 |
217 |
22 |
14 |
113 |
108 |
11 |
255 |
96 |
210 |
46 |
211 |
200 |
85 |
194 |
35 |
183 |
116 |
226 |
155 |
223 |
119 |
43 |
185 |
60 |
98 |
19 |
229 |
148 |
52 |
177 |
39 |
132 |
159 |
215 |
81 |
0 |
97 |
173 |
133 |
115 |
3 |
8 |
64 |
239 |
104 |
254 |
151 |
31 |
222 |
175 |
102 |
232 |
184 |
174 |
189 |
179 |
235 |
198 |
107 |
71 |
169 |
216 |
167 |
114 |
238 |
29 |
126 |
170 |
182 |
117 |
203 |
212 |
48 |
105 |
32 |
127 |
55 |
91 |
157 |
120 |
163 |
241 |
118 |
250 |
5 |
61 |
58 |
68 |
87 |
59 |
202 |
199 |
138 |
24 |
70 |
156 |
191 |
186 |
56 |
86 |
26 |
146 |
77 |
38 |
41 |
162 |
152 |
16 |
153 |
112 |
160 |
197 |
40 |
193 |
109 |
20 |
172 |
249 |
95 |
79 |
196 |
195 |
209 |
252 |
221 |
178 |
89 |
230 |
181 |
54 |
82 |
74 |
42 |
Гафаров
IDEA
Криптоалгоритм IDEA (International Data Encryption Algorithm), авторами которого являются сотрудники Швейцарского федерального института технологий Xuejia Lai и James Massey, шифрует 64‑битовые блоки открытых данных под управлением 128-битового секретного ключа.
IDEA не является шифром Фейстеля, но это симметричный шифр: алгоритм расшифрования идентичен алгоритму зашифрования (после определенного преобразования раундовых подключей). Общая схема алгоритма, состоящего из 8 раундов шифрования, представлена на рис.1. Основная идея конструкции – смешивание операций различных алгебраических групп.
В алгоритме используются операции над 16-битовыми подблоками (неотрицательными целыми числами) А и В:
АÅВ – побитовое сложение по модулю 2;
А+В – сложение по модулю 216;
А·В – умножение по модулю 216+1;
Замечание. При выполнении операции умножения нулевой блок отождествляется с числом 216. Таким образом, операция умножения – это умножение в мультипликативной группе Z*216+1={1,2,…,216} целых чисел по модулю 216+1, а операция сложения – это сложение в аддитивной группе Z216={0,1,…,216-1} целых чисел по модулю 216. Обозначим через элемент, обратный к Х относительно сложения, а черезY-1 – элемент, обратный к Y относительно умножения по модулю 216+1:
Х+=0,Y·Y-1=1.
Отметим, что
= |
0, если Х=0; | |
(216-1)-(Х-1), если Х¹0, |
или =not (Х-1), где not a – побитовое отрицание а. Значение Y-1 можно вычислить, используя следующее соотношение, вытекающее из Малой теоремы Ферма:
Y-1= Y216-1 mod 216+1.
Отметим также, что а·0=0·а=not (a+2) mod 216; если a,b>0, то
а·b= |
(ab mod 216)-(ab div 216), если ab mod 216³ab div 216; | |
(ab mod 216)+216+1-(ab div 216), если ab mod 216<ab div 216. |
В алгоритме используются следующие преобразования над 64‑битовым блоком М=(М1,М2,М3,М4), представленным в виде четырех 16‑битовых подблоков М1, М2, М3 и М4, под управлением 16‑битовых ключей Q1,…,Q6 (далее X1, X2, Y1, Y2, Z1, Z2 – вспомогательные 16‑битовые переменные):
E1(M,Q1,Q2,Q3,Q4)º{M:=(M1·Q1,M2+Q2,M3+Q3,M4·Q4)};
E2(M,Q5,Q6)º{X1:=M1ÅM3; X2:=M2ÅM4;
Y1:=X1·Q5; Y2:=X2+X1·Q5);
Z1:=Y2·Q6; Z2:=Y1+Y2·Q6);
M:=MÅ(Z1,Z2,Z1,Z2); M2«M3}.
Обратные преобразования, возвращающие блок М к исходному значению, имеют следующий вид:
Е1-1(М,Q1,Q2,Q3,Q4)ºE1(M,Q1-1,,,Q4-1);
E2-1(M,Q5,Q6)º{X1:=M1ÅM2;X2:=M3ÅM4;
Y1:=X1·Q5; Y2:=X2+(X1·Q5);
Z1:=Y2·Q6; Z2:=Y1+(Y2·Q6);
M2«M3; M:=MÅ(Z1,Z2,Z1,Z2)}.
Отметим, что E2-1(M,Q5,Q6)º{M2«M3;E2(M,Q5,Q6); M2«M3}.
В алгоритме зашифрования (расшифрования) используются 52 раундовых подключей k1,…,k52, формируемых на основе 128‑битового секретного ключа К: k1 равен первым (наиболее значимым) 16 битам ключа K, k2 – следующим 16 битам, k8 – последним 16 битам; затем ключ K циклически сдвигается влево на 25 битов и создаются восемь следующих подключей – k9 ,…, k16. Эта процедура повторяется, пока не будут получены все 52 подключа.