Алгоритмы симметричного шифрования

Алгоритм Blowfish


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

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

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

В основе алгоритма лежит сеть Фейштеля с 16 итерациями. Каждая итерация состоит из перестановки, зависящей от ключа, и подстановки, зависящей от ключа и данных. Операциями являются XOR и сложение 32-битных слов.

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

  • Р-массив, состоящий из восемнадцати 32-битных подключей: Р1, Р2, ..., Р18.
  • Четыре 32-битных S-boxes c 256 входами каждый. Первый индекс означает номер S-box, второй индекс - номер входа. S1,0, S1,1, … S1,255;
    S2,0, S2,1, … S2,255;
    S3,0, S3,1, … S3,255;
    S4,0, S4,1, … S4,255;
  • Метод, используемый для вычисления этих подключей, будет описан ниже.



    Содержание раздела