Kriptografijoje "Twofish" yra simetrinio rakto blokinis šifras, kurio bloko dydis yra 128 bitai, o rakto ilgis - iki 256 bitų. Twofish buvo sukurtas su tikslu suteikti saugų, lankstų ir efektyvų blokinį šifrą tiek programinei, tiek aparatinei įgyvendinimui.
Konkursas ir istorija
1997 m. NIST paskelbė konkursą DES įpėdiniui, kuris bus vadinamas AES, išrinkti. Twofish buvo vienas iš penkių Advanced Encryption Standard konkurso finalininkų, tačiau nebuvo pasirinktas kaip standartas. Nors Twofish nelaimėjo AES konkurso, jis išliko vertinamas dėl savo dizaino kūrybiškumo ir stiprios saugumo analizės.
Struktūra ir pagrindinės savybės
"Twofish" yra glaudžiai susijęs su ankstesniu blokiniu šifru Blowfish", tačiau turi reikšmingų skirtumų ir patobulinimų. Pagrindinės Twofish ypatybės:
- Raktų dydžiai: palaikomi iki 256 bitų (dažniausiai 128, 192 ir 256 bitų variantai).
- Bloko dydis: 128 bitų.
- Feistelio struktūra: naudojama 16 raundų Feistelio tinklo architektūra kartu su įėjimo ir išėjimo whitening (raktų maskavimu) mechanizmu.
- S-dėžutės: iš anksto apskaičiuotos, nuo rakto priklausomos S-dėžučių naudojimas — tai leidžia, kad dalis S-laukų formavimo priklauso nuo rakto ir taip padidinamas šifro atsparumas tam tikroms atakoms.
- Sudėtingas raktų tvarkaraštis: Twofish naudoja gana sudėtingą raktų tvarkaraštį, kurio metu raktas dalijamas į dalis, iš kurių viena naudojama tiesioginiam šifravimui, o kita — šifro vidiniams parametrams (pvz., S-laukams).
- MDS matrica ir q-laukai: h funkcija naudoja fiksuotas q-pakeitimo lenteles ir MDS (Maximum Distance Separable) matricą, kad užtikrintų gerą išsklaidymą.
- PHT transformacija: taikoma pseudo-Hadamardo transformacija (PHT), kilusi iš SAFER šeimos šifrų.
Dizainas trumpai (techniniai aspektai)
Twofish raktų tvarkaraštis ir S-laukų generavimo mechanizmas naudoja klavišų padalijimą: pusė n bitų rakto naudojama kaip tikrasis šifravimo raktas, o kita pusė n bitų rakto — kaip parametrai S-dėžutėms (nuo rakto priklausantys S-laukai). S-dėžučių konstrukcija remiasi fiksuotomis q-permutacijomis ir MDS transformacijomis, todėl jos yra greitos programiniame ir aparatūriniame įgyvendinime, bet kartu raktui jautrios. Twofish taip pat naudoja įėjimo ir išėjimo raktų maskavimą (whitening), kas padidina atsparumą tiesioginėms raktų atakoms.
Veikimas ir našumas
Daugumoje programinės įrangos platformų "Twofish" yra šiek tiek lėtesnis nei "Rijndael" (pasirinktas "Advanced Encryption Standard" algoritmas) 128 bitų raktams, bet šiek tiek greitesnis 256 bitų raktams. Realiuose diegimuose našumas labai priklauso nuo optimizacijų: asamblėjos lygio optimizacijos ar specialios dėžutės (table) metodikos gali ženkliai pagerinti greitį. Aparatinė implementacija taip pat dažnai išlygina skirtumus tarp algoritmų.
Saugumas ir kriptoanalizė
Twofish buvo intensyviai analizuotas AES konkurso metu ir vėliau. Nėra žinomų praktiškai pritaikomų atakų, kurios prieštarautų pilno 16 raundų Twofish saugumui bei leistų efektyviau nei bruteforce atskleisti pilną raktą. Vis dėlto egzistuoja teorinės ar sumažintų raundų versijų atakos (pvz., susijusios su related-key modeliu), kurios nepažeidžia pilnos implementacijos praktinio saugumo, bet yra svarbios akademinei kriptoanalizei.
Autoriai ir analizės komanda
"Twofish" sukūrė Bruce'as Schneieras, Johnas Kelsey, Dougas Whitingas, Davidas Wagneris, Chrisas Hallas ir Nielsas Fergusonas; išplėstinę "Twofish" komandą", kuri susitiko atlikti tolesnę "Twofish" ir kitų AES konkurentų kriptoanalizę, sudarė Stefanas Lucksas, Tadayoshi Kohno ir Mike'as Stay. Dėl šios plačios atviros analizės Twofish dizainas yra gerai ištirtas ir dokumentuotas.
Licencijavimas ir prieinamumas
"Twofish" algoritmu gali naudotis visi norintys be jokių apribojimų. "Twofish" šifras nėra patentuotas, o jo specifikacijos programinės įrangos pavyzdys yra viešai prieinamas. Dėl atviro statuso yra prieinami referenciniai įgyvendinimai ir šaltinio kodas, todėl jį laisvai gali integruoti tiek atviro kodo, tiek komercinės programos.
Praktinis naudojimas
Nors "Twofish" nėra taip plačiai paplitęs kaip kai kurie senesni ar populiaresni algoritmai (pvz., Blowfish, kuris buvo prieinamas ilgesnį laiką), jis vis dar naudojamas kai kuriuose projektuose ir siūlomas kaip saugi alternatyva AES kai kuriose programose. Dėl geros saugumo ir našumo pusiausvyros jis yra tinkamas pasirinkimas tiek saugiai duomenų šifravimui diske, tiek kitoms simetrinio šifravimo užduotims.
Apibendrinant: Twofish yra techniškai subalansuotas, gerai ištirtas ir laisvai prieinamas blokinis šifras, skirtas 128 bitų blokams ir iki 256 bitų raktams — vertingas įrankis kriptografiniame arsenale, nors ir netapęs AES standarto dalimi.