- •Содержание
- •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), а последовательность раундовых подключей используется в обратном порядке.
данкович