Blowfish — симетричен блоков шифър: дизайн, приложения и сигурност

В криптографията Blowfish е симетричен блоков шифър с ключове, създаден през 1993 г. от Брус Шнайер. От пускането си той е включен в голям брой продукти за криптиране и се използва широко в софтуерни реализации. Blowfish има добро представяне при софтуерно криптиране и до 2008 г. не е бил публично разбит чрез практическа криптоанализа. Въпреки това, поради еволюцията на изискванията за сигурност и напредъка на новите алгоритми, като Twofish и особено AES, интересът към Blowfish намалява в някои области.

Шнайер проектира Blowfish като алгоритъм с общо предназначение — заместител на остарелия DES и като решение на недостатъците на други съществуващи алгоритми за криптиране. В момент, когато много от тогавашните алгоритми бяха патентовани или неоткрити за обществеността, Шнайер изрично заяви, че "Blowfish не е патентован и ще остане такъв във всички страни". С това алгоритъмът беше поставен в публичното пространство и може да се използва свободно от всеки.

Дизайн и архитектура

Основните характеристики на дизайна включват зависими от ключа S-boxes и сложен график на ключовете. Blowfish е 16-рундов шифър на Фейстел, има 64-битов размер на блока и променлива дължина на ключа от 0 до 448 бита. За разлика от някои алгоритми, които използват фиксирани таблици, Blowfish генерира S-боксовете и частите на ключовия график на базата на зададения ключ, което увеличава сложността за криптоанализ.

Процесът на настройка (key setup) включва многократно криптиране с начални стойности за инициализиране на масиви P и S-боксове — това гарантира, че S-боксовете са силно зависими от ключа и че дори малки промени в ключа водят до големи промени в тези структури. В резултат всеки нов ключ изисква значителна предварителна обработка: тази предварителна обработка отнема приблизително същото време като криптирането на около 4 килобайта текст.

Предимства и ограничения

  • Предимства: Добра скорост при софтуерна реализация за еднократно криптиране; прост и проверен дизайн на Фейстел; свободен от патентни ограничения.
  • Ограничения: Бавен и тежък key setup — прави смяната на ключовете скъпа по време на изпълнение, което ограничава употребата му в системи с честа смяна на ключове или с ограничени ресурси (например ранни вградени системи, първите смарткарти и др.).
  • Размер на блока: 64-битовият размер на блока е вече недостатъчен за някои модерни приложения за големи обеми данни — съществува риск от колизии при големи количества криптирани данни (проблем от рода на Birthday attack), което направи алгоритми с 128-битови блокове (напр. AES) предпочитани за много протоколи.

Сигурност и криптоаналитични резултати

През 1996 г. Серж Водени открива атака с известен текст, за чието приложение са необходими 28r + 1 известни открити текста, където r е броят на рундовете. Той също така описва клас слаби ключове, които могат да бъдат открити и използвани от същата атака с по-малък брой известни открити текста — 24r + 1. Важно е, че тази атака предполага познаване на зависимите от ключа S-боксове и не директно компрометира стандартната имплементация на Blowfish.

Винсент Раймен в своите докторски изследвания въвежда диференциална атака от втори ред, която може да компрометира до четири рунда от Blowfish, но не и пълните 16 рунда. До 2008 г. не е известен ефективен публичен криптоанализ, който да разбие пълната 16-рундова версия на Blowfish; най-добрият универсален метод остава търсенето с груба сила.

Друг практически аспект на сигурността е, че 64-битовият блок прави Blowfish неподходящ за някои модерни протоколи и среди, където се обменят големи масиви данни или множество сесии с един и същ ключ. Примерно, атаките от типа "Sweet32" показаха уязвимости при 64-битови блокови шифри в някои настройки на TLS/HTTPS, когато се криптират големи количества данни с един ключ.

През 1996 г. също е открита грешка в разширяването на знака в един от публикуваните кодове на C, което е пример за необходимостта от внимателни и защитени реализации. По-късно подобни грешки бяха коригирани в актуалните библиотеки.

Приложения и варианти

Blowfish не е подходящ за всички случаи, но намира широко приложение в софтуерни продукти, архивация, VPN, и в други системи, където ключовете не се сменят често. Един от най-известните производни алгоритми е bcrypt — алгоритъм за хеширане на пароли, разработен за и използван от OpenBSD. Той използва модифициран, „експанзивен“ вариант на графика на ключовете от Blowfish (известен като EksBlowfish), за да направи проверката на паролите бавна и трудна за речникови и brute-force атаки. В този контекст бавният key schedule е предимство, защото увеличава изчислителната цена на атаките.

Поради споменатите ограничения — основно 64-битов блок и бавна смяна на ключове — за нови проекти и съвременни протоколи често се предпочитат алгоритми с 128-битови блокове или поточни/аутентифицирани схеми (напр. AES-GCM, ChaCha20-Poly1305). Брус Шнайер сам препоръчва използването на по-нови алгоритми като Twofish за случаи, където е необходима по-съвременна стойност на сигурността.

Практически съвети и препоръки

  • За нови приложения и протоколи предпочитайте алгоритми с по-голям блоков размер (напр. AES) или модерни поточни/аутентифицирани методи.
  • Когато използвате Blowfish, избягвайте многократно криптиране на големи обеми данни с един и същ ключ (риск от колизии при 64-битов блок).
  • За съхранение на пароли използвайте формати като bcrypt, които умишлено използват експандиращ key setup, за да задържат нападателите.
  • Винаги използвайте добре поддържани и проверени криптографски библиотеки, тъй като реалните уязвимости често идват от грешни реализации, а не от теоретични слабости на алгоритъма.

В обобщение: Blowfish е исторически и практически значим блоков шифър с добре проучен дизайн и специфични предимства, особено в софтуерни среди от 1990-те и началото на 2000-те. Заради своя 64-битов блок и някои практически ограничения, днес често се предпочитат по-съвременни алгоритми за нови системи, но производните и приложенията на Blowfish (напр. bcrypt) остават релевантни и полезни в съвременната криптография.

Свързани страници

Въпроси и отговори

В: Какво е Blowfish?


О: Blowfish е симетричен блоков шифър с ключове, създаден през 1993 г. от Брус Шнайер. Оттогава той е включен в много продукти за криптиране.

В: За какво е създаден Blowfish?


О: Blowfish е създаден като алгоритъм с общо предназначение, който да замени стария алгоритъм DES и да отстрани проблемите и трудностите на други алгоритми за криптиране.

В: Колко дълга може да бъде дължината на ключа за Blowfish?


О: Дължината на ключа за Blowfish може да варира от 0 до 448 бита.

В: Какви са някои особености на дизайна на Blowfish?


О: Някои особености на дизайна включват зависими от ключа S-боксове и много сложен график на ключовете.

Въпрос: Известен ли е криптоанализ на версията с пълен кръг на Blowfish?


О: Към 2008 г. не е известен начин за разбиване на пълните 16 кръга, освен търсене с груба сила.

Въпрос: Какъв тип атака срещу Blowfish е открил Серж Водени?


О: Serge Vaudenay откри атака с познат текст, която се нуждае от 28r + 1 познати открити текстове, където r е броят на рундовете. Той също така открива клас слаби ключове, които могат да бъдат открити и разбити чрез същата атака само с 24r + 1 известни открити текста.

Въпрос: Препоръчва ли Брус Шнайер сега да се използва Twofish вместо Blowfish?


О: Да, Брус Шнайер препоръчва сега да се използва Twofish вместо Blowfish поради подобрените му мерки за сигурност в сравнение с по-стари алгоритми като DES или дори по-нови като AES.

AlegsaOnline.com - 2020 / 2025 - License CC3