Twofish – symmetrisk 128-bit blokchiffer og AES-finalist (op til 256-bit)
Twofish: kraftfuldt symmetrisk 128-bit blokchiffer (op til 256-bit). AES-finalist fra 1997, nøgleafhængige S‑bokse, Feistel-struktur og effektiv kryptering for stærk sikkerhed.
Inden for kryptografi er Twofish et symmetrisk nøgleblokchiffer med en blokstørrelse på 128 bit og en nøglelængde på op til 256 bit (understøtter typisk 128-, 192- og 256-bit nøgler). Twofish blev designet med fokus på både sikkerhed og god softwareperformance, og kan implementeres effektivt både i software og i hardware.
I 1997 annoncerede NIST en konkurrence om at vælge en efterfølger til DES, der skulle kaldes AES, og Twofish var en af de fem finalister i konkurrencen om Advanced Encryption Standard, men blev ikke valgt som standard. Twofish blev udviklet af et team bestående af bl.a. Bruce Schneier, John Kelsey, Doug Whiting, David Wagner, Chris Hall og Niels Ferguson.
Design og nøgleplan
Twofish er nært beslægtet med den tidligere blokchiffer Blowfish, men introducerer flere avancerede elementer:
- Det er en 16-runde Feistel-konstruktion, hvor inputblokken ofte opfattes som fire 32-bit ord.
- Der anvendes pre- og post-whitening (XOR med nøgleord) for at øge modstanden mod visse angreb.
- Nøgler bruges både til selve krypteringen og til at generere nøgleafhængige S-bokse: en del af nøglematerialet ændrer de S-bokse, som runde-funktionen anvender, hvilket øger kompleksiteten for en angriber.
- Nøgleplanen producerer i alt 40 32-bit undernøgler (K0..K39): 8 32-bit nøgler bruges til whitening (fire ved input og fire ved output) og 32 32-bit nøgler bruges som to subnøgler pr. runde i de 16 runder (i alt 32).
Twofish benytter faste 8×8-permutationer kaldet q-boxes (ofte betegnet q0 og q1) og en MDS (maximum distance separable) 4×4 matrix over GF(256) til at sprede (diffuse) S-boks-outputtet. Derudover indgår en pseudo-Hadamard-transformation (PHT) – et element lånt fra SAFER-familien – i runde-funktionen. Kombinationen af q-boxes, MDS-matrix og PHT giver høj diffusion og ikke-linearitet.
Ydeevne og implementering
På mange softwareplatforme er Twofish en smule langsommere end Rijndael (den valgte algoritme for Advanced Encryption Standard) når der bruges 128-bit nøgler. For 256-bit nøgler kan Twofish dog være konkurrencedygtig eller hurtigere i visse implementeringer, især når nøgleafhængige S-bokse er forudberegnede. Fordelene/ulemperne afhænger af platformen, tilgængelig hukommelse og om man prioriterer fast tid/konstant-tid-implementering for at modvirke sidekanalangreb.
Twofish kan optimeres ved at forudberegne nøgleafhængige tabeller, hvilket giver større hastighed på bekostning af mere hukommelsesforbrug. For indlejrede systemer eller miljøer med begrænset hukommelse kan man vælge en mindre hukommelseskrævende implementering, men ofte med en vis hastighedsnedgang.
Sikkerhed og kryptanalyse
Twofish er blevet grundigt analyseret af kryptografisamfundet. Der er publicerede resultater, som angriber reducerede-runde varianter og under visse modeller (f.eks. relaterede-nøgle-angreb på reducerede varianter), men der er ingen praktisk, offentliggjort metode til at bryde fuld 16-runde Twofish betydeligt hurtigere end ved ren brute-force. Derfor betragtes Twofish generelt som sikkert, når den anvendes korrekt med stærke nøgler.
Som med andre krypteringsalgoritmer skal implementeringer tage hensyn til sidekanaler (timing, cache, strømforbrug mv.). Anbefalingen er at benytte konstante-tids-operationer og undgå tabeller, der afslører nøgleinformation via hukommelsesadgangsmønstre, hvis man skal modstå avancerede fysiske angreb.
Anvendelser og adoption
Selvom Twofish ikke blev valgt som AES, er algoritmen blevet indarbejdet i flere open source-projekter og sikkerhedsprodukter. Den er et populært valg som alternativ til AES i nogle sammenhænge, især hvor ønsket om et ikke-standard AES-alternativ eller kompatibilitet med ældre systemer gør sig gældende. Twofish er f.eks. valgt som én af de mulige krypteringsalgoritmer i visse disk-krypteringsværktøjer og krypteringsbiblioteker.
Opsummerende er Twofish en velkonstrueret, fleksibel og gennemprøvet blokchiffer med 128-bit blokke og nøgler op til 256 bit, som fortsat er relevant som et alternativ til AES i en række scenarier.
Skabere
Twofish blev designet af Bruce Schneier, John Kelsey, Doug Whiting, David Wagner, Chris Hall og Niels Ferguson; det "udvidede Twofish-team", der mødtes for at foretage yderligere kryptoanalyse af Twofish og andre AES-konkurrenter, omfattede Stefan Lucks, Tadayoshi Kohno og Mike Stay.
Twofish-algoritmen er gratis for alle at bruge uden nogen som helst begrænsninger. Twofish-chifringen er ikke blevet patenteret, og softwareeksemplet på specifikationen er blevet lagt i det offentlige domæne. Twofish er dog ikke meget udbredt som Blowfish, der har været tilgængelig i længere tid.
Kryptoanalyse
I 2008 var den bedste offentliggjorte kryptoanalyse af Twofish-blokchifringen en afkortet differentialkryptoanalyse af den fulde 16-runde-version. I artiklen hævdes det, at sandsynligheden for angreb med afkortede differentialer er 2-57.3 pr. blok, og at det vil kræve ca. 251 udvalgte klartekster (32 PiB data) for at finde et godt par af afkortede differentialer.
Bruce Schneier svarer i et blogindlæg fra 2005, at dette papir ikke præsenterer et komplet kryptoanalytisk angreb, men kun nogle formodede differentielle egenskaber: "Men selv ud fra et teoretisk perspektiv er Twofish ikke engang i nærheden af at være brudt. Der er ikke sket nogen udvidelser af disse resultater, siden de blev offentliggjort" i 2000.
Relaterede sider
- Blowfish (kryptering)
- Avanceret krypteringsstandard
- Standard for datakryptering
Yderligere læsning
- Bruce Schneier, John Kelsey, Doug Whiting, David Wagner, Chris Hall, Niels Ferguson (1998-06-15). "The Twofish Encryption Algorithm" (PDF/PostScript). Hentet 2007-03-04.
{{cite journal}}: Cite journal requires|journal=(help)CS1 maint: multiple names: authors list (link) - Bruce Schneier, John Kelsey, Doug Whiting, David Wagner, Chris Hall, Niels Ferguson (1999-03-22). Twofish-krypteringsalgoritmen: A 128-Bit Block Cipher: A 128-Bit Block Cipher. New York City: John Wiley & Sons. ISBN 0-471-35381-7.
{{cite book}}: CS1 maint: flere navne: forfatterliste (link)
Spørgsmål og svar
Spørgsmål: Hvad er Twofish?
A: Twofish er en symmetrisk nøgleblokchiffer med en blokstørrelse på 128 bit og en nøglelængde på op til 256 bit.
Spørgsmål: Hvordan var Twofish beslægtet med den tidligere blokchiffer Blowfish?
Svar: Twofishs vigtigste kendetegn er brugen af forudberegnede nøgleafhængige S-bokse og en relativt kompleks nøgleplan. Den ene halvdel af en n-bits nøgle bruges som den egentlige krypteringsnøgle, og den anden halvdel af n-bits nøglen bruges til at ændre krypteringsalgoritmen (nøgleafhængige S-bokse).
Spørgsmål: Blev Twofish valgt som en avanceret krypteringsstandard?
Svar: Nej, i 1997 udskrev NIST en konkurrence om at vælge en efterfølger til DES, som skulle kaldes AES, men Twofish blev ikke valgt som standard.
Spørgsmål: Hvilke elementer bruger Twofish fra andre designs?
A: Twofish anvender nogle elementer fra andre konstruktioner, f.eks. pseudo-Hadamard-transformationen (PHT) fra SAFER-familien af krypteringssystemer.
Spørgsmål: Bruger den Feistel-struktur ligesom DES?
Svar: Ja, den anvender Feistel-struktur ligesom DES.
Spørgsmål: Er den hurtigere end Rijndael for 128 bit-nøgler?
Svar: På de fleste softwareplatforme er Twofish lidt langsommere end Rijndael for 128 bit-nøgler.
Spørgsmål: Er den hurtigere end Rijndael til 256 bit-nøgler?
Svar: Den er noget hurtigere end Rijndael for 256 bit-nøgler.
Søge