Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Blowfish



Blowfish - это алгоритм, разработанный лично мной для реализации на больших микропроцессорах [1388, 1389]. Алгоритм незапатентован, и его код на языке С приведен в конце этой книги для широкого пользования. При проектировании Blowfish я использовал следующие критерии:

1. Скорость. Blowfish шифрует данные на 32-битовых микропроцессорах со скоростью 26 тактов на байт.

2. Компактность. Blowfish может работать менее, чем в 5 Кбайт памяти.

3. Простота. Blowfish использует только простые операции: сложение, XOR и выборка из таблицы по 32-битовому операнду. Анализ его схемы несложен, что делает при реализации алгоритма уменьшает к о-личество ошибок [1391].

4. Настраиваемая безопасность. Длина ключа Blowfish переменна и может достигать 448 битов.

Blowfish оптимизирован для тех приложений, в которых нет частой смены ключей, таких как линии связи или программа автоматического шифрования файлов. При реализации на 32-битовых микропроцессорах с большим кэшем данных, таких как Pentium и PowerPC, Blowfish заметно быстрее DES. Blowfish не подходит для использования в приложениях с частой сменой ключей, например, при коммутации пакетов, или для и с-пользования в качестве однонаправленной хэш-функции. Большие требования к памяти делают невозможным использование этого алгоритма в интеллектуальных платах.

Описание Blowfish

Blowfish представляет собой 64-битовый блочный шифр с ключом переменной длины. Алгоритм состоит из двух частей: развертывание ключа и шифрование данных. Развертывание ключа преобразует ключ длиной до 448 битов в несколько массивов подключей, общим объемом 4168 байтов.

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

В Blowfish используется много подключей. Эти подключи должны быть рассчитаны до начала шифрования или дешифрирования данных.

Р-массив состоит из 18 32-битовых подключей:

Р1,Р2,..., Р18

Каждый из четырех 32-битовых S-блоков содержит 256 элементов:

5*1,0, Si,U..., £1,255

5*2,0, 52,2,..., 52,255


5*3,0, 5*3,3, • • -, 5*3,255 54,0, 54,4, • • •, 5*4,255

Точный метод, используемый при вычислении этих подключей описан в этом разделе ниже.


32 бита

32 бита

32 бита

Рг ------- О

Рш

Pie

Pi


Рис. 14-2. Blowfish.

Blowfish является сетью Фейстела (Feistel) (см. раздел 14.10), состоящей из 16 этапов. На вход подается 64-битовый элемент данных х. Для шифрования:

Разбейте х на две 32-битовых половины: xL, xR

Для1= 1по16:

XL =XL®Pn

xR = F(Xi) © xR

Переставить xL и xR (кроме последнего этапа.)

XR =XR® Р17 XL =XL® Рп

Объединить xL и xR


8 битов

  8 битов
32 бита  
  8 битов
  8 битов

S-блок 1

S-блок2

S-блок з

S-блок4


Е^


Е-


,, 32 бита

------------ ►


Рис. 14-3. Функция F.

Функция F представляет собой следующее (см. Рис. 14-3):

Разделить xL на четыре 8-битовых части: а, Ь, с и d F(xL) = ((Sha + S2,b mod 232) © S3,c)+ S4,d mod 232

Дешифрирование выполняется точно также, как и шифрование, но Ръ Р2,..., Р18 используются в обратном порядке.

В реализациях Blowfish, для которых требуется очень большая скорость, цикл должен быть развернут, а все ключи должны храниться в кэше. Подробности приведены в [568].

Подключи рассчитываются с помощью специального алгоритма. Вот какова точная последовательность де й-ствий.

(1) Сначала Р-массив, а затем четыре S-блока по порядку инициализируются фиксированной строкой. Эта строка состоит из шестнадцатиричных цифр я.

(2) Выполняется XOR Рг с первыми 32 битами ключа, XOR Р2 со вторыми 32 битами ключа, и так далее для всех битов ключа (до Р18). Используется циклически, пока для всего Р-массива не будет выполнена опер а-ция XOR с битами ключа.

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

(4) Pi и Р2 заменяются результатом этапа (3).

(5) Результат этапа (3) шифруется с помощью алгоритма Blowfish и измененных подключей.

(6) Р3 и Р4 заменяются результатом этапа (5).

(7) Далее в ходе процесса все элементы Р-массива и затем по порядку все четыре S-блока заменяются вых о-дом постоянно меняющегося алгоритма Blowfish.

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





Дата публикования: 2014-11-04; Прочитано: 233 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...