Характеристики:
• Сеть Фейстеля, 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 используются в обратном порядке.