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

32

Рис. 3.13. Функция F .

Генерирование множеств подключей

Подключи генерируются с использованием алгоритма Blowfish:

1.Сначала создается множество P и четыре матрицы замены (S-box), в соответствии с заданной последовательностью. Эта последовательность состоит из шестнадцатеричных цифр числа π , стоящих после десятичной запятой:

P1 = 243F6A8816 , P2 = 85A308D316 , P3 =13198A2E16 , P4 = 0370734416 , и т.д.

2.Выполняется операция поразрядного сложения по модулю два (XOR) P1 с первыми 32 битами ключа, поразрядного сложения по модулю два (XOR) P2 со вторыми 32 битами ключа, и так далее для всех бит ключа (возможно до P14 ). Многократное повторение цикла для элементов ключевой последовательности до тех пор, пока не будет использовано все множество P . (Для любого короткого ключа имеется, по крайней мере, один эквивалентный более длинный ключ, например, если ключ состоит из 64 бит, то AA, AAA, и т.д., являются эквивалентными ключами).

3.Зашифровывается нулевая последовательность алгоритмом Blowfish, используя подключи, описанные в шагах (1) и (2).

4.Заменяются P1 и P2 результатом, полученным на выходе шага (3).

5.Зашифровывается результат шага (3), используя алгоритм Blowfish с измененными подключами.

6.Заменяются P3 и P4 с результатом, полученным после выполнения шага (5).

7.Процесс продолжается, заменяя все элементы множества P , а затем и все четыре S-box в соответствии с результатом непрерывно изменяющегося алгоритма Blowfish.

Всего требуется 521 повторение с тем, чтобы получить все требуемые подключи. При реализации алгоритма можно хранить все подключи с тем, чтобы не выполнять этот процесс многократно.

3.8. Алгоритм RC5

RC5 представляет собой фактически семейство спиралевидных шифров, обозначенных автором Роном Ривестом (Ron Rivest) [Riv95], как RC5- w/ r / b , где w — это размер слова, r — число этапов, а b — длина ключа в байтах.

В процессе преобразования блока исходной информации используется три действия: XOR, сложение и циклические сдвиги. В приводимом ниже примере мы рассмотрим случай w = 64 бита [Schn96]. Шифрование использует 2r + 2 зависящих от ключа 32-битных слов — S0 , S1 , S2 , ...,

33

S2r +1 , где r — число этапов. Алгоритм получения этих слов мы рассмотрим немного позже. Для

шифрования блок исходной информации сначала делится на два 32-битных подблока A и B . (RC5 предполагает следующее соглашение по упаковке байтов в блоки: первый байт блока исходного текста занимает младшие биты подблока A , и т.д.) Затем:

A = A + S0 ,

B = B + S1 .

И далее выполняется итеративный процесс для i от 1 до r :

A = ЦСЛ(( A B), B) + S2i , B = ЦСЛ((B A), A) + S2i+1 ,

где ЦСЛ(x, y) — циклический сдвиг содержимого регистра x на y бит влево, сложения выполняются по модулю 232 .

Результат оказывается в подблоках A и B .

Дешифрация выполняется в обратном порядке. Блок зашифрованного текста разбивается на два 32-битных подблока A и B , а затем выполняется итеративный процесс для i от 1 до r :

B = ЦСП((B S2i+1),A) A ,

A= ЦСП(( A S2i ),B) B ,

B= B S1 ,

A = A S0 ,

где ЦСП( x,y) — циклический сдвиг содержимого регистра x на y бит вправо, вычитания выполняются по модулю 232.

Создание массива ключей более сложно, но так же прямолинейно. Сначала, байты ключа копируются в массив L из c 32-битных слов, дополняя при необходимости заключительное слово нуля-

ми. Затем массив S инициализируется при помощи линейного конгруэнтного генератора по модулю 232:

S0 = P ,

далее выполняется итеративный процесс для i от 1 до r :

Si = (Si 1 +Q) mod 232 ,

P = B7E1516316 и Q = 9E3779B916 , эти константы взяты из двоичного представления трансцендентных чисел e и π .

В заключение n раз выполняются итеративные вычисления:

A = Si = ЦСЛ((Si + A + B), 3) ,

B = Li = ЦСЛ((Li + A + B), ( A + B)) , i = (i +1) mod 2(r +1) ,

j = ( j +1) mod c ,

где n = max(2(r +1), c) , и c = b / v , при начальных условиях: i = j = 0 ,

A = B = 0 .