Kriptogrāfijā Twofish ir simetriskās atslēgas bloka šifrs ar 128 bitu bloka lielumu un atslēgas garumu līdz 256 bitiem. Twofish atbalsta atslēgu garumus 128, 192 un 256 bitu līmeņos.
1997. gadā NIST izsludināja konkursu, lai izvēlētos DES pēcteci, kas būtu pazīstams kā AES, Twofish bija viens no pieciem konkursa par Advanced Encryption Standard finālistiem, bet netika izvēlēts par standartu. Izvēlētais variants bija Rijndael, kas tagad tiek plaši saukts par AES.
Dizains un galvenās iezīmes
Twofish ir radniecīgs agrākajam blokķiprāfam Blowfish, taču ir ievērojami modernizēts un sarežģītāks. Galvenās dizaina iezīmes ir:
- Feistela tipa struktūra ar 16 kārtām (rounds), kas nodrošina spēcīgu diferenciāciju starp bloku ievadi un izvadi, līdzīgi kā DES.
- Atslēgas atkarīgas (key-dependent) un daļēji iepriekš aprēķinātas S-box, kas padara šifrēšanas transformācijas atkarīgas no konkrētās atslēgas un palielina pretestību pret vairākām klasiskām analīzes metodēm.
- Pseido-Hadamarda transformācija (PHT) — elementāra lineāra apvienošanas operācija, ko Twofish izmanto datu sajaukšanai (ši elements ir aizgūts no SAFER šifru saimes).
- MDS (Maximum Distance Separable) matricas izmantošana, lai panāktu labu izgaismošanas (diffusion) īpašību starp baitiem (baitu apmaiņas un multiplācijas operācijas Galois lauka laukā).
- “Whitening” — šifrēšanas priekšā un beigās tiek piemērotas papildus XOR atslēgas (pre- un post-whitening), lai sarežģītu tiešu atslēgas izvilkšanu.
- Atslēgas grafiks (key schedule), kas ģenerē aptuveni 40 32-bitu apakšatslēgas (subkeys): 8 apakšatslēgas whitening operācijām un 32 apakšatslēgas 16 kārtu darbībām (divas uz katru kārtu).
Tehniskais apraksts īsumā
Twofish darbu pamatā veido g-funkcija (g-function), kurā ienākošie 32 bitu vārdi tiek sadalīti baitos, katrs pats tiek transformēts ar atslēgas atkarīgajām S-boksēm, pēc tam baitu vektors reizina ar MDS matricu, lai nodrošinātu spēcīgu starpbaitu sajaukšanos. Rezultāts tiek apvienots ar PHT un apstrādāts Feistela kārtu mehānikā. Galvenā atslēga tiek sadalīta — viena daļa tiek izmantota kā faktiskā šifrēšanas atslēga, bet otra daļa tiek izmantota S-bokšu un atslēgu grafika modifikācijai, padarot S-bokses atslēgas atkarīgas.
Veiktspēja un implementācija
Twofish sākotnēji tika izstrādāts, domājot par programmatūras veiktspēju uz 32 bitu procesoriem, kur tabulu (lookup table) izmantošana un byte-orientētās operācijas ir efektīvas. Tomēr atslēgas atkarīgās S-bokses nozīmē, ka atslēgas sagatavošana (key setup) var būt dārgāka — S-bokšu aprēķināšana prasa laiku pirms šifrēšanas sākuma.
Vairumā programmatūras platformu Twofish ar 128 bitu atslēgām ir nedaudz lēnāks nekā Rijndael (izvēlētais algoritms Advanced Encryption Standard), bet 256 bitu atslēgām reizēm ir nedaudz ātrāks, jo Twofish atbalsta lielākas atslēgas bez būtiskas arhitektūras pārmaiņas. Aparatūras realizācijās (piem., specializēti čipi vai instrukciju paplašinājumi) rezultāti var atšķirties.
Drošība un kriptoanalīze
Twofish ir bijis plaši publiski analizēts kopš tā publicēšanas. Lielākā daļa kriptoanalīzes rezultātu attiecas uz samazinātu kārtu versijām vai uz specifiskiem uzbrukumu modeļiem (piem., related-key uzbrukumi). Lai gan pastāv teorētiski vājumi dažos analizētos modeļos, līdz šim nav zināms praktisks uzbrukums, kas pārspētu bruteforce pilnām 16 kārtām ar reāli realizējamu resursu apjomu. Tāpēc Twofish tiek uzskatīts par drošu mūsdienīgu bloka šifru, ja tiek izmantota pietiekami gara atslēga (īsākas atslēgas riskē ar bruteforce uzbrukumu).
Izmantošana un atbalsts
Twofish nav tik plaši izplatīts kā Blowfish vai AES, taču to atbalsta vairākas programmas un projekti. Piemēram, Twofish bija pieejams kā šifrēšanas variants šifrēšanas programmatūrā (ieskaitot populāras diska šifrēšanas programmas un paroļu glabāšanas rīkus), un to var atrast arī kā iespēju dažos atvērtā koda kriptogrāfijas rīkos. Daudzas atvērtā koda implementācijas un bibliotēkas nodrošina Twofish atbalstu vai ir pieejamas kā paplašinājumi.
Licencēšana
Twofish algoritmu ikviens var izmantot bez jebkādiem ierobežojumiem. Twofish šifrs nav patentēts, un tā specifikācijas programmatūras piemērs ir publiskots. Tas padara Twofish par pievilcīgu izvēli projektiem, kur prioritāte ir brīvi izmantojams un licenciāli nesaistīts algoritms.
Kopsavilkums
Twofish ir spēcīgs, rūpīgi izstrādāts bloka šifrs ar 128 bitu bloku un atslēgas garumiem līdz 256 bitiem, kas apvieno vairākas modernās konstrukcijas idejas (atslēgas atkarīgas S-bokses, MDS matricu, PHT, whitening). Lai gan tas netika izvēlēts par AES standartu, Twofish joprojām ir droša un brīvi izmantojama alternatīva ar atbalstu vairākās programmatūras realizācijās.