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

39
3.В заключение формируются шестнадцать слов типа k' расширенного ключа, используемых для умножения (это слова K[5] , K[7] , ..., K[35] ) так, чтобы они удовлетворяли бы пере-
численным выше свойствам. Заметим, что вероятность случайного получения слова, не удовлетворяющего второму свойству, составляет около 1/41. Процедура корректировки слов ключа K[i], i =5,7,…,35 выглядит следующим образом:
а) Два младших бита слова K[i] запоминаются в j ( j = K[i] AND 3 ), после чего из K[i] формируется слово w , в котором оба младших бита исправляются на 1 ( w = K[i] OR 3 ).
б) Формируется маска M = (m0 , m1,…, m31 ) из бит слова w , образующих последовательность из десяти или более подряд идущих нулей или единиц (то есть mi =1 тогда и
только тогда, когда в слове w на i -й позиции находится один из десяти (или более) подряд идущих нулей (или единиц). Далее полученное слово преобразуется следующим
образом: |
mi = 0 для |
всех i < 2 и i =31; |
mi = 0 , если не соблюдается условие: |
|
w = w −1 или w = w +1. Например, пусть |
w = 031130121011 (где 0i , 1i обозначает по- |
|||
i |
i |
i |
i |
|
следовательность из i |
подряд идущих 0 или 1). Тогда, сначала получим M = 0312504 , а |
|||
затем M = 041110011005 . |
|
в) Генерируется вспомогательное слово p . Создается массив B[ ] из четырех слов, кото-
рые выбираются из таблицы векторов, участвующих в формировании S-box (A4A8D57B, 5B5D193B, C8A8309B, 73F9A978). Эти слова обладают тем свойством, что никакой их циклический сдвиг не содержит более 6 последовательных нулей и более 9 последовательных единиц, кроме того, имеется всего 14 наборов из восьми бит, встречающихся дважды в этих словах (с учетом всех возможных их циклических сдвигов), и никакой 8- битный набор не встречается более двух раз. В таблице для S-box эти слова имеют порядковые номера с 265 по 268.
p = ЦСЛ(B[ j], младшие 5 бит слова K[i-1]) , где j определяется на шаге (а). г) Для получения окончательного результата используются w , p и M :
K[i] = w ( p AND M ) ,
при этом, учитывая предыдущие действия, гарантируется наличие единиц в двух младших разрядах слова K[i] и отсутствие в нем последовательностей из 10 или более 0 и 1.
Построение S-box
При построении используется "псевдослучайный" алгоритм, после чего проверяются разностные и линейные свойства полученных S-box. "Псевдослучайные" S-box получаются как соответствующие слова, полученные в результате использования хэш-функции SHA к фиксированным константам c1 , c2 : S[5i + j] = SHA(5i | c1 | c2 | c3 ) j , для i = 0,…,102 , j = 0,…,4 (где SHA( ) j означает
j -е слово из четырех, получаемых как результат хэш-функции); c1 = 7E15162 , c2 = 243F6A88, c3 изменяется до тех пор, пока не будет получена S-box с хорошими свойствами. В результате экспериментальных расчетов, проведенных авторами алгоритма в течение недели (было проверено более 226 возможных значений c3 ), в качестве подходящего было выбрано значение c3 = 02917D59 . S-box, используемые в алгоритме MARS, приведены в Приложении 1.
4.2. Алгоритм RC6
Авторы: Рональд Л.Ривест (Ronald L. Rivest), М.Дж.Б. Робшо (M.J.B. Robshaw), Р. Сидней (R. Sidney), и Й.Л.Йин (Y.L. Yin).
RC6 — итеративный блоковый алгоритм с переменной длиной информационного блока, переменным числом циклов и переменной длиной ключа. Алгоритм построен по классической схеме сетей Файстела. В общем случае авторы обозначили свой алгоритм как RC6- w / r / b , где w — размер

40
обрабатываемых алгоритмом блоков, r — число циклов, b — длина ключа. Согласно требованиям NIST длина обрабатываемых блоков в версии, предназначенной для будущего стандарта, составляет 32 бита, а длина ключа может быть 128, 192 или 256 бит. Алгоритм RC6- w / r / b с такими параметрами и с обозначается просто как RC6. Исходный информационный блок разбивается на четыре подблока a , b , c , d каждый длиной w = 32 , которые в процессе 20 циклов алгоритма преобразуются при участии блоков ключа с использованием следующих алгебраических операций:
a +b — сложение по модулю 2w , a −b — вычитание по модулю 2w , a b — сложение по модулю два, a b — умножение по модулю 2w ,
ЦСЛ(a,b) — циклический сдвиг слова a влево, на число позиций, определяемых младшими log2 (w) битами аргумента b ;
ЦСП(a,b) — циклический сдвиг слова a вправо, на число позиций, определяемых младшими log2 (w) битами аргумента b ;
Общая схема алгоритма приведена на Рис. 4.6.
Рис. 4.6. Шифрация алгоритмом RC6 (здесь f (x) = x(2x +1) ).