Remove ads
З Вікіпедії, вільної енциклопедії
Blowfish (вимовляється [блоуфіш]) — криптографічний алгоритм, який реалізує блочне симетричне шифрування.
Розробники | Брюс Шнайєр |
---|---|
Уперше оприлюднений | 1993 р. |
Раундів | 16 |
Тип | мережа Фейстеля |
Ця стаття є сирим перекладом з іншої мови. Можливо, вона створена за допомогою машинного перекладу або перекладачем, який недостатньо володіє обома мовами. (грудень 2017) |
Розроблений Брюсом Шнайєром в 1993 році. Являє собою шифр на основі мережі Фейстеля. Виконано на простих і швидких операціях: XOR, підстановка, додавання. Не запатентований і вільно поширюваний.
До появи Blowfish алгоритми, що існували були або запатентованими, або ненадійними, а деякі і зовсім трималися в секреті (наприклад, Skipjack). Алгоритм був розроблений у 1993 році Брюсом Шнайєром як швидка й вільна альтернатива застарілому DES і запатентованому IDEA. За заявою автора, критерії проектування Blowfish були:
Розділений на 2 етапи:
Розшифрування відбувається аналогічно, тільки P1-P18 застосовуються у зворотному порядку.
Немає нічого особливого в цифрах числа пі. Цей вибір полягає в ініціалізації послідовності, не пов'язаної з алгоритмом, яка могла б бути збережена як частина алгоритму або отримана при необхідності (Пі (число)). Як вказує Брюс Шнайєр: «Підійде будь-який рядок з випадкових бітів цифр числа e, RAND-таблиці, або випадкові згенеровані цифри.»
Криптостійкість головним чином залежить від F (x). На це вказав Serge Vaudenay, кажучи про наявність невеликого класу слабких ключів (таких, що утворюють слабкі S-box): ймовірність появи слабкого S-box дорівнює . Він також розглянув спрощений варіант Blowfish, з відомою функцією F(x) і слабким ключем. Для цього варіанту потрібно обраних відкритих текстів (t - число раундів, а символи [] означають операцію отримання цілої частини числа). Ця атака може бути використана тільки для алгоритму з . Для потрібно відкритих текстів, причому для варіанту з відомим F (x) і випадковим ключем потрібно відкритих текстів. Але дана атака не ефективна для Blowfish з 16 раундами.
John Kelsey розробив атаку, яка дозволяла зламати 3-ітераційний Blowfish. Вона спирається на факт, що операції додавання по модулю і XOR НЕ комутативні.
Неможливо заздалегідь визначити чи є ключ слабким. Проводити перевірку можна тільки після генерації ключа.
Криптостійкість можна налаштовувати за рахунок зміни кількості раундів шифрування (збільшуючи довжину масиву P) і кількості використовуваних S-box. При зменшенні використовуваних S-box зростає ймовірність появи слабких ключів, але зменшується використовувана пам'ять. Для адаптації Blowfish на 64-бітної архітектуру, можна збільшити кількість і розмір S-box (а отже і пам'ять для масивів P і S), а також ускладнити F (x), причому для алгоритму з такою функцією F (x) неможливі вищевказані атаки.
Модифікація F (x): на вхід подається 64-бітний блок, який ділиться на вісім 8-бітних блоків (X1-X8). Результат обчислюється за формулою
, де
На листопад 2008 не існувало атак, які виконуються за розумний час. Успішні атаки можливі тільки через помилки реалізації.
Blowfish зарекомендував себе, як надійний алгоритм, тому реалізований у багатьох програмах, де не потрібна часта зміна ключа і необхідна висока швидкість шифрування / розшифрування.
Швидкість шифрування алгоритму багато в чому залежить від використовуваної техніки і системи команд. На різних архітектурах один алгоритм може значно випереджати за швидкістю його конкурентів, а на іншому ситуація може зрівнятися або навіть змінитися прямо в протилежну сторону. Більш того, програмна реалізація значно залежить від використовуваного компілятора. Використання асемблерного коду може підвищити швидкість шифрування. На швидкість шифрування впливає час виконання операцій mov, add, xor, причому час виконання операцій збільшується при зверненні до оперативної пам'яті (для процесорів серії Pentium приблизно в 5 разів). Blowfish показує вищі результати при використанні кешу для зберігання всіх підключів. У цьому випадку він випереджає алгоритми DES, IDEA. На відставання IDEA впливає операція добутку по модулю . Швидкість Twofish може бути близька за значенням з Blowfish за рахунок більшого шифроблоку.
Хоча Blowfish по швидкості випереджає свої аналоги, але при збільшенні частоти зміни ключа основний час його роботи буде йти на підготовчий етап, що в сотні разів зменшує його ефективність.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.