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

48

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

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

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

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.