
- •Введение
- •Глава 1. Основные понятия и определения
- •1.1. Основные понятия
- •1.2. Типы атак
- •1.3. Параметры симметричных шифров
- •1.4. Режимы шифрования
- •1.4.1 Режим кодовой книги (ECB)
- •1.4.2 Режим с зацеплением блоков (CBC)
- •1.5. Принципы построения шифров
- •Глава 2. Исторические шифры
- •2.1. Шифры перестановки
- •Пример (шифр Древней Спарты)
- •2.2. Шифры замены (подстановки)
- •2.2.1 Шифры простой замены
- •Пример (шифр Юлия Цезаря)
- •Пример (аффинное преобразование)
- •2.2.2 Многосимвольный подстановочный шифр
- •Пример (шифр Playfair, изобретенный в 1854 году)
- •2.2.3 Шифры гомоморфной замены
- •Глава 3. Сети Файстела и другие шифры
- •3.1. Сети Файстела (Feistel)
- •3.2. Шифр Люцифер
- •3.3. Алгоритм DES
- •3.3.1 Слабые и полу-слабые ключи в DES
- •3.3.2 Использование метода разностного криптоанализа для DES
- •3.4. Алгоритм шифрования FEAL
- •Основные различия между DES и ГОСТ
- •3.6. Алгоритм IDEA
- •3.7. Алгоритм Blowfish
- •Подключи
- •Шифрование и дешифрация
- •Генерирование множеств подключей
- •3.8. Алгоритм RC5
- •Глава 4. AES-кандидаты
- •4.1. Алгоритм MARS
- •Первый этап: прямое перемешивание
- •"Криптографическое ядро"
- •Обратное перемешивание
- •Процедура генерации ключей
- •Построение S-box
- •4.2. Алгоритм RC6
- •Генерация ключей
- •4.3. Алгоритм Serpent
- •Создание S-box
- •Линейное преобразование
- •Генерация ключей
- •4.4. Алгоритм Rijndael
- •1. Побайтовая подстановка
- •2. Сдвиг по строке
- •3. Побайтовая перестановка внутри столбцов
- •4. Сложение с ключом, используемым на данном этапе
- •Процедура получения ключей для каждого этапа алгоритма шифрования
- •Алгоритм расширения ключа
- •4.5. Алгоритм Twofish
- •Функция
- •Преобразование
- •Генерация ключей
- •Функция
- •Функция генерации ключей
- •Примечание
- •Литература
- •Приложение 1. S-box шифра MARS.
- •Начальная перестановка НП:
- •Конечная перестановка КП:
- •S-box, используемые при шифрации:
- •S-box, используемые при дешифрации:

45
Информационный блок на входе и шифрограмма на выходе алгоритма Rijndael могут быть представлены как одномерные массивы, элементами которых являются байты, пронумерованные от 0
до 4 Nb −1. Таким образом, эти блоки имеют длину 16, 24 или 32 байта, и значения индексов
лежат в диапазоне 0, ..., 15; 0, ..., 23 или 0, ..., 31. Ключ, используемый в алгоритме шифрования, представляет собой одномерный массив, элементами которого являются байты, пронумерованные
от 0 до 4 Nk −1 . Таким образом, блок ключа имеет длину 16, 24 или 32 байта, и значения индек-
сов лежат в диапазоне 0, ..., 15; 0, ..., 23 или 0, ..., 31.
Байты шифруемой информации ("исходного текста") записываются в байты состояния в следующем порядке: a0,0 , a1,0 , a2,0 , a3,0 , a0,1 , a1,1 , a2,1 , a3,1 , a0,2 , ..., и байты ключа шифрования записываются в соответствующий массив как k0,0 , k1,0 , k2,0 , k3,0 , k0,1 , k1,1 , k2,1 , k3,1 , k0,2 , ... . По окончании процесса шифрования результирующие байты состояния переписываются в шифрограмму в таком же порядке. Таким образом, если индекс байта в одномерном массиве равен n , а соответствующий индекс в двумерном массиве — (i, j) , то
i = n mod 4 ; j = n / 4 ; n = i + 4 j .
Количество этапов (циклов) алгоритма |
Nr зависит от величин Nb и Nk и определяется в соот- |
|||||
ветствии с Табл. 4.1. |
|
|
|
|
||
|
|
|
|
|
|
|
|
Nr |
|
Nb = 4 |
Nb = 6 |
Nb = 8 |
|
|
|
|
|
|
|
|
|
Nk = 4 |
|
10 |
12 |
14 |
|
|
|
|
|
|
|
|
|
Nk = 6 |
|
12 |
12 |
14 |
|
|
|
|
|
|
|
|
|
Nk = 8 |
|
14 |
14 |
14 |
|
|
|
|
|
|
|
|
Табл. 4.1. Количество циклов Nr как функция от длины информационного блока и длины ключа.
На каждом этапе алгоритма выполняется четыре различные преобразования информационного блока:
•Побайтовая подстановка;
•Сдвиг по строке;
•Побайтовая перестановка внутри столбцов;
•Сложение информационного блока и ключа, используемого на данном этапе. На последнем этапе выполняются лишь три преобразования:
•Побайтовая подстановка;
•Сдвиг по строке;
•Сложение информационного блока и ключа, используемого на данном этапе. Опишем каждое из перечисленных преобразований.
1.Побайтовая подстановка
Выполняется процедура нелинейной подстановки байтов, осуществляемая независимо для каждого байта из информационного блока. Таблица подстановок (S-box) является обратимой и генерируется с использованием двух преобразований:
1. Сначала для каждого элемента матрицы состояния используется функция инвертирования по умножению в поле GF(28) с порождающим многочленном m(x) = x8 + x4 + x3 + x +1, то есть элемент матрицы состояния ai, j , являющийся байтом, а значит, представимый как не-
который элемент поля GF(28) — αi заменяется на α−i , при этом нулевой элемент отображается в себя.
2. Затем используется аффинное преобразование в GF(2), определяемое соотношением:

46
y0 |
|
1 0 0 0 1 1 1 1 |
x0 |
|
1 |
||||||
y |
|
1 1 0 0 0 1 1 1 |
x |
|
1 |
||||||
|
1 |
|
|
|
|
|
|
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 |
||||
|
|
|
|
|
0 |
|
|
|
|
|
|
y5 |
|
0 1 1 1 1 1 |
0 |
x5 |
|
1 |
|||||
y |
6 |
|
0 0 1 1 1 |
1 |
1 |
0 |
x |
6 |
|
1 |
|
|
|
|
|
1 |
|
|
|
|
|
||
y7 |
0 0 0 1 1 1 |
1 |
x7 |
0 |
Обратное преобразование в побайтовой подстановке выполняется в соответствии с обратным аффинным преобразованием и таблицей обратных по умножению элементов поля GF(28).
2. Сдвиг по строке
В этом преобразовании байты в строках информационной матрицы циклически сдвигаются на различное количество разрядов. Строка с индексом 0 — не сдвигается, строка с индексом 1 —
сдвигается на C1 байт, строка с индексом 2 — на C2 , строка с индексом 3 — на C3 байт. Значения C1 , C2 , C3 для различных длин информационных блоков Nb представлены в Табл. 4.2.
Nb |
C1 |
C2 |
C3 |
|
|
|
|
4 |
1 |
2 |
3 |
|
|
|
|
6 |
1 |
2 |
3 |
|
|
|
|
8 |
1 |
3 |
4 |
|
|
|
|
Табл. 4.2. Величина сдвига для различных длин информационных блоков.
При обратном преобразовании последние три строки циклически сдвигаются соответственно на Nb −C1 , Nb −C2 и на Nb −C3 байт, таким образом, байт, находящийся на позиции j в строке i
переместится на позицию ( j + Nb −Ci ) mod Nb .
3. Побайтовая перестановка внутри столбцов
При этом преобразовании столбцы информационной матрицы рассматриваются как многочлены третьей степени с коэффициентами из GF(28) и перемножаются на специально выбранный много-
член c(x) по модулю x4 +1 ,
c(x) = '03' x3 + '01' x2 + '01' x + '02' ,
здесь и далее в описании алгоритма число в кавычках — элемент поля GF(28), представленный в шестнадцатеричной системе счисления.
То есть: '03' = 00000011; '01' = 00000001; '02' = 00000010.
Многочлен c(x) взаимно прост с x4 |
+1 , |
и таким образом, такая операция умножения обратима. |
|||||||
Это преобразование можно представить в матричной форме: b(x) = c(x) a(x) , |
|||||||||
b0 |
|
|
'02' |
'03' |
'01' |
'01' |
a0 |
|
|
b |
|
= |
'01' |
'02' |
'03' |
'01' |
a |
|
|
1 |
|
|
'01' |
'02' |
|
× |
1 |
|
|
b |
|
|
'01' |
'03' |
a |
2 |
|
||
2 |
|
|
|
'01' |
'01' |
|
|
|
|
b3 |
|
|
'03' |
'02' |
a3 |

47
Используя расширенный алгоритм Евклида, нетрудно определить многочлен d (x) — обратный к c(x) по умножению:
c(x) d (x) =1 mod x4 +1 ,
d(x) = '0B' x3 + '0D' x2 + '09' x + '0E' .
Таким образом, обратное преобразование осуществляется с помощью умножения каждого столбца на многочлен d (x) по модулю x4 +1 .
4. Сложение с ключом, используемым на данном этапе
a00 |
a01 |
a02 |
a03 |
a04 |
a05 |
|
k00 |
k01 |
k02 |
k03 |
k04 |
k05 |
|
b00 |
b01 |
b02 |
b03 |
b04 |
b05 |
|||||||||||||
a10 |
a11 |
a12 |
a13 |
a14 |
a15 |
|
k10 |
k11 |
k12 |
k13 |
k14 |
k15 |
= |
b10 |
b11 |
b12 |
b13 |
b14 |
b15 |
|||||||||||||
a |
20 |
a |
21 |
a |
22 |
a |
23 |
a |
24 |
a |
25 |
k |
20 |
k |
21 |
k |
22 |
k |
23 |
k |
24 |
k |
25 |
b |
b |
b |
b |
b |
b |
|||
|
|
|||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
21 |
22 |
23 |
24 |
25 |
|||||||||||||
a30 |
a31 |
a32 |
a33 |
a34 |
a35 |
|
k30 |
k31 |
k32 |
k33 |
k34 |
k35 |
|
b30 |
b31 |
b32 |
b33 |
b34 |
b35 |
Ключ, используемый на конкретном этапе, получается из основного ключа шифрования по специальной процедуре. Длина ключа для каждого этапа совпадает с длиной информационного блока
Nb . Обратное преобразование в данном случае просто совпадает с прямым преобразованием.
Процедура получения ключей для каждого этапа алгоритма шифрования
Ключи для каждого этапа алгоритма шифрования получаются из основного ключа в соответствии со специальной схемой, состоящей из двух компонент: расширение ключа и выбор ключа для конкретного этапа. При этом руководствуются следующими принципами:
•Общее количество бит в ключах для всех этапов совпадает со значением произведения длины информационного блока Nb 32 на количество этапов Nr , увеличенным на единицу (то есть в случае, если длина блока равна 128 бит и используется 10 циклов, потребуется 1408 бит для ключей циклов).
•Основной ключ расширяется до расширенного ключа.
•Ключи циклов берутся из этого расширенного ключа следующим образом: ключ для первого этапа состоит из первых Nb слов, для второго этапа используются следующие Nb слов, и так далее.
Алгоритм расширения ключа
Расширенный ключ — это одномерный массив, состоящий из четырехбайтных слов W [i], i =0,…, Nb (Nr +1) −1. Первые Nk слов содержат основной ключ, остальные слова получаются по рекуррентному алгоритму, зависящему от значения Nk — один вариант для Nk , меньшего или равного 6, второй — для Nk , большего 6.
Если Nk ≤ 6 , то
W [i] = (Key[4 i], Key[4 i +1], Key[4 i + 2], Key[4 i + 3]) для i = 0,…, Nk −1,
где Key[i] — соответствующие байты основного ключа.
Для остальных i = Nk , …, Nb (Nr +1) −1 расширенный ключ получается следующим образом: W[i] =W[i − Nk ] W[i −1], если i не кратно Nk ,
W[i] =W[i − Nk ] A , если i кратно Nk ,
где A получается из W [i −1] по следующему алгоритму: