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

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 .