Алгоритм Blowfish
Алгоритм Blowfish разработан Брюсом Шнайером в 1994 г. Автор алгоритма предложил Blowfish в качестве замены стандарту DES. Несомненно, в 1994 г. замена DES на новый стандарт шифрования была уже актуальна из-за короткого ключа DES, который уже тогда можно было найти путем полного перебора. Брюс Шнайер предположил, что других реальных кандидатов на замену DES нет, в частности, по следующим причинам (описаны Шнайером в спецификации алгоритма Blowfish):
многие известные и криптографически стойкие (считающиеся таковыми на момент разработки алгоритма Blowfish) алгоритмы, например, IDEA или REDOC-II, являются запатентованными, что ограничивает их использование;
спецификация алгоритма ГОСТ 28147-89 не содержит значений таблиц замен, т. е., по мнению Шнайера, алгоритм описан не полностью;
алгоритм Skipjack вообще являлся секретным на тот момент.
Алгоритм Blowfish оказался весьма «удачным». Он очень широко реализован в различных шифровальных средствах — на сайте Шнайера приведен список из примерно 150 продуктов, которые шифруют алгоритмом Blowfish. Однако заменой стандарту DES он все же не стал.
Поскольку Blowfish предполагался в качестве замены алгоритма DES, он, аналогично DES, шифрует данные 64-битными блоками. Размер ключа алгоритма является переменным — от 32 до 448 битов.
Алгоритм представляет собой сеть Фейстеля. Шифрование данных выполняется в 16 раундов, в каждом из которых над левым 32-битным субблоком данных производятся следующие действия:
Значение субблока складывается с ключом раунда операцией XOR, результат операции становится новым значением субблока.
Субблок обрабатывается функцией F (описана далее), результат обработки накладывается на правый субблок операцией XOR.
Субблоки меняются местами во всех раундах, кроме последнего.
В своей книге «Прикладная криптография» Брюс Шнайер привел следующие ограничения алгоритма Blowfish.
«Алгоритм Blowfish не годится для применения в случаях, где требуется частая смена ключей». Процедура расширения ключа является достаточно ресурсоемкой, поэтому одно из достоинств алгоритма Blowfish — достаточно высокая скорость шифрования — проявляется только в тех случаях, если на одном ключе шифруется достаточно большой объем информации. И наоборот, если менять ключ после каждого из шифруемых блоков, скорость алгоритма становится катастрофически низкой именно из-за необходимости каждый раз выполнять расширение ключа. Сам Шнайер рекомендует в приложениях, где критична скорость, хранить уже развернутый ключ и загружать его целиком вместо выполнения расширения исходного ключа шифрования.
«Большие требования к памяти не позволяют использовать этот алгоритм в смарт-картах». Стоит сказать, что принципиальная возможность реализации алгоритма в смарт-картах была одним из важных условий при выборе нового стандарта шифрования США на конкурсе AES, т. е. данный недостаток алгоритма Blowfish можно считать серьезным.
Кроме того, стоит отметить и менее серьезные недостатки алгоритма:
невозможность расширения ключа параллельно процессу шифрования;
небольшой по современным меркам размер блока шифруемых данных. Алгоритм Blowfish имеет и достаточно серьезные преимущества, в частности:
как было сказано выше, высокая скорость шифрования на развернутом ключе;
простота алгоритма, снижающая вероятность ошибок при его реализации;
отсутствие известных успешных атак на полнораундовую версию алгоритма.
Однако стоит сказать, что известный эксперт Серж Воденэ обнаружил, что методом дифференциального криптоанализа r-раундового алгоритма Blowfish с известными таблицами замен можно вычислить значения КХ...КХ% при наличии 28г+1 выбранных открытых текстов. Это не актуально для полнораундовой версии алгоритма (и, тем более, для описанной выше полноценной версии алгоритма с вычисляемыми таблицами замен), но при использовании слабого ключа (Серж Воденэ обнаружил также у алгоритма Blowfish наличие слабых ключей, которые приводят к генерации слабых таблиц замен) выбранных открытых текстов требуется существенно меньше.
Явные достоинства и отсутствие критичных недостатков предопределили широкое использование алгоритма Blowfish.
По материалам книги Сергея Панасенко «Алгоритмы шифрования»
Алгоритмы шифрования