Twofish krüptograafias sümmeetriline 128-bitine plokkšifreering ja AESi finalist
Krüptograafias on Twofish sümmeetrilise võtmega plokkšifreering, mille plokisuurus on 128 bitti ja võtmepikkus kuni 256 bitti.
1997. aastal kuulutas NIST välja konkursi, et valida DESi järeltulija, mida tuntakse AESi nime all, Twofish oli üks viiest finalistist Advanced Encryption Standardi konkursil, kuid seda ei valitud standardiks.
Twofish on seotud varasema plokkšifri Blowfishiga. Twofishi peamised omadused on eelnevalt arvutatud võtmest sõltuvate S-kastide kasutamine ja suhteliselt keeruline võtmete ajakava. Ühte poolt n-bitisest võtmest kasutatakse tegeliku krüpteerimisvõttena ja teist poolt n-bitisest võtmest kasutatakse krüpteerimisalgoritmi muutmiseks (võtmest sõltuvad S-kastid). Twofish kasutab mõningaid elemente teistest skeemidest; näiteks SAFERi šifrite perekonna pseudo-Hadamard-transformatsioon (PHT). Twofish kasutab sama Feisteli struktuuri nagu DES.
Enamikul tarkvaraplatvormidel on Twofish 128-bitiste võtmete puhul veidi aeglasem kui Rijndael (Advanced Encryption Standardi valitud algoritm), kuid 256-bitiste võtmete puhul mõnevõrra kiirem.
Twofishi kavandasid Bruce Schneier, John Kelsey, Doug Whiting, David Wagner, Chris Hall ja Niels Ferguson; Twofishi ja teiste AESi konkurentide edasise krüptoanalüüsi tegemiseks kohtunud "laiendatud Twofishi meeskonda" kuulusid Stefan Lucks, Tadayoshi Kohno ja Mike Stay.
Twofishi algoritm on kõigile tasuta ja ilma igasuguste piiranguteta kasutatav. Twofishi salastust ei ole patenteeritud ja selle spetsifikatsiooni tarkvara näide on avalikustatud. Twofish ei ole siiski laialdaselt kasutusel nagu Blowfish, mis on olnud kättesaadav juba pikemat aega.
Kuidas Twofish töötab
Twofish on 16-vooruline plokkšiffer, mis töötab 128-bitiste plokkidega. Algoritm kasutab üldistatud Feisteli tüüpi võrku koos pre- ja post-valgendamise (pre- ja post-whitening) võtmetega, mis suurendavad rünnakute raskust. Šifris kasutatakse nelja võtmest sõltuvat S-kasti, mis on eelnevalt arvutatud võtme põhjal ning mida rakenduse käivitamisel konstrueeritakse. Lisaks kasutatakse mitmeid matemaatilisi komponente:
- Pseudo-Hadamard-transformatsioon (PHT) andmete segamiseks ja difusiooni parandamiseks.
- MDS (Maximum Distance Separable) maatriksit, mis tagab hea hajutuse ja kasutatakse S-kastide väljundi kombineerimiseks (pärineb Reed–Solomon tüüpi konstruktsioonist GF(256)-s).
- Keerukas võtmete ajakava, mille käigus tuletatakse ründevastupidavad alamvõtmed ja S-kastide võtmed peavõtmest.
Võtmest sõltuvad S-kastid on Twofishi eripära: osa algvõtmest muudetakse selliselt, et šifri sees olevad S-kastid ei ole staatilised (nagu paljudes teistes šifrites), vaid sõltuvad konkreetsest võtmesätetest, mis raskendab universaalsete analüütiliste lähenduste rakendamist.
Turvalisus ja krüptoanalüüs
Twofish läbis AESi konkurssi ajal ja pärast seda ulatusliku krüptoanalüüsi. Täieliku 16-voorulise Twofishi kohta pole avaldatud praktilist rünnakut, mis oleks tõhusam kui jõurünnak (brute force) üldiselt aktsepteeritud võtme pikkuste korral. Samuti on avaldatud mitmeid krüptoanalüütilisi tulemusi, mis puudutavad vähendatud voorude variante või rünnakuid ebarealistlikes tingimustes (näiteks seotud-võtme ehk related-key rünnakud), kuid need ei ole tavakasutuse seisukohalt praktilised.
Krüptanalüütikud on suutnud leida nõrkusi ja konstrueerida teoreetilisi rünnakuid, mis aitavad mõista šifri tugevust ja piiranguid, kuid Twofish on üldiselt endiselt tunnistatud tugevaks šifriks, kui kasutatakse piisavat võtme pikkust ja korrektselt rakendatud režiime (nt AESi puhul tavaliselt kasutatavad CBC, CTR, GCM jms vastavalt kasutusjuhtumile).
Tõhusus ja rakendused
Praktikas on Twofish tarkvaras ja riistvaras hästi rakendatav. Rohkem detaili:
- Võtmeseadistuse (key setup) kulud on suhteliselt suured, sest tuleb konstrueerida võtmesõltuvad S-kastid; kui sama võti jääb kauaks kasutusse, saab selle eelseadistuse kulu amortiseerida.
- Enamikul platvormidel on Twofish 128-bitiste võtmete puhul mõõdukamalt aeglasem kui Rijndael (AES), kuid 256-bitiste võtmete puhul võib Twofish mõnel platvormil olla konkurentsivõimeline või kiirem — eriti siis, kui võtme ettevalmistus on juba tehtud.
- Twofish on kasutusel mitmetes tarkvara- ja kettakryptograafia projektides: selle tugi on lisatud mitmetesse krüptograafilistesse teekidesse (nt Crypto++, Bouncy Castle, Botan) ning seda on kasutatud ka kettakirjutuse tarkvaras nagu TrueCrypt/VeraCrypt (TrueCrypti valikutest oli Twofish üks toetatud šifreist ja seda võib leida ka mõne müügipaketi konfiguratsioonides).
Implementatsioonid, litsents ja kättesaadavus
Twofishi lähtekood ja spetsifikatsioon on avalikult kättesaadavad ning šifrit ei ole patenteeritud. Autoriõigused ei piira tavakasutust, mistõttu Twofish on tasuta ja ilma igasuguste piiranguteta kasutamiseks.
Autori poolt avaldatud näidiskoodi ja sõltumatute teekide implementatsioonide tõttu on Twofish kergesti integreeritav erinevatesse süsteemidesse. Siiski on AES (Rijndael) tänu standardile ja laiale toetusele levinum valik nii riistvaras kui ka tarkvaras.
Kokkuvõte
Twofish on tugev, hästi analüüsitud ja paindlik plokkšifriks mõeldud algoritm, mille plokisuurus on 128 bitti ja maksimaalne võtmepikkus 256 bitti. Kuigi see ei saanud AESi standardiks, on Twofish endiselt usaldusväärne ja vaba alternatiiv neile, kes otsivad patente vabu plokkšifreid või soovivad kasutada võtmesõltuvaid S-kaste ja keerukat võtmeajakava.
Krüptoanalüüs
2008. aasta seisuga on parim avaldatud Twofishi plokkšifri krüptoanalüüs on 16-ringilise täisversiooni kärbitud diferentsiaalne krüptoanalüüs. Artiklis väidetakse, et kärbitud diferentsiaalrünnakute tõenäosus on 2-57,3 ploki kohta ja et hea paari kärbitud diferentsiaalide leidmiseks on vaja umbes 251 valitud algteksti (32 PiB väärtuses andmeid).
Bruce Schneier vastab 2005. aasta blogi sissekandes, et selles artiklis ei esitata täielikku krüptoanalüütilist rünnakut, vaid ainult mõned oletatavad eriomadused: "Kuid isegi teoreetilisest vaatenurgast vaadatuna ei ole Twofish isegi kaugeltki murdunud. Alates nende tulemuste avaldamisest 2000. aastal ei ole nende tulemusi laiendatud".
Seotud leheküljed
- Blowfish (šifreering)
- Täiustatud krüpteerimisstandard
- Andmete krüpteerimise standard
Küsimused ja vastused
K: Mis on Twofish?
V: Twofish on sümmeetrilise võtmega plokkšifreering, mille plokisuurus on 128 bitti ja võtmepikkus kuni 256 bitti.
K: Kuidas on Twofish seotud varasema plokkšifri Blowfishiga?
V: Twofishi peamised omadused on eelnevalt arvutatud võtmest sõltuvate S-kastide kasutamine ja suhteliselt keeruline võtmete ajakava. Ühte poolt n-bitisest võtmest kasutatakse tegeliku krüpteerimisvõttena ja teist poolt n-bitisest võtmest kasutatakse krüpteerimisalgoritmi muutmiseks (võtmest sõltuvad S-boxid).
K: Kas Twofish valiti täiustatud krüpteerimisstandardiks?
V: Ei, 1997. aastal kuulutas NIST välja konkursi, et valida DESi järeltulija, mida hakatakse nimetama AESiks, kuid Twofishi ei valitud standardiks.
K: Milliseid elemente kasutab Twofish teistest disainilahendustest?
V: Twofish kasutab mõningaid elemente teistest disainilahendustest; näiteks pseudo-Hadamardi transformatsiooni (PHT) SAFERi šifrite perekonnast.
K: Kas see kasutab Feisteli struktuuri nagu DES?
V: Jah, see kasutab Feistel-struktuuri nagu DES.
K: Kas see on kiirem kui Rijndael 128-bitiste võtmete puhul?
V: Enamikul tarkvaraplatvormidel on Twofish 128-bitiste võtmete puhul veidi aeglasem kui Rijndael.
K: Kas see on 256-bitiste võtmete puhul kiirem kui Rijndael?
V: See on 256-bitiste võtmete puhul mõnevõrra kiirem kui Rijndael.