Blowfish (вимовляється [блоуфіш]) — криптографічний алгоритм, який реалізує блочне симетричне шифрування.
Розробники | Брюс Шнайєр |
---|---|
Уперше оприлюднений | 1993 р. |
Раундів | 16 |
Тип | мережа Фейстеля |
Ця стаття є сирим з іншої мови. Можливо, вона створена за допомогою машинного перекладу або перекладачем, який недостатньо володіє обома мовами. (грудень 2017) |
Розроблений Брюсом Шнайєром в 1993 році. Являє собою шифр на основі мережі Фейстеля. Виконано на простих і швидких операціях: XOR, підстановка, додавання. Не запатентований і вільно поширюваний.
Історія
До появи Blowfish алгоритми, що існували були або запатентованими, або ненадійними, а деякі і зовсім трималися в секреті (наприклад, ). Алгоритм був розроблений у 1993 році Брюсом Шнайєром як швидка й вільна альтернатива застарілому DES і запатентованому IDEA. За заявою автора, критерії проектування Blowfish були:
- Швидкість (шифрування на 32-бітних процесорах відбувається за 26 тактів);
- Простота (за рахунок використання простих операцій, які зменшують імовірність помилки реалізації алгоритму);
- Компактність;
- Можливість налаштування стійкості.
Опис алгоритму
Параметри
- Секретний ключ K (від 32 до 448 біт)
- 32-бітові ключі шифрування P1-P18
- 32-бітові таблиці замін S1-S4:
- S1 [0] S1 [1] .. S1 [255]
- S2 [0] S2 [1] .. S2 [255]
- S3 [0] S3 [1] .. S3 [255]
- S4 [0] S4 [1] .. S4 [255]
Функція F (x)
- 32-бітний блок ділиться на чотири 8-бітних блоки (X1, X2, X3, X4), кожен з яких є індексом масиву таблиці замін S1-S4
- Значення S1[X1] і S2[X2] складаються по модулю , після "XOR"яться з S3[X3] і, нарешті, додаються з S4[X4] по модулю .
- Результат цих операцій — значення F (x).
Алгоритм шифрування 64-бітного блоку з відомим масивом P і F (x)
- Поділ на 32-бітові блоки:
- і «XOR»-ся з ключами ,
- Обчислення в i-тому раунді:
- Після 16 раунду міняються місцями:
Алгоритм Blowfish
Розділений на 2 етапи:
- Підготовчий — формування ключів шифрування по секретному ключу.
- Ініціалізація масивів P і S за допомогою секретного ключа K
- Ініціалізація P1-P18 фіксованим рядком, що складається з шістнадцяткових цифр мантиси числа пі [ 3 вересня 2008 у Wayback Machine.].
- Проводиться операція XOR над P1 з першими 32 бітами ключа K, над P2 з другими 32-бітами і так далі.
Якщо ключ K коротше, то він накладається циклічно.
- Шифрування ключів і таблиць замін
- Алгоритм шифрування 64-бітного блоку, використовуючи початкові ключі P1-P18 і таблицю замін S1-S4, шифрує 64 бітну нульовий (0x0000000000000000) рядок. Результат записується в P1, P2.
- P1 і P2 шифруються зміненими значеннями ключів і таблиць замін. Результат записується в P3 і P4.
- Шифрування триває до зміни всіх ключів P1-P18 і таблиць замін S1-S4.
- Ініціалізація масивів P і S за допомогою секретного ключа K
- Шифрування тексту отриманими ключами і F(x), з попереднім розбиттям на блоки по 64 біти. Якщо неможливо розбити початковий текст точно на блоки по 64 біти, використовуються різні режими шифрування для побудови повідомлення, що складається з цілого числа блоків. Сумарні необхідна пам'ять 4168 байт: P1-P18: 18 змінних по 32 біта; S1-S4: 4x256 змінних по 32 бита.
Розшифрування відбувається аналогічно, тільки P1-P18 застосовуються у зворотному порядку.
Вибір початкового значення P-масиву і таблиці замін
Немає нічого особливого в цифрах числа пі. Цей вибір полягає в ініціалізації послідовності, не пов'язаної з алгоритмом, яка могла б бути збережена як частина алгоритму або отримана при необхідності (Пі (число)). Як вказує Брюс Шнайєр: «Підійде будь-який рядок з випадкових бітів цифр числа e, RAND-таблиці, або випадкові згенеровані цифри.»
Криптостійкість
- Слабкий S-box (і породжує його слабкий ключ) означає, що існує такі i, j, N = {1,2,3,4}: SN[i] == SN[j]
Криптостійкість головним чином залежить від 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 зарекомендував себе, як надійний алгоритм, тому реалізований у багатьох програмах, де не потрібна часта зміна ключа і необхідна висока швидкість шифрування / розшифрування.
- Хешування паролів
- Захист електронної пошти і файлів
- GnuPG (безпечне зберігання і передача)
- В лініях зв'язку: зв'язка ElGamal (не запатентований) або RSA (дія патенту закінчилося в 2000 році) і Blowfish замість IDEA
- В маршрутизаторі з ключем довжиною 144 біта
- Забезпечення безпеки в протоколах мережного і транспортного рівня
- PuTTY (мережевий рівень)
- SSH (транспортний рівень)
- OpenVPN (створення зашифрованих каналів)
Порівняння з симетричними криптосистемами
Швидкість шифрування алгоритму багато в чому залежить від використовуваної техніки і системи команд. На різних архітектурах один алгоритм може значно випереджати за швидкістю його конкурентів, а на іншому ситуація може зрівнятися або навіть змінитися прямо в протилежну сторону. Більш того, програмна реалізація значно залежить від використовуваного компілятора. Використання асемблерного коду може підвищити швидкість шифрування. На швидкість шифрування впливає час виконання операцій mov, add, xor, причому час виконання операцій збільшується при зверненні до оперативної пам'яті (для процесорів серії Pentium приблизно в 5 разів). Blowfish показує вищі результати при використанні кешу для зберігання всіх підключів. У цьому випадку він випереджає алгоритми DES, IDEA. На відставання IDEA впливає операція добутку по модулю . Швидкість Twofish може бути близька за значенням з Blowfish за рахунок більшого шифроблоку.
Хоча Blowfish по швидкості випереджає свої аналоги, але при збільшенні частоти зміни ключа основний час його роботи буде йти на підготовчий етап, що в сотні разів зменшує його ефективність.
Посилання
- Blowfish як JavaScript-модулю [ 8 березня 2016 у Wayback Machine.]
- Andrey Breeze, На шляху до Skein: просто і зрозуміло про Blowfish [ 2 липня 2012 у Wayback Machine.]
- Максим Паригін, Алгоритм Blowfish [ 6 січня 2012 у Wayback Machine.]
- Офіційний вебсайт Blowfish [ 10 липня 2007 у Wayback Machine.]
- Список продуктів, що використовують Blowfish [ 14 липня 2007 у Wayback Machine.]
- Serge Vaudenay.On the weak Keys of Blowfish [ 4 лютого 2013 у Wayback Machine.] (англ.)
- Dieter Schmidt.Kaweichel, an Extension of Blowfish for 64-Bit Architectures [ 27 червня 2010 у Wayback Machine.] (англ.)
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Blowfish vimovlyayetsya bloufish kriptografichnij algoritm yakij realizuye blochne simetrichne shifruvannya BlowfishRozrobnikiBryus ShnajyerUpershe oprilyudnenij1993 r Raundiv16Tipmerezha Fejstelya Cya stattya ye sirim perekladom z inshoyi movi Mozhlivo vona stvorena za dopomogoyu mashinnogo perekladu abo perekladachem yakij nedostatno volodiye oboma movami Bud laska dopomozhit polipshiti pereklad gruden 2017 Rozroblenij Bryusom Shnajyerom v 1993 roci Yavlyaye soboyu shifr na osnovi merezhi Fejstelya Vikonano na prostih i shvidkih operaciyah XOR pidstanovka dodavannya Ne zapatentovanij i vilno poshiryuvanij IstoriyaDo poyavi Blowfish algoritmi sho isnuvali buli abo zapatentovanimi abo nenadijnimi a deyaki i zovsim trimalisya v sekreti napriklad Algoritm buv rozroblenij u 1993 roci Bryusom Shnajyerom yak shvidka j vilna alternativa zastarilomu DES i zapatentovanomu IDEA Za zayavoyu avtora kriteriyi proektuvannya Blowfish buli Shvidkist shifruvannya na 32 bitnih procesorah vidbuvayetsya za 26 taktiv Prostota za rahunok vikoristannya prostih operacij yaki zmenshuyut imovirnist pomilki realizaciyi algoritmu Kompaktnist Mozhlivist nalashtuvannya stijkosti Opis algoritmuParametri Sekretnij klyuch K vid 32 do 448 bit 32 bitovi klyuchi shifruvannya P1 P18 32 bitovi tablici zamin S1 S4 S1 0 S1 1 S1 255 S2 0 S2 1 S2 255 S3 0 S3 1 S3 255 S4 0 S4 1 S4 255 Funkciya F x Funkciya F x v Blowfish 32 bitnij blok dilitsya na chotiri 8 bitnih bloki X1 X2 X3 X4 kozhen z yakih ye indeksom masivu tablici zamin S1 S4 Znachennya S1 X1 i S2 X2 skladayutsya po modulyu 2 32 displaystyle 2 32 pislya XOR yatsya z S3 X3 i nareshti dodayutsya z S4 X4 po modulyu 2 32 displaystyle 2 32 Rezultat cih operacij znachennya F x F X 1 X 2 X 3 X 4 S 1 X 1 S 2 X 2 mod 2 32 S 3 X 3 S 4 X 4 mod 2 32 displaystyle F X1 X2 X3 X4 S1 X1 S2 X2 mod 2 32 oplus S3 X3 S4 X4 mod 2 32 Algoritm shifruvannya 64 bitnogo bloku z vidomim masivom P i F x Merezha Fejstelya pri shifruvanni Podil na 32 bitovi bloki L 0 R 0 displaystyle L 0 R 0 L 0 displaystyle L 0 i R 0 displaystyle R 0 XOR sya z klyuchami P 0 displaystyle P 0 P 1 displaystyle P 1 Obchislennya v i tomu raundi R i L i 1 P i 1 displaystyle R i L i 1 oplus P i 1 L i R i 1 F R i displaystyle L i R i 1 oplus F R i Pislya 16 raundu L 16 R 16 displaystyle L 16 R 16 minyayutsya miscyami R 16 L 16 displaystyle R 16 leftleftarrows L 16 L 16 R 16 displaystyle L 16 leftleftarrows R 16 Algoritm Blowfish Rozdilenij na 2 etapi Pidgotovchij formuvannya klyuchiv shifruvannya po sekretnomu klyuchu Inicializaciya masiviv P i S za dopomogoyu sekretnogo klyucha K Inicializaciya P1 P18 fiksovanim ryadkom sho skladayetsya z shistnadcyatkovih cifr mantisi chisla pi 3 veresnya 2008 u Wayback Machine Provoditsya operaciya XOR nad P1 z pershimi 32 bitami klyucha K nad P2 z drugimi 32 bitami i tak dali Yaksho klyuch K korotshe to vin nakladayetsya ciklichno Shifruvannya klyuchiv i tablic zamin Algoritm shifruvannya 64 bitnogo bloku vikoristovuyuchi pochatkovi klyuchi P1 P18 i tablicyu zamin S1 S4 shifruye 64 bitnu nulovij 0x0000000000000000 ryadok Rezultat zapisuyetsya v P1 P2 P1 i P2 shifruyutsya zminenimi znachennyami klyuchiv i tablic zamin Rezultat zapisuyetsya v P3 i P4 Shifruvannya trivaye do zmini vsih klyuchiv P1 P18 i tablic zamin S1 S4 Shifruvannya tekstu otrimanimi klyuchami i F x z poperednim rozbittyam na bloki po 64 biti Yaksho nemozhlivo rozbiti pochatkovij tekst tochno na bloki po 64 biti vikoristovuyutsya rizni rezhimi shifruvannya dlya pobudovi povidomlennya sho skladayetsya z cilogo chisla blokiv Sumarni neobhidna pam yat 4168 bajt P1 P18 18 zminnih po 32 bita S1 S4 4x256 zminnih po 32 bita Rozshifruvannya vidbuvayetsya analogichno tilki P1 P18 zastosovuyutsya u zvorotnomu poryadku Vibir pochatkovogo znachennya P masivu i tablici zamin Nemaye nichogo osoblivogo v cifrah chisla pi Cej vibir polyagaye v inicializaciyi poslidovnosti ne pov yazanoyi z algoritmom yaka mogla b buti zberezhena yak chastina algoritmu abo otrimana pri neobhidnosti Pi chislo Yak vkazuye Bryus Shnajyer Pidijde bud yakij ryadok z vipadkovih bitiv cifr chisla e RAND tablici abo vipadkovi zgenerovani cifri KriptostijkistSlabkij S box i porodzhuye jogo slabkij klyuch oznachaye sho isnuye taki i j N 1 2 3 4 SN i SN j Kriptostijkist golovnim chinom zalezhit vid F x Na ce vkazav Serge Vaudenay kazhuchi pro nayavnist nevelikogo klasu slabkih klyuchiv takih sho utvoryuyut slabki S box jmovirnist poyavi slabkogo S box dorivnyuye 2 15 displaystyle 2 15 Vin takozh rozglyanuv sproshenij variant Blowfish z vidomoyu funkciyeyu F x i slabkim klyuchem Dlya cogo variantu potribno 3 2 2 7 t 2 2 2 3 7 t 2 2 displaystyle 3 2 2 7 t 2 2 approx 2 3 7 t 2 2 obranih vidkritih tekstiv t chislo raundiv a simvoli oznachayut operaciyu otrimannya ciloyi chastini chisla Cya ataka mozhe buti vikoristana tilki dlya algoritmu z t 7 displaystyle t leq 7 Dlya t 7 displaystyle t 7 potribno 2 24 displaystyle 2 24 vidkritih tekstiv prichomu dlya variantu z vidomim F x i vipadkovim klyuchem potribno 2 48 displaystyle 2 48 vidkritih tekstiv Ale dana ataka ne efektivna dlya Blowfish z 16 raundami John Kelsey rozrobiv ataku yaka dozvolyala zlamati 3 iteracijnij Blowfish Vona spirayetsya na fakt sho operaciyi dodavannya po modulyu 2 32 displaystyle 2 32 i XOR NE komutativni Nemozhlivo zazdalegid viznachiti chi ye klyuch slabkim Provoditi perevirku mozhna tilki pislya generaciyi klyucha Kriptostijkist mozhna nalashtovuvati za rahunok zmini kilkosti raundiv shifruvannya zbilshuyuchi dovzhinu masivu P i kilkosti vikoristovuvanih S box Pri zmenshenni vikoristovuvanih S box zrostaye jmovirnist poyavi slabkih klyuchiv ale zmenshuyetsya vikoristovuvana pam yat Dlya adaptaciyi Blowfish na 64 bitnoyi arhitekturu mozhna zbilshiti kilkist i rozmir S box a otzhe i pam yat dlya masiviv P i S a takozh uskladniti F x prichomu dlya algoritmu z takoyu funkciyeyu F x nemozhlivi vishevkazani ataki Modifikaciya F x na vhid podayetsya 64 bitnij blok yakij dilitsya na visim 8 bitnih blokiv X1 X8 Rezultat obchislyuyetsya za formuloyu F X 1 X 8 S 1 X 1 S 2 X 2 S 3 X 3 S 4 X 4 S 5 X 5 S 6 X 6 S 7 X 7 S 8 X 8 displaystyle F X1 X8 S1 X1 boxplus S2 X2 oplus S3 X3 boxplus S4 X4 boxplus S5 X5 boxplus S6 X6 oplus S7 X7 boxplus S8 X8 de m o d 2 32 displaystyle boxplus equiv mod2 32 Na listopad 2008 ne isnuvalo atak yaki vikonuyutsya za rozumnij chas Uspishni ataki mozhlivi tilki cherez pomilki realizaciyi ZastosuvannyaBlowfish zarekomenduvav sebe yak nadijnij algoritm tomu realizovanij u bagatoh programah de ne potribna chasta zmina klyucha i neobhidna visoka shvidkist shifruvannya rozshifruvannya Heshuvannya paroliv Zahist elektronnoyi poshti i fajliv GnuPG bezpechne zberigannya i peredacha V liniyah zv yazku zv yazka ElGamal ne zapatentovanij abo RSA diya patentu zakinchilosya v 2000 roci i Blowfish zamist IDEA V marshrutizatori z klyuchem dovzhinoyu 144 bita Zabezpechennya bezpeki v protokolah merezhnogo i transportnogo rivnya PuTTY merezhevij riven SSH transportnij riven OpenVPN stvorennya zashifrovanih kanaliv Porivnyannya z simetrichnimi kriptosistemamiShvidkist shifruvannya algoritmu bagato v chomu zalezhit vid vikoristovuvanoyi tehniki i sistemi komand Na riznih arhitekturah odin algoritm mozhe znachno viperedzhati za shvidkistyu jogo konkurentiv a na inshomu situaciya mozhe zrivnyatisya abo navit zminitisya pryamo v protilezhnu storonu Bilsh togo programna realizaciya znachno zalezhit vid vikoristovuvanogo kompilyatora Vikoristannya asemblernogo kodu mozhe pidvishiti shvidkist shifruvannya Na shvidkist shifruvannya vplivaye chas vikonannya operacij mov add xor prichomu chas vikonannya operacij zbilshuyetsya pri zvernenni do operativnoyi pam yati dlya procesoriv seriyi Pentium priblizno v 5 raziv Blowfish pokazuye vishi rezultati pri vikoristanni keshu dlya zberigannya vsih pidklyuchiv U comu vipadku vin viperedzhaye algoritmi DES IDEA Na vidstavannya IDEA vplivaye operaciya dobutku po modulyu 2 32 1 displaystyle 2 32 1 Shvidkist Twofish mozhe buti blizka za znachennyam z Blowfish za rahunok bilshogo shifrobloku Hocha Blowfish po shvidkosti viperedzhaye svoyi analogi ale pri zbilshenni chastoti zmini klyucha osnovnij chas jogo roboti bude jti na pidgotovchij etap sho v sotni raziv zmenshuye jogo efektivnist PosilannyaBlowfish yak JavaScript modulyu 8 bereznya 2016 u Wayback Machine Andrey Breeze Na shlyahu do Skein prosto i zrozumilo pro Blowfish 2 lipnya 2012 u Wayback Machine Maksim Parigin Algoritm Blowfish 6 sichnya 2012 u Wayback Machine Oficijnij vebsajt Blowfish 10 lipnya 2007 u Wayback Machine Spisok produktiv sho vikoristovuyut Blowfish 14 lipnya 2007 u Wayback Machine Serge Vaudenay On the weak Keys of Blowfish 4 lyutogo 2013 u Wayback Machine angl Dieter Schmidt Kaweichel an Extension of Blowfish for 64 Bit Architectures 27 chervnya 2010 u Wayback Machine angl