- •Введение
- •Глава 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, используемые при дешифрации:
44
{k0 , k1, k2 , k3} = S3{w0 , w1, w2 , w3} {k4 , k5 , k6 , k7 } = S2{w4 , w5 , w6 , w7 }
{k8 , k9 , k10 , k11} = S1{w8 , w9 , w10 , w11}
{k12 , k13 , k14 , k15} = S0{w12 , w13 , w14 , w15}
{k16 , k17 , k18 , k19 } = S7{w16 , w17 , w18 , w19 }
...
{k124 , k125 , k126 , k127 } = S4{w124 , w125 , w126 , w127 }
{k128 , k129 , k130 , k131} = S3{w128 , w129 , w130 , w131}
Из полученных таким образом k j и формируются 128-битные ключи Ki для каждого цикла алгоритма:
Ki = IP({k4i , k4i+1, k4i+2 , k4i+3}) , для i = 0,…, 31.
Таблицы перестановок для алгоритма Serpent приведены в Приложении 2.
4.4. Алгоритм Rijndael
Авторы: Джон Даймен (Joan Daemen), Винсент Риймен (Vincent Rijmen).
Rijndael — итеративный блоковый алгоритм с переменной длиной информационного блока и переменной длиной ключа. Длина информационного блока и длина ключа не зависят друг от друга и могут принимать значения 128, 192 или 256 бит.
При разработке алгоритма основное внимание уделялось решению следующих задач:
1.Устойчивость ко всем известным методам криптоанализа.
2.Скорость и независимость от платформы, на которой он будет реализован.
3.Простота и прозрачность алгоритма.
Преобразования, осуществляемые на каждом этапе в процессе выполнения алгоритма Rijndael, не являются структурой сетей Файстела, и представляют собой совокупность трех различных однотипных, обратимых преобразований: подстановки, перестановки и суммирования. Выбор преобразований во многом определяется так называемой стратегией широкого следа (Wide Trail Strategy) [Da95], обеспечивающей защиту от линейного и разностного криптоанализа.
Состоянием в Rijndael называется промежуточный результат процесса шифрования. Состояние можно представить как прямоугольный массив, элементами которого являются байты. В этом мас-
сиве имеется четыре строки, а число столбцов обозначается как Nb и равно длине информацион-
ного блока, деленной на 32 (Рис. 4.8). Ключ, используемый для шифрации, можно представить аналогичным образом в виде прямоугольного массива, имеющего четыре строки, число столбцов,
в котором обозначается как Nk и равно длине ключа, деленной на 32 (Рис. 2.21). В некоторых
случаях такие матрицы можно представить как одномерные массивы, элементами которых являются четырехбайтные вектора. Такие четырехбайтные вектора будем называть словами. При этом каждый такой вектор представляет собой соответствующий столбец из матричного представления. Такие одномерные массивы будут иметь длину соответственно 4, 6 или 8.
a0,0 |
a0,1 |
a0,2 |
a0,3 |
a0,4 |
a0,5 |
|
|
|
|
|
|
a1,0 |
a1,1 |
a1,2 |
a1,3 |
a1,4 |
a1,5 |
|
|
|
|
|
|
a2,0 |
a2,1 |
a2,2 |
a2,3 |
a2,4 |
a2,5 |
|
|
|
|
|
|
a3,0 |
a3,1 |
a3,2 |
a3,3 |
a3,4 |
a3,5 |
|
|
|
|
|
|
k0,0 |
k0,1 |
k0,2 |
k0,3 |
|
|
|
|
k1,0 |
k1,1 |
k1,2 |
k1,3 |
|
|
|
|
k2,0 |
k2,1 |
k2,2 |
k2,3 |
|
|
|
|
k3,0 |
k3,1 |
k3,2 |
k3,3 |
|
|
|
|
Рис. 4.8. Пример состояния (при Nb = 6 ) и ключа шифрования (при Nk = 4 ).