Inom kryptografi är Twofish ett blockchiffer med symmetrisk nyckel med en blockstorlek på 128 bitar och nyckellängder på upp till 256 bitar (vanliga nyckellängder är 128, 192 och 256 bitar).
1997 utlyste NIST en tävling för att välja en efterföljare till DES som skulle kallas AES. Twofish var en av de fem finalisterna i tävlingen Advanced Encryption Standard, men valdes inte ut som standard (Rijndael blev vald år 2000). Twofish har ändå fortsatt att användas och studeras inom både praktisk kryptering och forskning.
Twofish är besläktat med det tidigare blockchiffret Blowfish. Twofishs främsta kännetecken är användningen av förberäknade nyckelberoende S-boxar och ett relativt komplicerat nyckelschema. En del av nyckeln används direkt som krypteringsnyckel medan andra delar används för att beräkna S‑boxarna och subnycklar som i praktiken ändrar själva krypteringsalgoritmens inre funktioner (nyckelberoende S‑boxar). Twofish använder vissa element från andra konstruktioner, till exempel pseudo‑Hadamard‑transformen (PHT) från SAFER‑familjen av chiffer, samt linjära transformeringar för bra spridning av nyckelbitar. Strukturellt bygger Twofish på en Feistel‑arkitektur liknande den som används i DES, med 16 rundor samt före‑ och efter‑whitening för att öka säkerheten.
Design och nyckelschema
Twofish konstruerades med fokus på flexibilitet och motståndskraft mot kända kryptanalytiska angrepp. Nyckelschemat genererar flera subnycklar som används både för de enskilda rundorna och för whitening (för- och efterblandning av data), och S‑boxarna beräknas från nyckeln så att de är anpassade till den valda nyckeln. Denna design ger ett gott skydd mot olika typer av analytiska attacker men innebär också en större kostnad i nyckeluppsättningstid (setup) eftersom S‑boxarna måste beräknas vid nyckelinitiering. I gengäld kan kryptering/avkryptering gå snabbare när dessa värden är förberäknade.
Prestanda
På de flesta mjukvaruplattformar är Twofish något långsammare än Rijndael (den valda algoritmen för Advanced Encryption Standard) för 128‑bitars nycklar, men kan vara konkurrenskraftigt eller snabbare för längre nycklar (t.ex. 256 bitar) beroende på implementation och om S‑boxar förberäknas. Twofish är väl lämpat för mjukvaruimplementationer och kan även implementeras i hårdvara, även om enkelheten i Rijndael ofta ger prestandafördelar för AES i många miljöer. Ett typiskt avvägande är snabbare nyckelinställning (AES) kontra mer omfattande nyckelberoende optimeringar (Twofish).
Säkerhet och kryptanalys
Twofish anses fortfarande vara säkert för praktisk användning; det finns inga kända praktiska attacker som bryter hela 16‑rundorsversionen under realistiska förutsättningar. Forskare har funnit vissa teoretiska och relaterade‑nyckelattacker mot reducerade varianter av Twofish, men inget som hotar fullversionens säkerhet i normala tillämpningar. Som med andra algoritmer bör man dock följa aktuell forskning och rekommendationer, och använda välgranskade implementationer.
Implementeringar och användning
Twofish finns implementerat i flera öppna och kommersiella kryptobibliotek och används som ett alternativ i olika krypteringsprogram och verktyg. Ett känt exempel är användningen av Twofish som ett valbart chiffer i diskkrypteringsprogram som TrueCrypt och efterföljaren VeraCrypt. Eftersom AES blev standarden för många organisationer är Twofish inte lika utbrett i standardiserade protokoll, men det fungerar som ett starkt alternativ där det stöds.
Sammanfattning
- Twofish är ett 128‑bitars blockchiffer med stöd för nycklar upp till 256 bitar.
- Det var en av fem finalister i NIST:s AES‑tävling, men valdes inte till standard.
- Twofish kombinerar nyckelberoende S‑boxar, PHT och en Feistel‑struktur med ett komplext nyckelschema.
- Algoritmen anses vara säker idag och används i vissa praktiska tillämpningar, men AES (Rijndael) är fortsatt dominerande som standard.