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

48

1. Слово W [i 1] циклически сдвигается влево понентное сложение по модулю

Ci / Nk = (RC[i / Nk ], '00' , '00' , '00' ) , где RC[

на один байт, после чего выполняется покомдва со специальной константой j] =α( j1) , α — примитивный элемент поля

GF(28).

2. Использование преобразования побайтовой подстановки (S-box) к полученному результату. Если Nk > 6 , то дополнительно для случая, когда i 4 кратно Nk , блок W [i 1] подвергается преобразованию побайтовой подстановки (S-box) перед выполнением операции покомпонентного сложения по модулю два с блоком

Ключ для каждого этапа (цикла) алгоритма шифрования выбирается из соответствующего набора W [i]:

Ключ для первого цикла ={W [0], W [1], W [2], W [3]},

Ключ для второго цикла ={W [4], W [5], W [6], W [7]},

итак далее.

Ключ для последнего, ( Nr +1)-го цикла = {W[Nb (Nr +1) 4], W[Nb (Nr +1) 3],

W[Nb (Nr +1) 2], W[Nb (Nr +1) 1]}.

Таким образом, общая схема алгоритма следующая:

побитовое сложение по модулю два с ключом для первого цикла;

Nr 1 циклов;

заключительный цикл.

4.5.Алгоритм Twofish

Авторы: Брюс Шнаер (Bruce Schneier), Джон Келси (John Kelsey), Дуг Уайтинг (Doug Whiting), Дэвид Вагнер (David Wagner), Крис Холл (Chris Hall).

Twofish — итеративный блоковый алгоритм с длиной информационного блока 128 бит и длиной ключа 128, 192 или 256 бит.

Алгоритм построен практически по классической схеме сетей Файстела, единственным отличием является наличие в схеме блоков циклического сдвига на 1 бит, однако они могут быть легко внесены внутрь основного преобразования, задаваемого функцией F . На Рис. 4.9 представлена схема алгоритма Twofish.

Исходное сообщение разбивается на четыре 32-битных слова, которые на начальном этапе алгоритма складываются по модулю два с четырьмя 32-битными блоками ключа. Затем выполняется 16 циклов преобразований, в каждом из которых два левых слова используются как входные блоки для преобразования, задаваемого функцией g (одно из этих слов предварительно подвергается

циклическому сдвигу на 8 бит влево). Результаты, полученные после этих преобразований, используются в псевдоадамаровом преобразовании (ПАП), после чего выполняется сложение по модулю два с двумя 32-битными блоками ключа. На заключительном этапе происходит сложение по модулю два с соответствующими 32-битными блоками ключа. Используя формализованную запись, эти преобразования можно записать в следующей форме.

Пусть p0 , p1 , ..., p15 — байты 128-битного блока исходной информации, P0 , P1 , P2 , P3 — 32битные слова, составленные из блоков исходной информации:

3

Pi = p4i+ j 28 j , i =0,,3 j=0

Результат первоначального сложения с блоками ключа:

R0,i = Pi Ki , i =0,,3

49

Рис. 4.9. Схема алгоритма Twofish.