
- •Введение
- •Глава 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, используемые при дешифрации:

35
Как хорошо видно из Рис. 4.1, алгоритм имеет три этапа:
1.Этап прямого перемешивания использует сложение по модулю 232 32-битных блоков исходного текста с блоками ключа с последующим трансформированием полученных результатов в восьми циклах сети Файстела, не использующих ключ.
2."Криптографическое ядро" шифра, состоящее из 16 циклов сети Файстела с использованием ключа.
3.На последнем этапе выполняются преобразования, обратные к преобразованиям первого этапа, при этом вместо сложения используется операция вычитания по модулю 232 блоков ключа из информационных блоков.
Первый этап: прямое перемешивание
Рис. 4.2. Структурная схема одного цикла, используемого на этапе прямого перемешивания.

36
Как видно из схемы на Рис. 4.2, каждый цикл прямого перемешивания состоит из двух раундов, а каждый раунд — из четырех фаз, таким образом, общее число фаз в одном цикле — 8. В каждой фазе один из 32-битных информационных блоков используется как основной, а остальные три — как вспомогательные. Если обозначить четыре байта информационного блока полученного после
сложения D[0] и K[0] как b0 , b1 , b2 , b3 (где b0 — младший байт, а b3 — старший), тогда b0 и b2 обрабатываются S-box S0 , а b1 и b3 — S-box S1 . S0[b0 ] складывается по модулю два с первым вспомогательным блоком, а затем результат складывается с S1[b1] по модулю 232. S0[b2 ] складывается по модулю 232 со вторым вспомогательным блоком, S1[b3 ] складывается по модулю два с
третьим вспомогательным блоком. Перед началом следующей фазы выполняется циклический сдвиг основного информационного блока на 24 бита вправо ( ЦСП( ,24) ) и для некоторых фаз
выполняется дополнительное суммирование по модулю 232 основного блока с одним из вспомогательных (для 1 и 4 фазы — с третьим, а для 1 и 5 фазы — с первым). После чего выполняется циклическое переприсвоение информационных блоков: основной блок становится третьим вспомогательным блоком, первый вспомогательный — основным блоком, и так далее — блок, бывший третьим вспомогательным, становится вторым вспомогательным блоком.
"Криптографическое ядро"
"Криптографическое ядро" алгоритма MARS представляет собой шестнадцать циклов сети Файстела (Рис. 4.3). На каждом цикле используется расширяющая функция E (Рис. 4.4), аргументами которой являются 32-битный информационный блок и соответствующие блоки ключа, а результатом — три 32-битных блока. В функции E используется расширяющая S-box, на вход которой поступают младшие 9 бит суммы, полученной в результате сложения по модулю 232 информационного блока и первого слова ключа. На выходе такой расширяющей S-box получается 32-битный блок. В двух случаях в функции циклического сдвига в качестве аргумента, указывающего, на сколько разрядов необходимо сдвинуть информационный блок, используются младшие 5 бит другого информационного блока.
Рис. 4.3. Один цикл "криптографического ядра".

37
Рис. 4.4. Функция E . |
Обратное перемешивание
Обратное перемешивание — аналогично прямому, за исключением порядка использования информационных блоков (Рис. 4.5).
Процедура генерации ключей
Процедура генерации ключей расширяет исходный массив ключа k[ ], содержащий n 32-битных слов (где n — любое число от 4 до 14) до массива K[ ] из 40 слов. Для алгоритма MARS такая процедура должна обеспечивать получение ключевых слов в массиве K[ ] , обладающих следующими свойствами:
•два младших бита в словах типа k' , используемых для умножения, должны быть равны нулю,
•ни одно из сгенерированных ключевых слов не должно содержать десяти или более подряд идущих 0 или 1.
Для выполнения этих требований используется следующая структура процедуры генерации ключей:
1.Первоначально исходный ключ k[ ] помещается во вспомогательный массив T[ ] , состоящий из 15 слов:
T[0,…,n −1] = k[0,…,n −1] , T [n] = n , T[n +1,…,14] = 0 .
2.Затем четыре раза выполняется следующая процедура, на каждом шаге которой вычисляются очередные десять слов расширенного ключа:
а) Массив T[ ] преобразуется с использованием следующей линейной функции:
для i = 0,…,14 , T[i] = T[i] ЦСП(T[i-7 mod 15] T[i-2 mod 15], 3) (4i + j) ,
где j — номер шага (то есть j = 0 на первом шаге, j =1 — на втором, и так далее).

38
Рис. 4.5. Структурная схема одного цикла, используемого на этапе обратного перемешивания.
б) После этого массив T[ ] преобразуется с использованием четырех циклов сети Файстела, то есть для каждого i = 0,1,…,14 четыре раза повторяется следующее преобразование:
T[i] = ЦСП((T[i] + S[младшие 9 бит слова T[i −1 mod 15]]), 9) ,
где S[ ] — расширяющая 9 ×12 S-box.
в) Затем первые десять слов массива T[ ] записываются в очередные десять слов расширенного ключа K[ ] :
K[10 j + i] = T[4i mod 15] , i = 0,1,…,9 , j — номер шага.