- •Содержание
- •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
Noekeon
Криптоалгоритм Noekeon, авторами которого являются Joan Daemen, Michael Peeters, Gilles Van Assche и Vincent Rijmen (Бельгия), шифрует 128‑битовые блоки открытых данных под управлением секретного ключа такого же размера.
Блок шифруемых данных Р и секретный ключ К представляются в виде конкатенации четырех 32- битовых слов: P=Р0Р1Р2Р3 и K=K0K1K2K3. В алгоритме используется преобразования со следующими логическими операциями над 32‑битовыми словами a и b:
Øa – побитовое отрицание a;
a&b – побитовое умножение a и b;
aÚb – побитовая дизьюнкция a и b;
aÅb – побитовое сложение a и b по модулю 2;
shlna(shrna) – сдвиг a влево (право) на n позиций.
rolna(rorna) – циклический сдвиг a влево (право) на n позиций.
Преобразования q определяется как:
q(K,P)º{
t:=P0ÅP1; S(t); P1:=P1Åt; P3:=P3;
(Р0,Р1,Р2,Р3):=(Р0ÅK0,Р1ÅК1,Р2ÅК2,Р3ÅК3);
t:=P1ÅP3; S(t); P0:=P0Åt;P2:=P2Åt},
где
S(t)º{t:=+shr8t+shl8t}.
Обратное преобразование q-1, возвращающее P к исходному значению, задаётся следующим образом:
q-1(K,P)º{
t:=P1ÅP3; S(t); P0:=P0Åt;P2:=P2Åt;
(Р0,Р1,Р2,Р3):=(Р0ÅK0,Р1ÅК1,Р2ÅК2,Р3ÅК3);
t:=P0ÅP2; S(t); P1:=P1Åt;P3:=P3Åt}.
Отметим так же, что q-1(K,P)=q(K-1,P), где K-1 получается из K применением преобразования q с нулевым ключом, т.е. q(0,K).
Преобразования g, p1 и p2 определяются как
g(P)º{
P1:=P1ÅØ(P2P3);P0:=P0Å(P1&P3);
P0«P3;P2:=P0ÅP2ÅP3;
P1:=P1ÅØ(P2P3);P0:=P0Å(P1&P2)}.
p1(P)={rol1P1;rol5P2;rol2P3}.
p2(P)={rol1P1;rol5P2;rol2P3}.
Отметим, что g-1=g; p-1=p2, p-12=p1.
Алгоритм зашифрования
Вход: P – 128‑битовый блок открытых данных.
for i:=1 to R do {q(K,P); p1(P); g(P); p2(P)};
q(K,P).
Выход: P – 128‑битовый шифртекст. Стандартное число число раундов R=16.
Этот же алгоритм используется и для расшифрования, но при этом необходимо заменить либо q на q-1, либо K на K-1(одно из двух).
кадырова
Rijndael
– итеративный блочный шифр, авторами которого являются и (Бельгия), аббревиатура образована от имён авторов. Длины блока шифруемых данных и секретного ключа, под управлением которого осуществляется криптографическое преобразование, могут принимать независимо друг от друга значения , или битов.
Блок В=(b0,b1,…,bm-1) открытых данных, состоящих из , или байтов, в процессе криптографического преобразования представляется в виде матрицы (называемой состоянием), имеющей строки и столбцов. Аналогично, секретный ключ K=(k0,k1,…,kq-1), состоящий из , или байтов, представляется в виде матрицы, имеющей 4 строки и столбцов. Например, если и , то и представляются в виде матриц:
b00 |
b01 |
b02 |
b03 |
b04 |
b06 |
b0 |
b4 |
b8 |
b12 |
b16 |
b20 | ||||||
b10 |
b11 |
b12 |
b13 |
b14 |
b15 |
b1 |
b5 |
b9 |
b13 |
b17 |
b21 | ||||||
b20 |
b21 |
b22 |
b23 |
b24 |
b25 |
b2 |
b6 |
b10 |
b14 |
b18 |
b22 | ||||||
b30 |
b31 |
b32 |
b33 |
b34 |
b35 |
b3 |
b7 |
b11 |
b15 |
b19 |
b23 |
k00 |
k01 |
k02 |
k03 |
k0 |
k4 |
k8 |
k12 | ||||||
k10 |
k11 |
k12 |
k13 |
k1 |
k5 |
k9 |
k13 | ||||||
k20 |
k21 |
k22 |
k23 |
k2 |
k6 |
k10 |
k14 | ||||||
k30 |
k31 |
k32 |
k34 |
k3 |
k7 |
k11 |
k15 |
Другими словами, байты входного блока и ключа переписываются в соответствующие матрицы по столбцам. После завершения криптографического преобразования байты шифртекста получаются в том же порядке.
Число раундов шифрования зависит от длины блока и длины ключа и определяется следующей таблицей:
|
16, 16, 10 |
16, 24, 12 |
16, 32, 14 |
|
24, 16, 12 |
24, 24, 12 |
24, 32, 14 |
|
32, 16, 14 |
32, 24, 14 |
32, 32, 14 |
Например, если , , то .
На этапе предвычислений, предшествующему непосредственному шифрованию данных, секретный ключ преобразуется в расширенный ключ – последовательность раундовых подключей , ,…, , каждый из которых имеет такой же размер, что и блок данных.
Один раунд криптографического преобразования, кроме заключительного, состоит из следующих операций над состоянием State под управлением раундового подключа :
.
Последовательность этих операций обозначается как Round (State, RoundKey).
Заключительный раунд, обозначаемый как , отличается от тем, что операция в нем отсутствует. (Это делает всю последовательность операций зашифрования симметричной.)
(замена байтов). Данное преобразование представляет собой замену байтов, выполняемую независимо над каждым байтом состояния. При этом байты интерпретируются как элементы конечного поля ≅, где – неприводимый многочлен над показателя . Операция замены является подстановкой , , которая определяется как композиция следующих подстановок и на множестве :
(отметим, что ; если , то );
подстановка преобразует байт в байт (здесь , – биты в и ) по правилу:
y0 |
|
|
1 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
|
|
x0 |
|
⊕ |
|
1 |
| ||
y1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
x1 |
1 | ||||||||||
y2 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
x2 |
0 | ||||||||||
y3 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
x3 |
0 | ||||||||||
y4 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
x4 |
0 | ||||||||||
y5 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
x5 |
1 | ||||||||||
y6 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
x6 |
1 | ||||||||||
y7 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
x7 |
0 |
Замечание. Значение можно вычислить следующим образом:
где – циклический сдвиг байта влево на позиций, или
где () – сдвиг влево (вправо) на позиций.
Подстановки и задают взаимооднозначные отображения на множестве , причем – нелинейное, а – аффинное отображение. Подстановку полезно задать в виде таблицы
( , , …, ).
Отметим также, что
.
Таблица подстановки вычисляется следующим образом:
Операция, обратная к , заключающегося в замене каждого байта в на , обозначается как .
(сдвиг строк). Последние три строки State циклически сдвигаются влево соответственно на , , и байта. Величины сдвигов зависят от длины блока:
Например, для -байтового блока это преобразование выглядит следующим образом:
b00 |
b01 |
b02 |
b03 |
сдвига нет Þ |
b00 |
b01 |
b02 |
b03 | ||||
b10 |
b11 |
b12 |
b13 |
сдвиг на 1 Þ |
|
b11 |
b12 |
b13 |
b10 |
| ||
b20 |
b21 |
b22 |
b23 |
сдвиг на 2 Þ |
|
b22 |
b23 |
b20 |
b21 |
| ||
b30 |
b31 |
b32 |
b33 |
сдвиг на 3 Þ |
|
b33 |
b30 |
b31 |
b32 |
|
Операция, обратная к , возвращающая к исходному значению, обозначается как .
Операции и ShiftRow перестановочны:
.
(перемешивание столбцов). Матрица умножается слева на невырожденную циркулянтную матрицу:
|
a00 |
a01 |
a02 |
a03 |
$02 |
$03 |
$01 |
$01 |
. | |||||
a10 |
a11 |
a12 |
a13 |
$01 |
$02 |
$03 |
$01 | |||||||
a20 |
a21 |
a22 |
a23 |
$01 |
$01 |
$02 |
$03 | |||||||
a30 |
a31 |
a32 |
a33 |
$03 |
$01 |
$01 |
$02 |
Как и в случае , байты интерпретируются как элементы того же поля . В результате получает новое значение:
Обратная операция , возвращающая к исходному значению, реализуется путем умножения на матрицу , обратную к :
,
где
$0e |
$0b |
$0d |
$09 |
. | |||
$09 |
$0e |
$0b |
$0d | ||||
$0d |
$09 |
$0e |
$0b | ||||
$0b |
$0d |
$09 |
$0e |
AddRoundKey (добавление раундового подключа). К состоянию добавляется раундовый ключ :
посредством обычной побитовой операции ⊕ сложения по модулю . Операция инволютивна. Ее повторное применение возвращает к исходному значению.
Вычисление раундовых подключей.
В алгоритме зашифрования используются r+1 раундовых подключей, каждый из которых имеет такой же размер, что блок шифруемых данных. Для получения раундовых подключей на основе секретного ключа строится расширенный ключ:
,
состоящий из ‑байтовых слов . Раундовый ключ образует первые слов расширенного ключа, т.е.
;
следующие слов образуют ключ K1 и т.д. Так что:
Первые слов задаются секретным ключом , т.е.:
Остальные ключей вычисляются рекурсивно, исходя из слов с минимальными индексами:
.
В этом описании обозначает замену каждого байта в слове на байт (– подстановка, используемая в ), а – сдвиг слова влево на позиции: слово преобразуется в слово . Раундовые константы определяются как
где – элемент поля .
Алгоритм зашифрования
Вход: – блок открытых данных (в виде ).
Выход: – блок шифртекста (в виде ).
При расшифровании обратные операции выполняются в обратном порядке:
Алгоритм расшифрования
Вход: – блок шифртекста (в виде ).
.
Выход: – блок открытых данных ( в виде ).
Замечание. Определим преобразования и как
,
а последовательность раундовых подключей преобразуем в ,…,, где
.
Тогда алгоритм расшифрования преобразуется к виду:
колпаков