
- •Содержание
- •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
Алгоритм зашифрования
Вход: Р – 64‑битовый блок открытых данных в виде четырех 16‑битовых подблоков P1, P2, P3, P4.
(8 раундов зашифрования.)
for i:=0 to 7 do {
E1(P,k6i+1,k6i+2,k6i+3,k6i+4); E2(P,k6i+5,k6i+6)};
(Выходное преобразование.)
P2«P3; E1(P,k49,k50,k51,k52).
Выход: Р – 64‑битовый блок шифртекста.
Таблица 1.Расписание использования раундовых подключей в IDEA
Раунд |
Зашифрование |
Расшифрование |
1 |
K1K2K3K4K5K6 |
|
2 |
K7K8K9K10K11K12 |
|
3 |
K13K14K15K16K17K18 |
|
4 |
K19K20K21K22K23K24 |
|
5 |
K25K26K27K28K29K30 |
|
6 |
K31K32K33K34K35K36 |
|
7 |
K37K38K39K40K41K42 |
|
8 |
K43K44K45K46K47K48 |
|
Выходное преобразование |
K49K50K51K52 |
|
Алгоритм расшифрования
При расшифровании обратные преобразования выполняются в обратном порядке, а именно:
E1(P,
,
,
,
);
P2«P3;
for i:=7 downto 0 do {
P2«P3; E2(P, k6i+5, k6i+6); P2«P3;
E1(P,
,
,
,
)}.
Поскольку результаты применения к блоку Р преобразований {P2«P3; E1(P, Q1, Q2, Q3, Q4); P2«P3} и E1(P, Q1, Q2, Q3, Q4) совпадают, то алгоритм расшифрования приводится к виду:
E1(P,
,
,
,
);
E2(P, k47, k48);
for i:=0 to 6 do {
E1(P,
,
,
,
);
E2(P,
k47-6i,
k48-6i)};
P2«P3;
E1(P,
,
,
,
).
Сравнивая алгоритмы, нетрудно убедиться в том, что для зашифрования и расшифрования может быть использован один и тот же алгоритм. Различие в использовании раундовых подключей отражено в таблице 1.
Рис.1. Структура алгоритма IDEA
голубкова
Loki 91 и 97.
LOKI 91. Криптоалгоритм LOKI 91, авторами которого являются L.Brown, M.Kwan, J.Pieprzyk и J.Seberry (Австралия), шифрует 64‑битовые блоки открытых данных под управлением секретного ключа такого же размера.
Блок
и ключ
,
разделенные на 32‑битовые половины
,
и
,
,
проходят
раундов криптографического преобразования
по схеме Фейстеля . Схема первых двух
раундов представлена на рис.
1.
Рис. 1. Цикл (два раунда) в LOKI‑91
Раундовая
функция ,
от
‑битового
аргумента
,
возвращающая
‑битовое
значение
,
является композицией следующих
преобразований
,
и
.
-преобразование.
Блок
(
−
старший бит) расширяется до
битов, образуя четыре
-
битовых подблока
,
,
и
в соответствии с табл.
1.
Таблица 1. Перестановка с расширением в LOKI 91
3 |
2 |
1 |
0 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Подблок
образуют биты
,
,
,
,
,…,
24
блока
и т.д.
-преобразование.
Каждый из подблоков
,
,
,
преобразуется в байты
,
,
,
по правилу:
два старших и два младших бита подблока
задают число
,
,…,
,
а восемь внутренних битов – число (байт)
,
,…,
},
,
,
,
.
Отметим попутно, что значения
и
можно вычислить, не прибегая к использованию
-преобразования
по формулам:
,
,
,
));
,
,
,
.
Байты
вычисляются теперь по правилу:
,
,
,
,
.
причем,
в данном случае байты интерпретируются
как элементы конечного поля ,
а коэффициенты неприводимых многочленов
‑ой
степени
,…,
определяющих конкретную реализацию
конечного поля, задаются табл. 2 (набор
коэффициентов многочлена
)
представлен в 16‑ичной записи; например,
следует понимать как
,
поскольку
.
Таблица
2. Многочлены,
определяющие реализации конечного поля
в LOKI
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
‑преобразование.
‑битовый
блок
(
– старший байт), полученный в результате
‑преобразования,
подвергается операции перестановки
битов соответствии с табл.
3: в позицию i
перемещается бит из позиции
,
(биты
и
остаются на месте).
Таблица 3. Перестановка P в LOKI
31 |
23 |
15 |
7 |
30 |
22 |
14 |
6 |
29 |
21 |
13 |
5 |
28 |
20 |
12 |
4 |
27 |
19 |
11 |
3 |
26 |
18 |
10 |
2 |
25 |
17 |
9 |
1 |
24 |
16 |
8 |
0 |
В
алгоритме зашифрования используются
‑битовые
раундовые подключи
,
,…,
,
генерируемые на основе секретного ключа
по правилу:
Алгоритм зашифрования
Вход:
–
‑битовый
блок открытых данных.
Выход:
–
‑битовый
блок шифртекста.
Алгоритм
симметричен, т.е. может быть использован
и для расшифрования, но раундовые
подключи необходимо использовать в
обратном порядке: ,
,…,
.
∎
LOKI 97. Криптоалгоритм LOKI 97, авторами которого являются Lawrie Brown и Josef Pieprzyk (Австралия), шифрует 128‑битовые блоки открытых данных под управлением 256-битового секретного ключа (более короткие – 128‑ и 192‑битовые ключи – расширяются до длины 256 специальной процедурой).
Схема зашифрования, состоящая из 16 раундов криптографического преобразования представлена на рис. 2.
Раундовая нелинейная функция f (A,B) от 64‑битовых аргументов А и В, возвращающая 64‑битовое значение (блок) С, является суперпозицией функции KP, E, Sa и Sb (далее X.L и X.R обозначают соответственно левую (старшую) и правую (младшую) половины 64‑битового блока Х):
С=f(A,B)=Sb(P(Sa(E(KP(A,B.R)))),B.L).
Функции KP, E, Sa, Sb определяются следующим образом.
Функция (перестановка) KP(А,В) возвращает 64‑битовое значение C:
C.L:=(A.L&¬B.R)Ú(A.R&B.R);
C.R:=(A.R&¬B.R)Ú(A.L&B.R).
Функция (перестановка с расширением) E (А) возвращает 96‑битовое значение D, формируемое следующим образом: если A=а63а62…a0 и D=d95d94…d0 (a63 и d95 – старшие биты), то d95:=a4, d94:= a3,… и т.д. согласно табл. 4.
Таблица 4. Перестановка с расширением P в LOKI 97
4 |
3 |
2 |
1 |
0 |
63 |
62 |
61 |
60 |
59 |
58 |
57 |
56 |
58 |
57 |
56 |
55 |
54 |
53 |
52 |
51 |
50 |
49 |
48 |
52 |
51 |
50 |
49 |
48 |
47 |
46 |
45 |
44 |
43 |
42 |
41 |
40 |
42 |
41 |
40 |
39 |
38 |
37 |
36 |
35 |
34 |
33 |
32 |
34 |
33 |
32 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Функция Sa(D) от 96‑битового аргумента D возвращает 64‑битовое значение, формируемое следующим образом. Представим блок D в виде конкатенации 13‑ и 11‑битовых подблоков D7(13), D6(11), D5(13), D5(13), D4(11), D3(13), D2(11), D1(13), D0(11) (верхний индекс обозначает разрядность подблока; D7(13) образован 13 старшими битами блока D, D6(11) следующими 11 битами и т.д.). Преобразуем подблоки Di(13) с нечетными индексами по правилу:
Di(13):=(Di(13))3,
Интерпретируя 13‑битовые подблоки как элементы конечного поля F213@F2[x]/p13(x), где p13(x)=x13+x11+x8+x4+1. Аналогично, подблоки Di(11) c четным нижним индексом преобразуем по тому же правилу, интерпретируя 11‑битовые подблоки как элементы конечного поля F211@F2[x]/p11(x), где p11(x)=x11+x9+x7+x5+x2+x+1. Далее блоки Di(j) превращается в байты bi:
for i:=0 to 7 do bi:=byte(Di(j) &$ff)
(т.е. в каждом подблоке берутся 8 младших битов). Результатом функции Sa(D) является 64‑битовой блок, составленный из байтов b7,b6,…,b0 (b7 – старший байт).
Таблица 5. Перестановка P в LOKI 97
56 |
48 |
40 |
32 |
24 |
16 |
8 |
0 |
57 |
49 |
41 |
33 |
25 |
17 |
9 |
1 |
58 |
50 |
42 |
34 |
26 |
18 |
10 |
2 |
52 |
51 |
43 |
35 |
27 |
19 |
11 |
3 |
60 |
52 |
44 |
36 |
28 |
20 |
12 |
4 |
61 |
53 |
45 |
37 |
29 |
21 |
13 |
5 |
62 |
54 |
46 |
38 |
30 |
22 |
14 |
6 |
63 |
55 |
47 |
39 |
31 |
23 |
15 |
7 |
Функция P(X) от 64‑битового аргумента X возвращает 64‑битовое значение, являющееся перестановкой битов блока X согласно табл. 5 (бит 63 перемещается в позицию 56, бит 62 – в позицию 48 и т.д.).
Функция Sb(X,Y) от 64‑битовых аргумента X=х63х62…х0, и 32‑битового аргумента Y=y31y30…y0 возвращает 64‑битовое значение Z, формируемое следующим образом. Определим 11‑ и 13‑битовые блоки Gi(j), полагая
G7(11):=(31–29
63–56)3;
G6(11):=(28–26
55–48)3;
G5(13):=(25–21
47–40)3;
G4(13):=(20–16
39–32)3;
G3(11):=(15–13
31–24)3;
G2(11):=(12–10
23–16)3;
G1(13):=(
9– 5
15– 8)3;
G0(13):=(
4– 0
7– 0)3,
где
сокращенная запись (31–29
63–56) обозначает 11‑битовый подблок,
формируемый из битов y31,
y30,
y29,
x63,
x62,
x61,
x60,
x59,
x58,
x57,
x56,
а возведение в кубическую степень
осуществляется для 11‑ и 13‑битовых
подблоков соответственно в конечных
полях F211
и F213.
Значение Z=Sb(X,Y)
формируется из байтов bi:
for i:=7 downto 0 do bi:=byte(Gi(j)&$ff),
(b7 – старший байт).
Рис. 2. Схема зашифрования LOKI 97
Генерация
раундовых подключей. 256‑битовый
секретный ключ K
представляется в виде массива (K3,K2,K1,K0)
из четырех 64‑битовых подблоков. Для
192‑битового ключа K=(K3,K2,K1)
полагаем K0=f(K3,K2),
а для 128‑битового ключа K=(K3,K2)
полагаем K1=f(K2,K3),
K0=f(K3,K2).
В алгоритме зашифровании используются
48 64‑битовых раундовых подключей kеi,
,
которые генерируются по правилу:
for i:=0 to 47 do {
kеi:=K3⊕gi(K0,K2,K1); K3:=K2; K2:=K1; K1:=K0; K0:=kеi}.
Функция gi определена как
gi(A,B,C)=f(A⊞B⊞(d⊡(i+1)),C),
где
d=$9e3779b97f4a7c15
– 16‑ичное представления целой части
,
символы⊞
и ⊡
обозначают соответственно сложение и
умножение по модулю 264.
Алгоритм зашифрования
Вход: P=L||R – 128‑битовый блок открытых данных, представленный в виде конкатенации 64‑битовых подблоков L и R.
for i:=0 to 7 do {
R:=R⊞kе6i; L:=L⊕f(R,kе6i+1); R:=R⊞kе6i+2;
L:=L⊞kе6i+3 ; R:=R⊕f(L,kе6i+4); L:=L⊞kе6i+5};
L«R.
Выход: C=R||L – 128‑битовый блок шифртекста.
Алгоритм расшифрования аналогичен алгоритму зашифрования: различие лишь в том, что операция ⊞ заменяется на ⊟ (вычитание по модулю 264), а последовательность раундовых подключей используется в обратном порядке.
данкович