Blowfish

Характеристики:

• Сеть Фейстеля, 16 итераций.

• Каждая итерация состоит из перестановки, зависящей от ключа, и подстановки, зависящей от ключа и данных.

• Операциями являются XOR и сложение 32-битных слов.

• Длина блока 64 бит.

• Ключ может иметь любую длину в пределах 448 бит.

 

Алгоритм состоит из двух частей:

• расширение ключа

• и шифрование данных.

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

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

• Элементы алгоритма:

• Р - массив, состоящий из восемнадцати 32-битных подключей:

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

• Четыре 32-битных S-boxes c 256 входами каждый..

S1,0, S1,1, … S1,255;

S2,0, S2,1, … S2,255;

S3,0, S3,1, … S3,255;

S4,0, S4,1, … S4,255;

 

ШИФРОВАНИЕ:
Входом является 64-битный элемент данных X, который делится на две 32-битные половины, Xl и Xr.

Xl = Xl XOR Pi

Xr = F (Xl) XOR Xr

Swap Xl and Xr

Функция F:

Разделить Xl на четыре 8-битных элемента A, B, C, D

F (Xl) = ((S1,А + S2,B mod 232) XOR S3,C) +

+S4,D mod 232

 

Дешифрование отличается от шифрования тем, что Pi используются в обратном порядке.