Difference between revisions of "Криптографический алгоритм Blowfish"

From CryptoWiki
Jump to: navigation, search
(Метод вычисления подключей)
 
(2 intermediate revisions by one user not shown)
Line 1: Line 1:
'''[[Cryptographic algorithm Blowfish|Blowfish]]''' – это криптографический алгоритм, разработанный в 1993 году Брюсом Шнайером (Bruce Schneier).  
+
'''[[Cryptographic algorithm Blowfish|Blowfish]]''' – это криптографический алгоритм симметричного шифрования, разработанный в 1993 году Брюсом Шнайером (Bruce Schneier).  
  
 
== Описание Blowfish ==
 
== Описание Blowfish ==

Latest revision as of 20:10, 6 December 2013

Blowfish – это криптографический алгоритм симметричного шифрования, разработанный в 1993 году Брюсом Шнайером (Bruce Schneier).

Описание Blowfish

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

Развертывание ключа преобразует ключ длиной до 448 битов в несколько массивов подключей, общим объемом 4168 байтов.

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

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

P-массив состоит из 18 32-битовых подключей: P1, P2, … , P18.

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

Blow1.png

Blow2.png

Метод вычисления подключей

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

Рисунок 1. Blowfish.

Blow3.png

Для шифрования: Необходимо разбить X на две 32-битовых половины: Blow4.png и Blow5.png.

Для i = 1 по 16:

Blow6.png

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

Blow7.png

Объединить Blow4.png и Blow5.png


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

Рисунок 2. Функция F.

Blow8.png

Разделить Blow4.png на четыре 8-битовых части: a, b, c и d

Blow9.png

Дешифрование выполняется точно так же, как и шифрование, но P1, P2, … , P18 используются в обратном порядке.

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

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

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

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

4. P1 и P2 заменяются результатом этапа 3.

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

6. P3 и P4 заменяются результатом этапа 5.

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

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


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

Библиографический указатель

  • Шнайер Б. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си — М.: Триумф, 2002. — 816 с.