Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Беззатеев и др. Блоковые шифры.pdf
Скачиваний:
244
Добавлен:
02.04.2015
Размер:
1.75 Mб
Скачать

42

Рис. 4.7. Общая схема алгоритма Serpent.

Создание S-box

Идея метода создания S-box взята из алгоритма шифрования RC4. В качестве исходного материала для создания S-box используется матрица sbox[ , ], состоящая из восьми S-box алгоритма DES

(каждая S-box в алгоритме DES имеет 4 строки и 16 столбцов, и ее элементами являются числа от 0 до 15). Затем в l -й строке выполняется перестановка местами i -го и k -го элементов, при этом значение k определяется значением j -го элемента в l +1 строке. При этом j определяется вектором ключа и номером i . Если полученный после такой перестановки массив обладает необхо-

43

димыми (разностными и линейными) свойствами, он сохраняется как S-box алгоритма Serpent. Эта процедура при последовательном увеличении l повторяется до тех пор, пока не будут получены все 8 S-box алгоритма.

Формально ее можно записать так:

Пусть key[] — массив, элементами которого являются младшие 4 бита ASCII-кодов символов ключа, t — вспомогательный параметр (первоначально t = 0 ),

l = t mod 32 ,

j = key[i]; k = sbox[l +1 mod 32, j] ; swap(sbox[l, k], sbox[l, j]) для i = 0,1,,15 ;

где swap( , ) — перестановка соответствующих элементов массива.

Если получается S-box — она сохраняется, в противном случае t увеличивается на 1 и вычисления продолжаются до тех пор, пока не будут получены все 8 S-box.

Линейное преобразование

128-битное слово Bi , полученное после выполнения преобразований в блоке из 32 S-box, состоит из четырех 32-битных слов X 0 , X1 , X 2 , X 3 , которые и подвергаются линейному преобразованию:

X0 = ЦСЛ( X0 ,13) ;

X 2 = ЦСЛ( X 2 , 3) ;

X1 = X1 X 0 X 2 ;

X3 = X3 X2 СЛ( X0 ,3) ;

X1 = ЦСЛ( X1,1) ;

X 3 = ЦСЛ( X 3 , 7) ;

X 0 = X 0 X1 X 3 ;

X 2 = X 2 X 3 СЛ( X1, 7) ;

X 0 = ЦСЛ( X 0 ,5) ; X 2 = ЦСЛ( X 2 , 22) .

Полученные 32-битные блоки формируют 128-битный блок Bi+1 :

Bi+1 = X 0 , X1, X 2 , X 3 ,

СЛ( , ) — сдвиг влево, при этом освобождающиеся разряды заполняются нулями.

Генерация ключей

Сначала ключ расширяется до 256 бит, как это было описано ранее. Затем из полученного таким образом массива, элементами которого являются слова w8 , w7 , ..., w1 получается промежуточ-

ный ключ w0 , w1 , ..., w131 по рекуррентной формуле: wi = ЦСЛ(wi8 wi5 wi3 wi1 φ i, 11) ,

где φ — дробная часть отношения золотого сечения ((

5 +1) / 2) , равная в шестнадцатеричной

форме 9E3779B9. Для получения очередного значения wi

используется примитивный многочлен

восьмой степени x8 + x7 + x5 + x3 +1 .

 

Ключи для циклов алгоритма Serpent вычисляются из промежуточных ключей с использованием S-box. Сначала генерируется 132 вспомогательных ключевых блока k j по 32 бита каждый: