![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!