Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Статьи / symmetr.doc
Скачиваний:
43
Добавлен:
01.05.2014
Размер:
217.09 Кб
Скачать

2.2. Blowfish алгоритм.

2.2.1 Шифр Blowfish

Название/статус

Blowfish

Время/место разработки

1993 год.

Авторы

Брюс Шнайер (Bruce Schneier)

Архитектура

Сбалансированная сеть Файстеля.

Параметры

pазмер блока, бит

64

pазмер ключа, бит

32-448

число раундов

16

pазмер ключевого элемента, бит

32 (половина размера блока)

число ключевых элементов

16 (равно числу раундов)

Патент

Не запатентован

Особенности

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

Шифр Blowfishбыл предложен Б. Шнейером как альтернатива широко используемой криптосистемеDES. При его создании были использованы следующие конструктивные критерии:

  1. Высокая скорость шифрования при программной реализации.

  2. Компактность. Алгоритм не должен требовать большого объема оперативной памяти для своего размещения.

  3. Простота. Шифрующие процедуры должны быть основаны на элементарных операциях массовых процессоров. Логическая структура алгоритма шифрования должна быть простой для анализа, что позволит избежать ошибок при реализации.

  4. Возможность использования секретного ключа произвольной длины.

Blowfishявляется 64-битовым блочным шифром, который состоит из двух частей:

  • алгоритма расширения ключа и

  • алгоритма шифрования/дешифрования

В дальнейшем при рассмотрении программно-ориентированных криптосистем мы часто будем встречать конструктивный прием использования предвычислений для формирования расширенного ключа шифрования в зависимости от секретного ключа. В Blowfishпроцедура расширения ключа состоит в преобразовании секретного ключа, длина которого не лимитирована и может иметь значение до 448 бит, в ключ шифрования фиксированного размера (4168 бит), представленного в виде нескольких массивов подключей: массива 32-битовых ключевых непосредственных константK1,K2,K3, … ,K18и четырех последовательностей 32-битовых подключей, каждая из которых содержит 256 элементов,

Q0(1),Q1(1) , … ,Q255(1) ;

Q0(2),Q1(2) , … ,Q255(2) ;

Q0(3),Q1(3) , … ,Q255(3) ;

Q0(4),Q1(4) , … ,Q255(4) .

Последовательности Q(i) используются для задания функцииF(X), гдеX– 32-битовый аргумент. При заданномXзначение этой функции определяется следующим образом. 32-битовое словоXпредставляется в виде конкатенации четырех 8-битовых слов:X=x3|x2|x1|x0. Затем производится вычисление:

F(X) = {[(Qx3(1) +Qx2(2))mod232]ÅQx1(3) } +Qx0(4) mod

Последовательности Q(i)фактически задают большую таблицу отображения входных 32-битовых подблоков в выходные 32-битовые подблоки.

Алгоритм расширения секретного ключа включает сложные процедуры преобразований, которые сложно использовать при осуществлении криптоаналитической атаки, поэтому наиболее вероятны нападения на Blowfish, основанные на анализе простых процедур шифрования и на анализе простых процедур шифрования и на предположении, что расширенный ключ выбирается случайно.Blowfishпостроен в соответствии с итеративной криптосхемой Фейстеля и состоит в выполнении 16 раундов преобразований по следующим алгоритмам:

Алгоритм шифрования

ВХОД: 64-битовый блок открытых данныхT=L|R, представленный в виде конкатенации 32-битовых подблоковLиR.

  1. Установить счетчик i= 1.

  2. Преобразовать подблок Lи вычислить текущее значение переменнойV:

L := L Å Ki;

V := F(L).

  1. Преобразовать подблок R:

R := R Å V.

  1. Если i=16, то перейти к шагу 7.

  2. Прирастить i:=i+ 1 и переставить подблоки R иL:

W := R;

R := L;

L := W.

  1. Перейти к шагу 2.

  2. Преобразовать подблок R:

R := R Å K17 .

  1. Преобразовать подблок L:

  2. СТОП.

ВЫХОД: 64-битовый блок шифртекстаL|R.

Алгоритм шифрования:

ВХОД: 64-битовый блок шифртекстаC=L|R.

  1. Преобразовать подблок R:

R := R Å K17.

  1. Преобразовать подблок L:

L := L Å K18.

  1. Установить счетчик i=16.

  2. Вычислить текущее значение переменной Vи преобразовать подблокR:

V := F(L);

R :+ R Å V.

  1. Преобразовать подблок L:

L := L Å K17-i.

  1. Если i= 1, то перейти к шагу 9.

  2. Переставить подблоки RиL:

W := R; R := L; L :=W.

  1. Уменьшить на 1 значение счетчика i := i-1 и перейти к шагу 4.

  2. СТОП.

ВЫХОД: Блок открытого текстаL|R.

Схема шифрующих преобразований проясняется на рис:

Blowfishприменяется в ряде зарубежных программных продуктов и представляется стойким к известным методам криптоанализа.

Соседние файлы в папке Статьи