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

48
1. Слово W [i −1] циклически сдвигается влево понентное сложение по модулю
Ci / Nk = (RC[i / Nk ], '00' , '00' , '00' ) , где RC[
на один байт, после чего выполняется покомдва со специальной константой j] =α( j−1) , α — примитивный элемент поля
GF(28).
2. Использование преобразования побайтовой подстановки (S-box) к полученному результату. Если Nk > 6 , то дополнительно для случая, когда i −4 кратно Nk , блок W [i −1] подвергается преобразованию побайтовой подстановки (S-box) перед выполнением операции покомпонентного сложения по модулю два с блоком
Ключ для каждого этапа (цикла) алгоритма шифрования выбирается из соответствующего набора W [i]:
•Ключ для первого цикла ={W [0], W [1], W [2], W [3]},
•Ключ для второго цикла ={W [4], W [5], W [6], W [7]},
итак далее.
• Ключ для последнего, ( Nr +1)-го цикла = {W[Nb (Nr +1) −4], W[Nb (Nr +1) −3],
W[Nb (Nr +1) −2], W[Nb (Nr +1) −1]}.
Таким образом, общая схема алгоритма следующая:
•побитовое сложение по модулю два с ключом для первого цикла;
•Nr −1 циклов;
•заключительный цикл.
4.5.Алгоритм Twofish
Авторы: Брюс Шнаер (Bruce Schneier), Джон Келси (John Kelsey), Дуг Уайтинг (Doug Whiting), Дэвид Вагнер (David Wagner), Крис Холл (Chris Hall).
Twofish — итеративный блоковый алгоритм с длиной информационного блока 128 бит и длиной ключа 128, 192 или 256 бит.
Алгоритм построен практически по классической схеме сетей Файстела, единственным отличием является наличие в схеме блоков циклического сдвига на 1 бит, однако они могут быть легко внесены внутрь основного преобразования, задаваемого функцией F . На Рис. 4.9 представлена схема алгоритма Twofish.
Исходное сообщение разбивается на четыре 32-битных слова, которые на начальном этапе алгоритма складываются по модулю два с четырьмя 32-битными блоками ключа. Затем выполняется 16 циклов преобразований, в каждом из которых два левых слова используются как входные блоки для преобразования, задаваемого функцией g (одно из этих слов предварительно подвергается
циклическому сдвигу на 8 бит влево). Результаты, полученные после этих преобразований, используются в псевдоадамаровом преобразовании (ПАП), после чего выполняется сложение по модулю два с двумя 32-битными блоками ключа. На заключительном этапе происходит сложение по модулю два с соответствующими 32-битными блоками ключа. Используя формализованную запись, эти преобразования можно записать в следующей форме.
Пусть p0 , p1 , ..., p15 — байты 128-битного блока исходной информации, P0 , P1 , P2 , P3 — 32битные слова, составленные из блоков исходной информации:
3
Pi = ∑p4i+ j 28 j , i =0,…,3 j=0
Результат первоначального сложения с блоками ключа:
R0,i = Pi Ki , i =0,…,3

49
Рис. 4.9. Схема алгоритма Twofish.