Шифр Blowiish

Шифр Blowfish был разработан известным американским криптографом Брюсом Шнсйсром (Bruce Schneier) в 1993 году. Алгоритм ориентирован па программную реализацию па 32-разрядных микропроцессорах. Его отличают высокая скорость и криптостойкость. Также в качестве отличительной особенности можно назвать возможность использовать ключ переменной длины. Шифр блочный, размер входного блока равен 64 битам. Преобразование блока выполняется в 16 раундов (есть версия с 111-ю раундами). Ключ переменной длины, максимально 448 бит.

До начала шифрования или расшифровывания данных производится расширение ключа. В результате, на базе секретного ключа получают расширенный, который представляет собой массив из 18 ра- ундовых ключей К, ..., K!8 (размерность К, — 32 бита) и матрицу подстановок Q с 4-мя строками, 256-ю столбцами и 32-битными элементами:

Данная матрица используется для задания нелинейной функции шифрующего преобразования F(X), где X — 32-битный аргумент. X представляется в виде сцепления 4-х 8-битных слов X = Х31 Х2 I I A"0, а сама функция задается формулой (+ здесь обозначает сложение по модулю 2 '2, ® — сложение по модулю 2):

Шифр Blowfish

Рис. 2.13. Шифр Blowfish

Схема шифрующего преобразования приведена на рис. 2.13. Расширение секретного ключа KS производится следующим образом.

  • 1) Начальный массив раундовых ключей А", и элементов Q инициализируется фиксированными значениями. Например, в шестнадцатеричном представлении К = 243F6A88 и т. д.
  • 2) К, суммируется по модулю 2 с первыми 32-мя битами секретного ключа KS, К2 — со следующими 32-мя битами и т. д. Когда ключ KS заканчивается, его начинают использовать сначала. Суммируются только К( (без 0.
  • 3) 64-битный блок нулей 0 = (0...0) зашифровывают с помощью Blowfish на ключах, полученных на шагах 1 и 2: Со= Blowfish(O).
  • 4) Раундовые подключи Kt и К2 заменяют полученным на шаге 3 значением С0.
  • 5) С0 шифруют на модифицированных ключах С, = Blowfish(C0).
  • 6) Раундовые ключи К2 и К4 заменяют значением С.
  • 7) Процесс продолжается, пока не будут получены сначала все пары раундовых ключей (9 пар), а затем все нары элементов матрицы <2(512 пар).

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

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ   ОРИГИНАЛ     След >