- •Содержание
- •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
TwoFish
Криптоалгоритм Twofish, авторами которого являются Bruce Schneider, John Kelsey, Doug Whiting, Chris Hall и Niels Ferguson (США), шифрует 128‑битовые блоки открытых данных под управлением секретного ключа, длина которого может составлять N=128, 192 или 256 битов (далее рассматривается случай N=128; более короткие ключи дополняются до требуемой длины нулями.) По своей структуре Twofish является классическим шифром Фейстеля. Рекомендуемое число раундов шифрования R=16.
Блок P шифруемых данных, являющийся массивом из шестнадцати байтов: P=(p0,p1,…,p15), представляется так же в виде четырёх 4‑байтовых слов P0,P1,P2 и P3 с прямым порядком байтов (little-endian), т.е.
Pi=p4i+p4i+128+p4i+2216+p4i+3224, i=0,1,2,3.
Далее заглавные буквы обозначают 4‑байтовые слова, а строчные – составляющие их байты. Например, Х=(х0,х1,х2,х3) – слово с байтами х0,х1,х2,х3, начиная с младшего.
В алгоритме используются следующие операции и преобразования:
XÅY – побитовое сложение X и Y по модулю 2;
X+Y – сложение X и Y по модулю 232.
rols(X) (rors(X)) – циклический сдвиг слова X на s битов влево (вправо)
Псевдоадамарово преобразование РНТ определяется как
РНТ(Х,У)º{X:=X+Y; Y:=X+Y.}
Функция MDS(X) возвращает значение Y, определяемое как
y0 |
= |
$01 |
$ef |
$5b |
$5b |
= |
x0 |
, | ||||||
y1 |
$5b |
$ef |
$ef |
$01 |
|
x1 |
| |||||||
y2 |
$ef |
$5b |
$01 |
$ef |
|
x2 |
| |||||||
y3 |
$ef |
$01 |
$ef |
$5b |
|
x3 |
|
причем байты интерпретируются как элементы конечного поля F256@F2[х]/v(x), где v(x)=x8+x6+x5+x3+1 – примитивный многочлен 8‑ой степени над полем F2.
Функция R(X,Y) возвращает значения Z, определяемое как
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x0 |
| ||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x1 |
| ||
z0 |
= |
$01 |
$a4 |
$55 |
$87 |
$5a |
$58 |
$db |
$9e |
|
x2 |
, | ||||||
z1 |
$a4 |
$56 |
$82 |
$f3 |
$1e |
$c6 |
$68 |
$e5 |
x3 | |||||||||
z2 |
$02 |
$a1 |
$fc |
$c1 |
$47 |
$ae |
$3d |
$19 |
y0 | |||||||||
z3 |
$a4 |
$55 |
$87 |
$5a |
$58 |
$db |
$9e |
$e3 |
y1 | |||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
y2 |
| ||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
y3 |
|
причем в данном случае байты интерпретируются, как элементы конечного поля F256@F2[x]/w(x), где w(x)=x8+x6+x3+x2+1 – примитивный многочлен 8‑ой степени над полем F2.
Подстановки (перестановки) q0 и q1 заданы на множестве байтов. Для байта x значение y=qi[x], i=0,1, вычисляется по схеме:
(a,b):=(x div 16,x mod 16);
(c,d):=(aÅb,aÅ(b div 2)Å((8*b)mod 16)Å((8*a)mod 16));
(a,b):=(t0(i)[c],t1(i)[d]);
(c,d):=(aÅb,aÅ(b div 2)Å((8*b)mod 16)Å((8*a)mod 16));
(a,b):=(t2(i)[c],t3(i)[d]);
y:=16*b+a.
Здесь a,b,c,d – вспомогательные переменные (байты), а значения tj(i)[u] заданы следующей таблицей (в 16‑ичном представлении):
u |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
a |
b |
c |
d |
e |
f |
t0(0) |
8 |
1 |
7 |
d |
6 |
f |
3 |
2 |
0 |
b |
5 |
9 |
e |
c |
a |
4 |
t1(0) |
e |
c |
b |
8 |
1 |
2 |
3 |
5 |
f |
4 |
a |
6 |
7 |
0 |
9 |
3 |
t2(0) |
b |
a |
5 |
e |
6 |
d |
9 |
0 |
c |
8 |
f |
3 |
2 |
4 |
7 |
1 |
t3(0) |
13 |
7 |
f |
4 |
1 |
2 |
6 |
e |
9 |
b |
3 |
0 |
8 |
5 |
c |
a |
t0(1) |
2 |
8 |
b |
d |
b |
7 |
6 |
e |
3 |
1 |
9 |
4 |
0 |
a |
c |
5 |
t1(1) |
1 |
e |
2 |
b |
4 |
c |
3 |
7 |
6 |
d |
a |
5 |
f |
9 |
0 |
8 |
t2(1) |
4 |
c |
7 |
5 |
1 |
6 |
9 |
a |
0 |
e |
d |
8 |
2 |
b |
3 |
f |
t3(1) |
b |
9 |
5 |
1 |
c |
3 |
d |
e |
6 |
4 |
7 |
f |
2 |
0 |
8 |
a |
Функция h(X,Y,Z) возвращает значение W=MDS(U),где U=(u0,u1,u2,u3) определяется как:
u0:=q0[z0Åq1[y0Åq1[x0]]];
u1:=q1[z1Åq1[y1Åq0[x1]]];
u2:=q0[z2Åq0[y2Åq1[x3]]];
u3:=q1[z3Åq0[y3Åq0[x3]]].
Раундовая функция F[RK0,RK1,S0,S1](R0,R1) с 4‑байтовыми ключевыми параметрами RK0,RK1,S0 и S1 и аргументами R0 и R1 возвращает 4‑байтовые значения F0 и F1, определяемые как:
(F0,F1):=(h(R0,S0,S1),h(rol8(R1),S0,S1));
РНТ(F0,F1);
(F0,F1):=(F0+RK0,F1+RK1).
Вычисление раундовых подключей. На основе 16‑байтового секретного ключа K=(k0,k1,…,k15) вычисляются 4‑байтовые подключи S0 и S1, используемые в определении функции F и раундовые подключи K0,K1,…,K39 (для R‑раундового алгоритма необходимо 2R+8 подключей; здесь в качестве стандартного значения принято R=16):
for i:=0 to 3 do Mi=(k4i,k4i+1, k4i+2,k4i+3);
S0:=RS(M0,M1); S1:=RS(M2,M3);
(X,Y,Z):=(0,224+216+28+1,225+217+29+2);
for i:=0 to 19 do {
A:=h(X,M2,M0); B:=rol8(h(Y,M3,M1)); РНТ(A,B);
(K2i,K2i+1):=(A,rol9(B)); X:=X+Z; Y:=Y+Z}.