DES / 3DES / RC4 / Blowfish kryptering & dekryptering

Krypter eller dekrypter med de fire klassiske chifferne som fortsatt finnes i gamle filer, sikkerhetskopier og protokoller — DES og 3DES i ECB eller CBC, RC4 (ARCFOUR) som strømchiffer, og Blowfish med nøkler på opptil 56 byte. Verifisert mot FIPS 46-3, Schneiers publiserte Blowfish-vektorer og RFC 6229. Alt kjøres lokalt i nettleseren — ingenting lastes opp. For moderne bruk brukes AES-GCM.
Disse chifrene finnes her for kompatibilitet, ikke for nytt arbeid. DES ble trukket tilbake i 2005, 3DES i 2023, RC4 har vært forbudt i TLS siden 2015 (RFC 7465), og Blowfish sin 64-bits blokk når bursdagsgrensen etter omtrent 32 GiB data under én nøkkel. Bruk AES-GCM til alt nytt.
Retning: Chiffer: Modus: Utdata:
DES = Data Encryption Standard fra 1977: 64-bits blokker, 56 effektive nøkkelbit. Trukket tilbake, men finnes fortsatt i gamle sikkerhetskopier, PIN-blokker (bank) og Kerberos v4. Nøkkelen må være nøyaktig 8 byte.
Hex tåler mellomrom, kolon og 0x-prefikser. DES ignorerer paritetsbiten i hver nøkkelbyte.
Blokkchiffer bruker PKCS#7-padding; RC4 bruker aldri padding.
Nøkkellengder denne siden godtar
ChifferNøkkelBlokkStatus
DESnøyaktig 8 byte (56 effektive bit)64 bittrukket tilbake 2005 (NIST SP 800-131A)
3DES-EDE3nøyaktig 24 byte (112 effektive bit)64 bitforbudt etter 2023 (SP 800-131A r2)
3DES-EDE2nøyaktig 16 byte (112 effektive bit)64 bitsamme som EDE3, svakere eldre alternativ
RC4 / ARCFOUR1..256 bytestrømforbudt i TLS siden 2015 (RFC 7465)
Blowfish4..56 byte64 bitubrutt, men begrenset av 64-bits blokk; bruk Twofish/AES
Den effektive nøkkelstørrelsen er mindre enn den rå størrelsen fordi DES bruker én bit i hver byte som paritet: en rå 64-bits nøkkel bærer bare 56 nøkkelbit, og 3DES med tre uavhengige nøkler bærer 112 (møte-i-midten).
OpenSSL-interoperabilitet — OpenSSL 3 flyttet disse chifrene til legacy-leverandøren; legg til -provider legacy hvis installasjonen avviser dem. Kommandolinjeekvivalenter til denne siden:
openssl enc -des-ecb -K 133457799BBCDFF1 -in msg.bin -out msg.enc
openssl enc -des3 -K <48 hex> -iv <16 hex> -in msg.bin -out msg.enc (3DES-CBC)
openssl enc -rc4 -K 4b6579 -in msg.bin -out msg.enc  /  -bf-cbc for Blowfish-CBC.
Dekrypter med -d. -K tar en rå hex-nøkkel, -k et passord (unngå det — KDF-en er forskjellig fra alt på denne siden).
Selvtest
Kjører siden-motoren mot publiserte og uavhengig genererte vektorer på nytt: det arbeidede DES-eksemplet i FIPS 46-3, OpenSSL-genererte 3DES EDE2/EDE3-chiffertekster, Schneiers Blowfish-vektorer, RC4-testvektorer fra RFC 6229 og det klassiske "Key/Plaintext"-eksemplet, rundturer i alle moduser og negative tester (feil nøkkelstørrelse, og chiffertekst som ikke er et multiplum av blokkstørrelsen, må feile). Ingenting sendes noe sted.
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.