Twofish - 128/256 bites blokkos titkosítás, AES-versenyző ismertető
Twofish: nyílt, szabadon használható 128/256 bites blokkos titkosítás — AES-versenyző, kulcsfüggő S-dobozokkal, erős kulcsütemezéssel és hatékony, biztonságos alternatívával.
A kriptográfiában a Twofish egy szimmetrikus kulcsú, blokkos titkosítás, amelynek blokkmérete 128 bit, a kulcs hossza pedig legfeljebb 256 bit lehet (gyakran használt kulcsméretek: 128 és 256 bit).
Háttér és történet
1997-ben a NIST versenyt hirdetett a DES utódjának kiválasztására AES néven. A Twofish az Advanced Encryption Standard verseny öt döntősének egyike volt, de végül nem választották ki szabványnak (a győztes az akkor kiválasztott Rijndael lett).
A Twofish tervezői: Bruce Schneier, John Kelsey, Doug Whiting, David Wagner, Chris Hall és Niels Ferguson. A tervezés után egy kibővített csoport (amelyhez Stefan Lucks, Tadayoshi Kohno és Mike Stay is tartozott) további AES-versenyzők és a Twofish kriptoanalízisével foglalkozott.
Tervezés és működés
A Twofish rokona a korábbi Blowfish blokkos titkosításnak, de több modernebb elemet is alkalmaz. Főbb jellemzői:
- Feistel-struktúra: a Twofish ugyanazt a Feistel-szerkezetet használja, mint a DES, azaz az adatblokk felosztva és többször egymásra alkalmazott kört (rundot) használ.
- Rundok száma: a Twofish tipikusan 16 fordulaton (round) keresztül dolgozik.
- Kulcsfüggő S-dobozok: a Twofish előre kiszámított, a kulcstól függő S-dobozokat alkalmaz, amelyek a titkosítás során nem statikus táblák, hanem a kulcsmaterialból származtatott, speciális leképezések.
- Komplex kulcsütemezés: a bemeneti kulcsból több előfeldolgozott al-kulcs és S-doboz-állapot származik, amelyeket a titkosítási körök és a be-/kikitöltés (whitening) során használnak.
- Matematikai elemek: a Twofish felhasználja több korábbi ötletet is, például a SAFER családból ismert pszeudo-Hadamard-transzformációt (PHT), valamint MDS (Maximum Distance Separable) mátrixműveleteket és Reed–Solomon alapú kulcskerék-származtatást a S-dobozok létrehozásához.
- Kulcskiegészítés (key whitening): a bemenet és a kimenet egyes részeit a kulcstól származtatott értékekkel XOR-olják, ez növeli a teljes struktúra ellenállását a bizonyos típusú támadásokkal szemben.
Teljesítmény és implementáció
A Twofish különböző platformokon eltérően teljesít. Általánosan elmondható, hogy
- a legtöbb szoftverplatformon 128 bites kulcsok esetén a Twofish valamivel lassabb, mint a Rijndael (az AES választott algoritmusa),
- viszont 256 bites kulcsok használatakor sok implementációnál a Twofish hatékonyabb lehet.
A Twofish implementálható mind szoftverben, mind hardverben; a kulcsfüggő S-dobozok előre számítása javíthatja a futási sebességet, de megnöveli a memóriakövetelményt. Számos kriptográfiai könyvtár és implementáció elérhető referenciaként, a forráskódot a tervezők és közösség több helyen közzétette.
Biztonság és kriptoanalízis
A Twofishről több kriptoanalitikus munka látott napvilágot. Fontosabb pontok:
- a teljes, 16 körös Twofishre nincs ismert gyakorlatban alkalmazható gyengeség vagy gyorsabb általános támadás, mint a nyers kulcsterjesztés (brute-force) – a legjobb ismert kriptoanalitikus eredmények általában redukált körszámú változatokra vonatkoznak;
- különböző elméleti és redukált-round támadások (pl. differenciál- és lineáris kriptoanalízis variánsai, bizonyos típusú kapcsolt-kulcs támadások) publikálódtak, de ezek nem adtak életképes módszert a teljes Twofish megtörésére;
- mint minden blokkos titkosításnál, a gyakorlatban a biztonságot nemcsak a magát a blokkkódot, hanem a használati mód (módusok: CBC, CTR, GCM, XTS stb.), a kulcskezelés, valamint a véletlenszámok és kezdeti vektorok helyes használata határozza meg.
Licenc, szabad felhasználás és elterjedtség
A Twofish algoritmust bárki szabadon, mindenféle korlátozás nélkül használhatja. A Twofish titkosítást nem szabadalmaztatták, és a specifikációját tartalmazó szoftverpéldányt közkinccsé tették. Emiatt sok projekt számára vonzó volt alternatívát jelenteni az AES mellett.
Ennek ellenére a Twofish nem vált olyan széles körben használt de facto szabvánnyá, mint egyes más algoritmusok (például a Blowfish, amely már hosszabb ideje elérhető, illetve az AES/Rijndael). A döntésnél gyakran szerepet játszott az AES széleskörű szabványosítása és az interoperabilitás.
Alkalmazási javaslatok
Ha új rendszert tervez, érdemes szem előtt tartani:
- interoperabilitás és szabványok miatt gyakran az AES az első választás;
- a Twofish jó, erős alternatíva lehet, ha szabad, szabadalmaztatás-mentes megoldásra van szükség, vagy ha adott alkalmazásnál a Twofish teljesítmény- és memóriaprofilja előnyösebb;
- mindig használjon jól bevált működési módokat (pl. AEAD módokat, ha integritás is fontos), és gondoskodjon biztonságos kulcskezelésről, véletlenszám-generálásról és helyes paddingról.
Összefoglalva: a Twofish egy jól megtervezett, erős blokkos titkosítási algoritmus, amely gazdag elméleti hátteret és több gyakorlati implementációt is kínál. Bár az AES lett a hivatalos szabvány, a Twofish továbbra is használható és biztonságos alternatíva marad speciális esetekben.
Cryptanalysis
2008 óta a Twofish blokkos titkosítás legjobb közzétett kriptoanalízise a teljes 16 körös változat csonka differenciális kriptoanalízise. A cikk azt állítja, hogy a csonka differenciálok támadásának valószínűsége blokkonként 2-57,3, és hogy körülbelül 251 kiválasztott egyszerű szöveg (32 PiB értékű adat) szükséges ahhoz, hogy egy jó pár csonka differenciál párat találjunk.
Bruce Schneier egy 2005-ös blogbejegyzésben válaszol, hogy ez a cikk nem egy teljes kriptoanalitikai támadást mutat be, hanem csak néhány feltételezett differenciális jellemzőt: "De a Twofish még elméleti szempontból sem tört el még csak távolról sem. A 2000-es publikálás óta nem történt semmilyen kiterjesztés ezekre az eredményekre".
Kapcsolódó oldalak
- Blowfish (titkosítás)
- Fejlett titkosítási szabvány
- Adattitkosítási szabvány
Kérdések és válaszok
K: Mi az a Kéthal?
V: A Twofish egy szimmetrikus kulcsú blokkos titkosítás, amelynek blokkmérete 128 bit, a kulcs hossza pedig legfeljebb 256 bit lehet.
K: Hogyan kapcsolódik a Twofish a korábbi Blowfish blokkos titkosításhoz?
V: A Twofish fő jellemzői az előre kiszámított kulcsfüggő S-dobozok használata és egy viszonylag összetett kulcsütemezés. Az n bites kulcs egyik fele a tényleges titkosítási kulcs, az n bites kulcs másik fele pedig a titkosítási algoritmus módosítására szolgál (kulcsfüggő S-dobozok).
K: A Twofish-t választották fejlett titkosítási szabványnak?
V: Nem, 1997-ben a NIST versenyt hirdetett a DES utódjának kiválasztására, amely AES néven vált volna ismertté, azonban a Twofish-t nem választották ki szabványnak.
K: Milyen elemeket használ a Twofish más tervekből?
V: A Twofish más tervezetek egyes elemeit használja; például a SAFER kódolócsaládból származó pszeudo-Hadamard-transzformációt (PHT).
K: Használ Feistel-struktúrát, mint a DES?
V: Igen, a DES-hez hasonlóan Feistel-struktúrát használ.
K: Gyorsabb, mint a Rijndael 128 bites kulcsok esetén?
V: A legtöbb szoftverplatformon a Twofish 128 bites kulcsok esetén valamivel lassabb, mint a Rijndael.
K: 256 bites kulcsok esetén gyorsabb, mint a Rijndael?
V: 256 bites kulcsok esetén valamivel gyorsabb, mint a Rijndael.
Keres