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

41
Генерация ключей
Процедура генерации ключей практически совпадает с процедурой, использовавшейся в предыдущем алгоритме — RC5 [Rivest95]. Единственным отличием является увеличение числа блоков ключа, получаемых из исходного ключа. Из исходного вектора ключа длиной до 255 бит получаются и запоминаются для дальнейшего использования в основном алгоритме 2r + 4 слов (по w бит в каждом). Первоначально массив из c слов L[0] , L[1], ..., L[c −1] длиной w бит каждый
заполняется битами исходного ключа, используемого в алгоритме шифрования (для RC6 w = 32 , длина исходного ключа — 128, 192 или 256 и, следовательно, c = 4 , 5 или 6 соответственно). Заполнение массива начинается с младших бит, то есть сначала заполняется L[0] , затем L[1], и так далее, при нехватке значащих бит в исходном ключе в массив L дописываются нули. Полученные в результате процедуры генерации ключи записываются в элементы массива S : S[0] , S[1], ..., S[2r + 3] . Формально процедуру генерации ключей можно описать следующим образом:
S[0] = P32 ; первоначальное заполнение массива S : S[i] = S[i −1] +Q32 , для i =1,…,2r + 3 ,
где P32 = B7E1516316 и Q32 = 9E3779B916 — такие же, как и в RC5. v = 3 max(c,2r + 4) , для RC6 v =132.
Окончательное трансформирование массива S происходит в результате v -кратного выполнения следующих преобразований при начальных условиях A = 0 , B = 0 , i = 0 , j = 0 :
S[i] = ЦСЛ(S[i] + A + B, 3) ; A = S[i] ; i = (i +1) mod (2r + 4) ; L[i] = ЦСЛ(L[ j] + A + B, ( A + B)) ; B = L[ j]; j = ( j +1) mod c .
4.3. Алгоритм Serpent
Авторы: Росс Андерсон (Ross Anderson), Эли Бихам (Eli Biham), Ларс Кнудсен (Lars Knudsen).
Serpent — итеративный блоковый алгоритм с длиной информационного блока 128 бит и длиной ключа 128, 192 или 256 бит [BiAnKn98]. Если длина ключа короче заданной фиксированной длины, то он дописывается следующим образом: в конец добавляется сначала 1, а затем записывается последовательность из 0. Алгоритм преобразует 128 бит исходного текста P в 128-битную шиф-
рограмму C , используя 32 цикла R0 ( ) , R1 ( ) , ..., R31 ( ) и 33 128-битных ключа K0 , K1 , ..., K32 . Авторы особо отмечают преемственность своего алгоритма и алгоритма DES, подчеркивая,
что в начальной версии, Serpent-1, использовались S-box из DES. Так же, как и в DES, алгоритм использует начальную перестановку НП и конечную перестановку КП, которая является обратной к НП. На Рис. 4.7 представлена общая схема алгоритма Serpent.
Используемые в алгоритме S-box преобразуют четыре входных бита в четыре выходных. Всего используется восемь различных S-box — (S0 , S1 , …, S7 ) . Для обработки 128-битного информаци-
онного блока в i -цикле ( i = 0, …, 31 ) используются 32 одинаковых S-box — Si mod8 , то есть, для каждых четырех бит цикла используется одна и та же S-box. Все циклы имеют одну и ту же схему, за исключением последнего, в котором вместо линейного преобразования ЛП используется операция сложения по модулю два с блоком ключа K32 .
Формально алгоритм можно записать как:
B0 = НП(P) ,
Bi+1 = Ri (Bi ) для i = 0,1,…, 31 ,
C = КП(B32 ) ,
где
Ri ( X ) = ЛП(Si mod8 ( X Ki )) для i = 0,1,…, 30 ,
R31 ( X ) = S7 ( X K31 ) K32 .