V kriptografiji je Twofish blokovna šifra s simetričnim ključem z velikostjo bloka 128 bitov in dolžino ključa do 256 bitov. Podpira običajne dolžine ključev 128, 192 in 256 bitov.
Zgodovina in kontekst
Leta 1997 je NIST razpisal natečaj za izbiro naslednika DES-a, imenovanega AES. Twofish je bil med petimi finalisti natečaja Advanced Encryption Standard, vendar ni bil izbran za standard. Čeprav ni postal AES, je Twofish ostal pomemben primer sodobne simetrične kriptografije in je bil podroben predmet javne kriptoanalize.
Zasnova in glavne značilnosti
Twofish je povezan s prejšnjo blokovno šifro Blowfish, vendar prinaša številne novosti in spremembe. Glavne zasnovne značilnosti so:
- Feistelova struktura: Twofish uporablja 16 rund Feistelovega tipa, podobno kot DES, vendar z drugačno notranjo funkcijo in ključnim razporedom.
- Ključem odvisne S-polja: uporablja vnaprej izračunana polj S, ki so odvisna od ključa, kar pomeni, da se S-polja izračunajo na podlagi glavnega ključa in nato uporabijo pri šifriranju.
- Kompleksen razpored ključev: Twofish ima razmeroma zapleten razpored ključev, vključno s tako imenovanimi "whitening" ključi (XOR pred in po rundah) in številnimi podključi za posamezne runde.
- Transformacije in algebraični gradniki: Twofish uporablja psevdo-Hadamardovo transformacijo (PHT) iz družine šifer SAFER in matriko MDS (Maximum Distance Separable), ki zagotavlja dobro difuzijo. Del funkcije h() vključuje Q-permutacije in MDS, da doseže kombinacijo substitucije in difuzije.
- Praktična delitev ključa: polovica n-bitnega ključa se uporablja kot dejanski šifrirni ključ, druga polovica pa se uporablja za spreminjanje šifrirnega algoritma (ustvarjanje od ključa odvisnih polj S in podključev).
Algoritmični detajli (na kratko)
Osrednja notranja funkcija (imenovana g ali h, odvisno od predstavitve) vključuje kombinacijo ključem odvisnih S-polj, fikcionalnih Q-permutacij, MDS-matrike in PHT. Podatkovni blok se pred in po rundah "belih" (whitened) z delom izpeljanih ključev, kar poveča odpornost proti nekaterim kriptoanalitičnim tehnikam. Ključna operacija je zasnovana tako, da olajša implementacijo v strojni in programski opremi ter zagotavlja uravnoteženo kombinacijo varnosti in hitrosti.
Varnost in kriptoanaliza
Twofish je bil predmet obsežne javne kriptoanalize tako med samim natečajem AES kot po njem. Do danes za polno 16-rundno različico Twofisha ni znanih praktičnih prelomov, ki bi ogrozili varnost pri pravilni uporabi z močnim ključem. Obstajajo teoretični in izboljšani napadi na zmanjšane različice šifre ali v modelih z relativnimi ključi (related-key attacks), a ti napadi običajno ne vplivajo na pravilno implementirano, polno različico z neodvisnimi ključi.
V praksi velja, da Twofish nudi visoko stopnjo varnosti, primerljivo z ostalimi sodobnimi simetričnimi šiframi, če se uporabljajo ustrezne dolžine ključev in varne metode upravljanja ključev.
Zmogljivost in implementacije
Na večini programskih platform je Twofish pri 128-bitnih ključih nekoliko počasnejši od algoritma Rijndael (izbrani algoritem za Advanced Encryption Standard), pri 256-bitnih ključih pa je v nekaterih implementacijah lahko nekoliko hitrejši, predvsem zaradi razporeditve dela pri izračunu podključev in S-polj. Twofish je primeren tako za programske kot strojne implementacije; nekatere knjižnice in orodja ga podpirajo kot dodatno možnost šifriranja.
Licenca, razpoložljivost in uporaba
Algoritem Twofish lahko uporablja vsakdo brez kakršnih koli omejitev. Šifra Twofish ni bila patentirana, primer programske opreme z njeno specifikacijo pa je bil objavljen v javni domeni. Zaradi tega je primerna za uporabo v odprtokodnih projektih in komercialnih izdelkih brez licenčnin omejitev.
Kljub temu se Twofish ne uporablja tako pogosto kot nekatere druge šifre (na primer Blowfish ali AES), saj je AES postal široko sprejet standard. Vendar Twofish ostaja privlačna izbira tam, kjer želijo razvijalci alternative AES ali dodatno diverzifikacijo šifrirnih algoritmov.
Avtorji in dodatna analiza
Twofish so zasnovali Bruce Schneier, John Kelsey, Doug Whiting, David Wagner, Chris Hall in Niels Ferguson; v "razširjeni ekipi Twofish", ki se je sestala, da bi opravila nadaljnjo kriptoanalizo Twofisha in drugih konkurentov AES, so bili Stefan Lucks, Tadayoshi Kohno in Mike Stay. Po objavi so številni raziskovalci neodvisno preverjali varnost in zmogljivost šifre.
Za odločitev o uporabi Twofisha v konkretni aplikaciji upoštevajte zahteve glede združljivosti, razpoložljivosti implementacij, strojne podpore in politike organizacije glede standardov (npr. prednost uporabi AES tam, kjer je zahtevana skladnost s standardi).