Blowfish titkosítás: Bruce Schneier szimmetrikus blokkos algoritmusa
Blowfish titkosítás: Bruce Schneier gyors, nyílt, szimmetrikus blokkalgoritmusa 64 bites blokkal és rugalmas kulcshosszal — működés, előnyök és gyakorlati alkalmazások.
A kriptográfiában a Blowfish egy szimmetrikus, blokkos titkosítás, amelyet 1993-ban Bruce Schneier tervezett. Az algoritmus kiadása óta számos titkosítási termékben megjelent, mivel szabadon használható — Schneier kifejezetten hangsúlyozta, hogy "a Blowfish nem szabadalmaztatott, és minden országban az is marad", az algoritmus közkinccsé válik, és bárki szabadon alkalmazhatja.
Alapvető jellemzők
A Blowfish 64 bites blokkmérettel dolgozik és 0–448 bit közötti, változó kulcshosszt támogat. Szerkezetét tekintve egy 16 körös Feistel-kódolás, amely nagy, kulcsfüggő S-dobozokat és egy bonyolult kulcsütemezést használ. Felépítése hasonló egyes más algoritmusokhoz, például a CAST-128-hoz (bár a CAST fix S-dobozokat alkalmaz).
Működés és belső felépítés
A Blowfish belső szerkezete néhány fontos elemet tartalmaz:
- P-tömb (P-array): 18 darab 32 bites alakuló kulcs (subkey).
- S-dobozok: négy darab, egyenként 256 elemből álló 32 bites S-doboz, amelyek teljesen kulcsfüggők.
A kulcselőfeldolgozás során (key schedule) a beállított kulcs alapján állítják elő a P-tömb és az S-dobozok értékeit: először a P-tömböt xor-olják a kulcs ismétlődő bitjeivel, majd egy nulla blokkot többször is Blowfish-sel titkosítva frissítik a P- és S-értékeket. Ez a folyamat számításigényes: minden új kulcs beállításához jelentős előfeldolgozás szükséges.
Teljesítmény és alkalmazások
A Blowfish szoftveres implementációkban általában jó titkosítási sebességet ad. Ugyanakkor a kulcsütemezés lassúsága miatt a kulcscsere költséges: minden új kulcs előállítása körülbelül annyi időt vesz igénybe, mint néhány kilobájtnyi adat titkosítása (a gyakorlatban ~4 KB). Emiatt a Blowfish nem a legjobb választás olyan alkalmazásokhoz, ahol gyakori kulcscserére van szükség vagy nagyon korlátozott erőforrások állnak rendelkezésre (például korai beágyazott rendszerek, kisebb intelligens kártyák).
Viszont ez a lassú kulcselőállítás előny is lehet: egyes jelszóhashelési eljárások kifejezetten kihasználják ezt a tulajdonságot a brute‑force és szótár alapú támadások lassítására. Például az OpenBSD-ben használt jelszóhashing módszer egy Blowfish‑ből származtatott algoritmust alkalmaz (lásd alább bcrypt), amely az erőforrásigény növelésével jobb védelmet nyújt a támadások ellen.
Biztonság és kriptoanalízis
A Blowfish 1993-as megjelenése után sokáig nem volt ismert hatékony kriptoanalitikai módszer a teljes 16 kör megtörésére, és a gyakorlatban a nyers erővel történő keresés (brute force) maradt az elsődleges lehetőség. Azonban a tudományos kutatás során több eredmény is született a gyenge és redukált körszámú változatokkal kapcsolatban:
- 1996-ban Serge Vaudenay ismert szövegű támadással kapcsolatos eredményeket közölt: talált olyan ismert szövegű támadást és bizonyos gyenge kulcscsoportokat, amelyek redukált feltételek mellett sebezhetők. Ezek a módszerek általában feltételezik a kulcsfüggő S-dobozok ismeretét, így nem alkalmazhatók egyszerűen a standard, teljes Blowfish-re.
- Vincent Rijmen doktori munkájában egy másodrendű differenciális támadást mutatott be, amely redukált (néhány körös) változatok feltörésére alkalmas — például négy kör megtörhető, de ez nem vonatkozik a teljes 16 körre.
- Gyakorlati implementációk terén is találtak hibákat: 1996-ban egy nyilvános C implementációban például jelkiterjesztésből adódó (sign-extension) hiba volt, amely implementációs sebezhetőséget jelentett.
Bár a Blowfish teljes körű változatáról 2008-ig nem volt nyilvánosan ismert hatékony kriptoanalízis, az algoritmusnak van egy alapvető korlátja: a 64 bites blokkméret miatt nagy adatmennyiség esetén a kollíziók (az ún. birthday paradox) miatt biztonsági aggályok merülnek fel — ma már gyakran előnyben részesítik a 128 bites blokkos titkosítókat (például AES), amelyek ilyen szempontból erősebbek.
Gyakorlati használat és ajánlások
A Blowfish ma is használatban van bizonyos rendszerekben és szoftverekben, de új tervekhez általában nem javasolják. Bruce Schneier 2007-ben maga is megjegyezte, hogy bár a Blowfish továbbra is használható, ő inkább az újabb Twofish algoritmus alkalmazását ajánlja.
Egy fontos, Blowfishből származó gyakorlati alkalmazás a bcrypt jelszóhash, amelyet Niels Provos és David Mazières dolgozott ki. A bcrypt egy módosított, "expensive key schedule" változatot (EksBlowfish) használ, ami tudatosan lassúvá teszi a hash számítását, ezáltal megnehezíti a tömeges jelszótörést.
Összefoglalás
- Előnyök: ingyenesen használható, egyszerűen implementálható, szoftveres környezetben jó sebességet ad, kulcsfüggő S-dobozok növelik a tervezési bonyolultságot a támadóknak.
- Hátrányok: 64 bites blokkméret korlátai nagy adatmennyiség mellett, lassú kulcsütemezés gyakori kulcscserénél problémás, bizonyos redukált vagy speciális feltételek mellett ismert kriptoanalitikai eredmények.
- Ajánlás: új rendszerekhez ma inkább modern alternatívákat (például AES, Twofish, illetve modern stream-algoritmusok, vagy specifikus jelszóhasheléshez bcrypt/scrypt/Argon2) érdemes választani.
Kapcsolódó oldalak
- Fejlett titkosítási szabvány
- eSTREAM - Az EU által végzett, új adatfolyam-kódok értékelése.
- Twofish
- MacGuffin
Kérdések és válaszok
K: Mi az a Blowfish?
V: A Blowfish egy kulcsos, szimmetrikus blokkos titkosítás, amelyet 1993-ban Bruce Schneier hozott létre. Azóta számos titkosítási termékben szerepel.
K: Mire készült a Blowfish?
V: A Blowfish általános célú algoritmusként készült a régi DES algoritmus helyettesítésére, valamint a többi titkosítási algoritmus problémáinak és nehézségeinek kiküszöbölésére.
K: Milyen hosszú lehet a Blowfish kulcshossza?
V: A Blowfish kulcshossza 0-tól 448 bitig terjedhet.
K: Milyen jellemzői vannak a Blowfish kialakításának?
V: A tervezés néhány jellemzője a kulcsfüggő S-dobozok és a nagyon összetett kulcsütemezés.
K: Van-e ismert kriptoanalízis a Blowfish teljes körös változatán?
V: 2008 óta nem ismert, hogy a nyers erővel történő kereséstől eltekintve hogyan lehetne feltörni a teljes 16 fordulót.
K: Milyen típusú támadást talált Serge Vaudenay a Blowfish ellen?
V: Serge Vaudenay talált egy olyan ismert szövegű támadást, amelynek feltöréséhez 28r + 1 ismert szövegű szövegre van szükség, ahol r a körök száma. A gyenge kulcsok egy olyan osztályát is megtalálta, amely ugyanezzel a támadással 24r + 1 ismert egyszerű szöveggel is felismerhető és feltörhető.
Kérdés: Bruce Schneier mostantól a Twofish használatát ajánlja a Blowfish helyett?
V: Igen, Bruce Schneier a Twofish használatát ajánlja a Blowfish helyett, mivel a régebbi algoritmusokhoz, például a DES-hez vagy még az újabbakhoz, például az AES-hez képest is jobb biztonsági intézkedéseket tartalmaz.
Keres