- •Содержание
- •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:=Y0
P(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 подключа.
