DES, 3DES, RC4 og Blowfish forklart fra grunnen av
I én setning: disse fire chifferne var arbeidshestene på 1990-tallet — DES og dens tredobbelte kryptering 3DES, strømchifferet RC4 og Blowfish — og hver eneste av dem er nå utrangert eller avskrevet, og lever bare videre i gamle filer, gammel maskinvare og gamle protokoller som fortsatt må kunne leses.
DES: standarden fra 1977 som startet alt
Hva det er. Data Encryption Standard (FIPS 46, 1977) er en Feistel-chiffer med 16 runder på 64-bits blokker og en 56-bits nøkkel (lagret i 8 byte fordi én bit i hver byte er en paritetssjekk). Den ble designet av IBM med innspill fra NSA, ble USAs standard i to tiår og ble brutt ved vedtak i 1998, da EFFs Deep Crack-maskin brute-forcet en nøkkel på 56 timer for maskinvare til 250 000 dollar. NIST trakk den tilbake for kryptering i 2005.
Hvorfor paritetsbiten forvirrer nøkkellengder. Hver 8. bit i en DES-nøkkel beregnes fra de andre syv, så en 8-byte nøkkel har bare 56 uavhengige bit — derfor ser man både "64-bits nøkkel" og "56-bits nøkkel" for samme chiffer. 3DES arver dette: 24 rå byte = 168 rå bit = 112 effektive (møte-i-midten fjerner resten).
Der man fortsatt møter den. Bankers PIN-blokker (ISO 9564), noen Kerberos v4-riker, gamle sikkerhetskopiarkiver og smartkort. Hvis et system krever DES i dag, samhandler det enten med maskinvare fra 1990-tallet, eller så er det rett og slett usikkert.
3DES: kryptere, dekryptere, kryptere
Trikset. Triple-DES kjører DES tre ganger over hver blokk: EDE3 bruker tre ulike nøkler (C = Ek3(Dk2(Ek1(P)))); dekrypteringssteget i midten finnes slik at en 3DES-implementasjon kan etterligne enkel DES ved å sette k1=k2. EDE2 bruker bare to nøkler (k1=k3), og gir 112 effektive bit. Konstruksjonen var en rask løsning som tredoblet sikkerheten til en allerede angrepet chiffer, uten å finne opp en ny.
Hvorfor den døde likevel. To problemer: den er treg (tre fulle DES-kjøringer per blokk, ~1/20 av AES-hastigheten), og den beholdt 64-bits blokken. Med 32 GiB data under én nøkkel (bursdagsgrensen for 232 blokker) blir blokkollisjoner sannsynlige nok til å lekke klartekststruktur — Sweet32-angrepet (2016) demonstrerte dette mot 3DES-økter i TLS. NIST forbød 3DES-kryptering etter 2023 (SP 800-131A r2); PCI DSS krever at den pensjoneres i betalingssystemer.
RC4 / ARCFOUR: strømchifferet på det tidlige nettet
Hvordan det fungerer. RC4 (Ron's Code 4, designet 1987, lekket 1994) er et strømchiffer: nøkkelen lager en 256-byte permutasjon (KSA), og permutasjonen sender ut en pseudotilfeldig byte-strøm (PRGA) som XOR-es med meldingen. Ingen padding, ingen blokkstørrelse, hvilken som helst meldingslengde, og svært raskt i programvare — derfor dominerte det SSL/TLS og WEP på 1990-tallet. "ARCFOUR" er det varemerkefrie navnet de fleste open source-prosjekter bruker.
Hvordan det ble brutt. Fluhrer-Mantin-Shamir (2001) viste at de første bytene i nøkkelstrømmen er skjeve — fatalt i WEP, der nøkkelkonstruksjonen per pakke ga disse bytene til angripere. Senere skjevhetsangrep (2013, AlFardan m.fl.) gjenopprettet klartekst fra RC4-beskyttede TLS-økter med millioner av forbindelser. RFC 7465 (2015) forbyr RC4 i TLS helt.
Den klassiske vektoren. Nøkkelen "Key" (3 byte) og meldingen "Plaintext" gir chiffertekst bbf316e8d940af0ad3 — prøv RC4-eksemplet og sammenlign. Selvtesten på denne siden sjekker også RFC 6229-nøkkelstrømmen for 40-bits nøkkelen 01 02 03 04 05: b2396305f03dc027ccc3524a0a1118a8.
Blowfish: ubrutt, men blokkbegrenset
Hva det er. Bruce Schneiers Feistel-chiffer fra 1993: 64-bits blokker, nøkler fra 32 til 448 bit (4..56 byte), 16 runder, og en kjent nøkkelplan som kjører Blowfish selv 521 ganger for å bygge delnøklene — noe som gjør nøkkeloppsettet tregt, men brute force-forsøk dyre. Ingen praktisk kryptoanalyse bryter Blowfish med full runde.
Hvorfor den er med på denne siden likevel. 64-bits blokken er problemet, ikke algoritmen: etter ~32 GiB under én nøkkel lekker bursdagskollisjoner data (samme grense som 3DES, Sweet32-lignende). Schneier selv anbefaler sin etterfølger Twofish (en AES-finalist) eller AES for alt nytt. Blowfish lever videre i bcrypt — nøkkelplanen i passordhashen er Blowfish — og det er greit, fordi hashing bruker små inndata, ikke gigabyte.
De klassiske vektorene. Nøkkel og klartekst som bare består av nuller, krypteres til 4ef997456198dd78 (første blokk i eksempelutdataene); nøkkelen "abcdefghijklmnopqrstuvwxyz" på "BLOWFISH" gir 324ed0fef413a203. Begge kommer fra Schneiers publiserte vektorfil og kontrolleres av selvtesten.
Vanlige feil
- Bruk til nye data. Alle chifrene på denne siden er avskrevet, unntatt Blowfish (som er blokkstørrelsesbegrenset). Det riktige moderne valget er AES-GCM — se AES-kryptering / -dekryptering.
- DES-nøkkel fra et passord. Et passord på 8 tegn er ikke 56 tilfeldige bit; det er noen få bit entropi per tegn. Gamle systemer gjorde nettopp dette, og det er den vanligste grunnen til at "DES-krypterte" arkiver faller for ordbokangrep på få minutter.
- Gjenbruk av IV i CBC. Den første blokken lekker da likhet i klartekst mellom meldinger under samme nøkkel. Knappen Tilfeldig IV finnes av en grunn.
- Gjenbruk av RC4-nøkkelstrøm. RC4 XOR-er den samme nøkkelstrømmen for samme nøkkel: å kryptere to meldinger med én nøkkel er en two-time pad — XOR av chiffertekstene gir begge klartekstene. WEP-ens fatale svakhet var nettopp en gjenbruk av nøkkelstrøm.
- Å anta at "det dekrypterer, så det er riktig". ECB/CBC her validerer bare padding ved dekryptering — en feil nøkkel gir vanligvis søppel som likevel kan fjernes fra paddingen. Ingen eldre modus har integritetskontroll; hvis man trenger det, trengs AES-GCM, ikke disse.
- Å regne 3DES som "168-bit". Den rå nøkkelen er 168 bit, men den effektive styrken er 112 — møte-i-midten reduserer tredobbel kryptering til dobbel pluss litt, nøyaktig som for forløperne til 3DES.
Ofte stilte spørsmål
Hvorfor beholde et verktøy for en brutt chiffer i det hele tatt? Kompatibilitet. Krypterte sikkerhetskopier, eksporterte filer i eldre format, fangede protokollspor, CTF-oppgaver og maskinvare som ikke kan oppgraderes, snakker alle fortsatt disse chifferne. Det er legitimt å lese gamle data; å skrive nye data med dem er det ikke.
Min DES-nøkkel har oddetallsparitet / ikke-ASCII-byte. DES ignorerer paritetsbiten i hver nøkkelbyte, så den effektive nøkkelen er uansett de andre 56 bitene. Denne siden godtar alle 8 byte og håndhever ikke jevn paritet.
Hvorfor ser dekryptert tekst noen ganger ut som søppel? Feil nøkkel, feil modus, feil IV, eller dataene ble ikke kryptert slik man antar. Uten autentiseringstag finnes det ingen ren feilmelding om "feil nøkkel" — paddingkontrollen er det eneste tegnet, og den kan passere ved et tilfelle (1 av 256 ganger).
Er Blowfish trygt for filene mine? For små filer, kryptografisk ja (ingen praktisk brudd). For alt i gigabyte-skala under én enkelt nøkkel, nei — bursdagsgrensen for 64-bits blokken handler om datamengde, ikke nøkkelstyrke. Twofish eller AES unngår problemet.
Hva med de 72-byte Blowfish-nøklene jeg så et sted? Noen implementasjoner godtar opptil 72 byte, men Schneiers referanse bruker 56, og byte utover det gir ingen ekstra diffusjon i standard nøkkelplan. Denne siden følger referansen: 4..56 byte.