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

30
Сначала, 128-битная ключевая последовательность разбивается на 8 подключей по 16 бит. 6 из этих подключей используются для первого цикла, и два для второго цикла. Затем ключ сдвигается на 25 бит влево и снова делится на 8 подключей. Первые четыре используются во втором цикле; последние четыре используются в третьем цикле. Ключ сдвигается на 25 бит влево для получения следующих 8 подключей, и так до конца алгоритма.
Процесс дешифрации производится так же, за исключением того, что подблоки ключевой последовательности противоположны. Они представляют собой инверсии, либо по умножению, либо по сложению, подблоков ключевой последовательности, использовавшихся при шифровании. (В алгоритме IDEA инверсия 0 в операции умножения есть 0).
В Табл. 3.12 представлены подблоки ключевой последовательности для шифрования и дешифрации.
номер цикла |
подблоки ключа при шифровании |
подблоки ключа при дешифрации |
||||||||
1 |
Z1(1) Z2(1) Z3(1) Z4(1) |
Z5(1) Z6(1) |
Z1(9) –1 |
-Z2(9) |
-Z3(9) Z4(9) –1 Z5(8) Z6(8) |
|||||
2 |
Z1(2) Z2(2) Z3(2) Z4(2) |
Z5(2) Z6(2) |
Z1(8) –1 |
-Z2(8) -Z3(8) Z4(8) –1 Z5(7) Z6(7) |
||||||
3 |
Z1(3) Z2(3) Z3(3) Z4(3) |
Z5(3) Z6(3) |
Z1(7) –1 |
-Z2(7) -Z3(7) Z4(7) –1 Z5(6) Z6(6) |
||||||
4 |
Z1(4) Z2(4) Z3(4) Z4(4) |
Z5(4) Z6(4) |
Z1(6) –1 -Z2(6) |
-Z3(6) Z4(6) –1 Z5(5) |
Z6(5) |
|||||
5 |
Z1(5) |
Z2(5) Z3(5) Z4(5) |
Z5(5) Z6(5) |
Z1(5) –1 -Z2(5) -Z3(5) Z4(5) –1 Z5(4) Z6(4) |
||||||
6 |
Z1(6) |
Z2(6) |
Z3(6) |
Z4(6) |
Z5(6) |
Z6(6) |
Z1(4) –1 -Z2(4) |
-Z3(4) Z4(4) –1 Z5(3) |
Z6(3) |
|
7 |
Z1(7) |
Z2(7) |
Z3(7) |
Z4(7) |
Z5(7) |
Z6(7) |
Z1(3) –1 -Z2(3) |
-Z3(3) Z4(3) –1 Z5(2) |
Z6(2) |
|
8 |
Z1(8) |
Z2(8) |
Z3(8) |
Z4(8) |
Z5(8) |
Z6(8) |
Z1(2) –1 -Z2(2) -Z3(2) Z4(2) –1 Z5(1) Z6(1) |
|||
окончательное |
|
Z1(9) |
Z2(9) |
Z3(9) |
Z4(9) |
|
Z1(1) –1 -Z2(1) -Z3(1) Z4(1) –1 |
|
||
преобразование |
|
|
|
|
|
|
|
|
|
|
Табл. 3.12. Подблоки ключа алгоритма IDEA для шифрования и дешифрации
3.7. Алгоритм Blowfish
Blowfish — блоковый шифр, разработанный Брюсом Шнаером (Bruce Schneier) [Schn96] на базе сетей Файстела, который шифрует данные, разбитые на блоки по 8 байт. Алгоритм состоит из двух частей: построение совокупности ключей и шифрование данных. При построении ключей исходный ключ с произвольной длиной до 56 байтов (448 бит) преобразуется в несколько ключевых множеств общим объемом в 4168 байт.
Blowfish имеет 16 циклов. Каждый цикл состоит из перестановки, зависящей от ключа и подстановки, зависящей от ключа и от обрабатываемой информации. Все выполняемые операции — сложение по модулю два (XOR) и арифметическое сложение 32-битных слов. Единственные дополнительные действия — четыре индексированных массива для преобразования данных, которые используются в каждом цикле.
Подключи
Blowfish использует большое количество подключей. Они должны быть заранее вычислены перед началом шифрации или дешифрации данных.
Множество P состоит из 18 подключей, каждый из которых имеет длину в 32 бита: P1 , P2 , ..., P18 . Кроме того, имеются четыре 32-битные подстановочные матрицы (S-box) с 256 входами:
S1 ={S1.0 ,S1.1,…,S1.255};
S2 ={S2.0 , S2.1,…, S2.255};
S3 ={S3.0 , S3.1,…, S3.255};
S4 ={S4.0 , S4.1,…, S4.255}.

31
Шифрование и дешифрация
Рис. 3.12. Схема алгоритма Blowfish.
Blowfish имеет 16 циклов (Рис. 3.12). Входной блок X состоит из 64 бит. Этот блок делится на две половины X L , X R по 32 бита в каждой. Затем для i от 1 до 16 выполняются следующие преобразования:
X L = X L XOR Pi ,
X R = F(X L ) XOR X R ,
после чего X L и X R меняются местами.
После шестнадцатого цикла X L и X R снова меняются местами и выполняется последнее преобразование:
X R = X R XOR P17 ,
X L = X L XOR P18 .
Наконец, X L и X R объединяются с тем, чтобы получить зашифрованное сообщение.
Функция F выглядит следующим образом (Рис. 3.13): X L делится на четыре равные восьмибитные части: a , b , c , и d . Затем
F ( X L ) = ((((S1.a + S2.b ) mod 232 ) XOR S3.c ) + S4.d ) mod 232 .
Дешифрация выполняется так же, как и шифрование, только множества подключей P1 , P2 , ..., P18
используются в обратном порядке.