Kryptografiassa Twofish on symmetrisen avaimen lohkosalaus, jonka lohkokoko on 128 bittiä ja avaimen pituus enintään 256 bittiä.
Vuonna 1997 NIST julisti kilpailun DES:n seuraajan valitsemiseksi nimellä AES, Twofish oli yksi Advanced Encryption Standard -kilpailun viidestä finalistista, mutta sitä ei valittu standardiksi.
Twofish on sukua aiemmalle lohkosalakirjoitukselle Blowfish. Twofishin pääpiirteet ovat ennalta laskettujen, avaimesta riippuvaisten S-boxien käyttö ja suhteellisen monimutkainen avaimen aikataulu. Toista puolta n-bittisestä avaimesta käytetään varsinaisena salausavaimena ja toista puolta n-bittisestä avaimesta käytetään salausalgoritmin muuttamiseen (avaimesta riippuvaiset S-boxit). Twofish käyttää joitakin elementtejä muista malleista, esimerkiksi SAFER-salakirjoitustyypin pseudo-Hadamard-muunnosta (PHT). Twofish käyttää samaa Feistel-rakennetta kuin DES.
Useimmilla ohjelmistoalustoilla Twofish on hieman hitaampi kuin Rijndael (Advanced Encryption Standard -algoritmi) 128-bittisten avainten osalta, mutta hieman nopeampi 256-bittisten avainten osalta.
Suunnittelu, tekijät ja historia
Twofish suunniteltiin osana AES-kilpailua ja sen pääsuunnittelijoita olivat Bruce Schneier, John Kelsey, Doug Whiting, David Wagner, Chris Hall ja Niels Ferguson. Algoritmi julkaistiin avoimesti kilpailua varten, ja sen toteutukset ovat vapaasti käytettävissä ilman lisenssimaksuja tai patenttivaatimuksia.
Tekniset ominaisuudet
- Lohkokoko: 128 bittiä.
- Avaimen pituus: tuki 128, 192 ja 256 bittiä (yhteensä jopa 256 bittiä).
- Rakenne: 16 kierroksen Feistel-verkko.
- Allekirjoitetut avaimet ja valmisteet: Twofish käyttää yhteensä 40 32-bittistä alikäyttöavainta — yleensä 8 avainta whitenausta varten ja 32 kierrosavainta (kaksi 32-bittistä arvoa per kierros).
- Avaimsidonnaiset S-boxit: S-boxit lasketaan avaimesta käyttäen kiinteitä permutaatioita (ns. Q-boxit) ja matriisimuunnoksia (esim. MDS-matriisi). Tämä tekee S-boxeista avainkohtaisia ja lisää kokonaisuuden monimutkaisuutta.
- Diffuusio ja sekoitus: Twofish hyödyntää PHT (pseudo-Hadamard transform), MDS-matriisia ja muita tavanomaisia lohkosalauskomponentteja tarjotakseen vahvan diffuusion ja hajautuksen.
Avaimen aikataulu ja S-boxien muodostus
Twofishin avainlaajennus (key schedule) on suunniteltu antamaan paitsi kierrosavaimia myös avainsidonnaisia S-boxeja. Avain pilkotaan osiin, joista osa toimii suoraan kierrosavaimena ja osa prosessoidaan muodostaakseen S-boxien lähtöaineiston. Tämä kaksijakoinen rakenne (osa avaimesta suoraan alikajoiksi, osa S-boxien lähteeksi) on yksi Twofishin tunnusmerkeistä ja sen suojamekanismeista.
Turvallisuus ja kryptanalyysi
Twofishia on tutkittu laajasti. Kokonaisesta 16-kierroksisesta Twofishista ei ole löytynyt käytännössä toteutettavissa olevia murtoja, ja se on edelleen yleisesti pidetty turvallisena lohkosalausalgoritmina. Kuten monille moderneille algoritmeille, myös Twofishille on esitetty teoreettisia hyökkäyksiä tai parannuksia käytännön läpimurtoihin liittyen, mutta nämä koskevat yleensä:
- vähennettyjen kierrosten variantteja (reduced-round),
- avainriippuvia tai relación-avain (related-key) -hyökkäyksiä, jotka eivät vastaa tyypillisiä, itsenäisiä avainkäyttötapauksia,
- sivu-kanava- ja ajoitusperusteisia hyökkäyksiä toteutuksissa, jos niitä ei suojata asianmukaisesti.
Yhteenvetona: Twofishin perussuunnittelu on kestänyt ajan ja sille ei ole löytynyt käytännöllistä heikkoutta, joka uhkaisisi sen käyttöä normaalissa salauskäytössä.
Suorituskyky ja toteutukset
Alkuperäisessä arvioinnissa Twofish oli yleisesti hieman hitaampi kuin Rijndael (sittemmin valittu AES:ksi) etenkin 128-bittisellä avaimella, mutta se voi olla kilpailukykyisempi tai nopeampi 256-bittisillä avaimilla joillakin alustoilla johtuen avainvapautuksista ja optimointimahdollisuuksista. Nykyisissä ympäristöissä, joissa on laitteistotuki AES-operaatioille (esim. AES-NI x86-arkkitehtuurissa), AES voi olla huomattavasti nopeampi, joten käytännön valinnoissa se vaikuttaa paljon.
Twofishille on olemassa useita avoimen lähdekoodin toteutuksia ja kirjastoja, ja se on ollut vaihtoehtona useissa salausohjelmissa ja -työkaluissa (esimerkiksi tiedostojen ja levyn salaustyökalut). Koska Twofish ei ole patentoitu, se on soveltuva vaihtoehto avoimen lähdekoodin ratkaisuissa.
Käyttötapaukset
- Tiedostojen ja levyjen salaus (esim. useissa salaustyökaluissa tarjolla vaihtoehtona).
- Yleinen lohkosalausratkaisuna kirjastoissa ja sovelluksissa, joissa halutaan vaihtoehto AES:lle.
- Sovellukset, joissa halutaan hyödyntää avainsidonnaisia S-boxeja ja monimutkaista avainajastusta.
Yhteenveto
Twofish on moderni, 128-bittinen lohkosalaus, joka tarjoaa joustavia avainpituuksia (jopa 256 bittiä), avaimesta riippuvat S-boxit ja 16-kierroksisen Feistel-rakenteen. Se oli vahva ehdokas AES-kilpailussa ja on edelleen turvallinen ja käyttökelpoinen vaihtoehto erityisesti tilanteissa, joissa halutaan vaihtoehtoinen algoritmi AES:lle tai jossa patenttivapaus on tärkeää. Valinta Twofishin ja AES:n välillä riippuu usein suorituskyvystä laitteistossa (esim. AES-NI) sekä toteutuksen ja käyttötapauksen vaatimuksista.