Blowfish: symetrická bloková šifra v kryptografii — prehľad a vlastnosti
Blowfish: prehľad symetrickej blokovej šifry — história, kľúče, bezpečnosť a použitia. Zistite vlastnosti, výhody a obmedzenia tejto rýchlej šifry.
V kryptografii je Blowfish symetrická bloková šifra s kľúčom, ktorú v roku 1993 vytvoril Bruce Schneier a od roku 1993 je súčasťou veľkého počtu šifrovacích produktov. Blowfish je navrhnutý pre efektívne softvérové vykonávanie a v praxi bol dlhé roky považovaný za rýchlu a spoľahlivú voľbu. Do roku 2008 nebola známa žiadna prakticky účinná kryptoanalýza, ktorá by dokázala prelomiť celú 16-kolovú verziu rýchlejšie než hrubou silou; napriek tomu dnes v mnohých aplikáciách získal prednosť moderný algoritmus blokovej šifry AES, najmä kvôli väčšej veľkosti bloku a širšej podpore v štandardoch.
Schneier vytvoril Blowfish ako univerzálny algoritmus, určený ako náhrada za starý algoritmus DES a s cieľom odstrániť niektoré nedostatky a obmedzenia starších šifier. V čase publikácie boli mnohé konkurenčné algoritmy patentované alebo zatvorené; Schneier zdôraznil otvorenosť svojho návrhu: "Blowfish nie je patentovaný a zostane ním vo všetkých krajinách. Algoritmus sa týmto stáva verejnou doménou a môže ho voľne používať ktokoľvek." Táto voľná dostupnosť prispela k rýchlemu rozšíreniu šifry v softvéri a v rôznych produktoch.
Medzi hlavné konštrukčné znaky patrí použitie veľkých, od kľúča závislých S-boxov a pomerne zložitý plán rozšírenia kľúča (key schedule). Blowfish je 16-kolová Feistelova šifra so 64-bitovou dĺžkou bloku, P-poľom (P-array) pozostávajúcim z 18 32-bitových subkľúčov a štyrmi S-boxami, pričom každý S-box obsahuje 256 32-bitových vstupov (spolu 1024 položiek). Štruktúrou je podobná napríklad šifre CAST-128, avšak CAST používa pevné (ne-závislé na kľúči) S-boxy, kým Blowfish S-boxy sú odvodzované od kľúča.
Kľúčový rozvrh je výpočtovo náročný: pri inicializácii sa najprv naplnia P-poľe a S-boxy konstantačnými hodnotami (číslami pi), potom sa tieto hodnoty kombinujú s použitým kľúčom a následne sa opakovane šifruje blok všetkých núl, čím sa generujú nové hodnoty pre P-poľe a S-boxy. Tento proces vyžaduje pomerne veľa šifrovacích operácií (v literatúre sa uvádza približne 521 64-bitových šifrovaní pri inicializácii pre každý nový kľúč), čo znamená, že každá zmena kľúča je pomerne drahá. To robí Blowfish menej vhodným tam, kde sa kľúče často menia alebo kde sú obmedzené zdroje (napr. niektoré veľmi malé vstavané systémy). Na druhej strane táto vlastnosť bola využitá pozitívne v metódach na šifrovanie hesiel: napríklad OpenBSD používa variant Blowfish (bcrypt/Eksblowfish) práve preto, že zdĺhavý rozvrh kľúčov zvyšuje odolnosť proti slovníkovým útokom a útokom hrubou silou; pozri posilnenie kľúčov.
Blowfish má 64-bitovú veľkosť bloku a variabilnú dĺžku kľúča (bežne sa uvádza rozsah od 32 až do 448 bitov, implementácie môžu akceptovať rôzne dĺžky v rámci tohto limitu). Ako už bolo spomenuté, ide o 16-kolovú štruktúru a používa veľké, od kľúča závislé S-boxy. V praktických nasadeniach sú bežne používané kľúče z rozsahu 128–256 bitov, hoci protokolovo sú povolené aj iné dĺžky.
V oblasti kryptoanalýzy sa na Blowfishe pracovalo viacero rokov. V roku 1996 Serge Vaudenay publikoval útok na zredukované verzie Blowfishu a ukázal existenciu tried slabých kľúčov, ktoré sú zraniteľné voči útokom na známe otvorené texty (útoky však vyžadovali veľmi veľké množstvá známych otvorených textov a vo väčšine praktických scenárov neboli použiteľné voči plnej 16-kolovej verzii). Vincent Rijmen v svojich prácach zaviedol diferenciálny útok druhého rádu, ktorý dokáže prelomiť až štyri kolá Blowfishu, no ani tieto analytické metódy nedokázali prelomiť všetkých 16 kôl rýchlejšie než hrubou silou. Okrem teoretických útokov sa v roku 1996 objavil aj praktický problém — chyba v niektorých publikovaných implementáciách v jazyku C súvisiaca so znamienkovým rozšírením (sign-extension), ktorá mohla viesť k nesprávnemu fungovaniu alebo zraniteľnej implementácii.
Je dôležité poznamenať, že 64-bitová veľkosť bloku dnes predstavuje praktické obmedzenie pri použití Blowfishu v moderných protokoloch a prostrediach s veľkým objemom prenosu dát. Útoky typu Sweet32 (publikované v roku 2016) demonštrovali, že šifry s 64-bitovými blokmi (napr. 3DES alebo Blowfish) môžu byť zraniteľné pri veľmi veľkom množstve šifrovaných blokov v jednom spojení, čo viedlo k odporúčaniu vyhnúť sa týmto šifram pri nových nasadeniach protokolov ako TLS/HTTPS. Z tohto dôvodu sa dnes odporúča používať šifry s väčším blokom (napríklad AES s 128-bitovým blokom) alebo modernejšie konštrukcie. Napriek tomu zostáva Blowfish užitočný v niektorých špecifických prípadoch a jeho odvodeniny (ako bcrypt) sú veľmi cenené pre ukladanie hesiel.
Do roku 2008 nebola verejne známa žiadna prakticky účinná kryptoanalýza, ktorá by prelámala plný počet 16 kôl Blowfishu rýchlejšie než hrubou silou. V roku 2007 však Bruce Schneier poznamenal, že hoci Blowfish stále používa množstvo aplikácií, odporúča namiesto neho využívať nový návrh Twofish, ktorý vznikol ako jeho ďalší vývojový krok a bol jedným z finalistov súťaže na štandard AES.
Súvisiace stránky
- Pokročilý štandard šifrovania
- eSTREAM - Hodnotenie nových prúdových šifier, ktoré vykonáva EÚ.
- Twofish
- MacGuffin
Otázky a odpovede
Otázka: Čo je to Blowfish?
Odpoveď: Blowfish je symetrická bloková šifra s kľúčom, ktorú v roku 1993 vytvoril Bruce Schneier. Odvtedy je súčasťou mnohých šifrovacích produktov.
Otázka: Na čo bol Blowfish vytvorený?
Odpoveď: Blowfish bol vytvorený ako univerzálny algoritmus, ktorý má nahradiť starý algoritmus DES a odstrániť problémy a ťažkosti iných šifrovacích algoritmov.
Otázka: Aká dlhá môže byť dĺžka kľúča pre Blowfish?
Odpoveď: Dĺžka kľúča pre Blowfish môže byť od 0 do 448 bitov.
Otázka: Aké sú niektoré vlastnosti konštrukcie Blowfish?
Odpoveď: Niektoré vlastnosti návrhu zahŕňajú S-boxy závislé od kľúča a veľmi zložitý plán kľúča.
Otázka: Je známa nejaká kryptoanalýza plnokruhovej verzie Blowfish?
Odpoveď: Od roku 2008 nie je známy žiadny spôsob, ako prelomiť celých 16 kôl okrem hľadania hrubou silou.
Otázka: Aký typ útoku na Blowfish našiel Serge Vaudenay?
Odpoveď: Serge Vaudenay našiel útok so známym textom, ktorý na prelomenie potrebuje 28r + 1 známych textov, kde r je počet kôl. Našiel aj triedu slabých kľúčov, ktoré sa dajú odhaliť a prelomiť tým istým útokom len s 24r + 1 známymi otvorenými textami.
Otázka: Odporúča teraz Bruce Schneier používať Twofish namiesto Blowfish?
Odpoveď: Áno, Bruce Schneier teraz odporúča používať Twofish namiesto Blowfish kvôli jeho lepším bezpečnostným opatreniam v porovnaní so staršími algoritmami ako DES alebo dokonca novšími ako AES.
Prehľadať