DES / 3DES / RC4 / Blowfish -salaus & -purku

Salaa tai pura neljällä klassisella salauksella, jotka elävät yhä vanhoissa tiedostoissa, varmuuskopioissa ja protokollissa — DES ja 3DES ECB- tai CBC-tilassa, RC4 (ARCFOUR) virtasalaimena ja Blowfish avaimilla enintään 56 tavua. Vahvistettu FIPS 46-3:a, Schneierin julkaistuja Blowfish-vektoreita ja RFC 6229:ää vastaan. Kaikki toimii paikallisesti selaimessasi — mitään ei ladata. Nykyaikaiseen työhön käytä AES-GCM:ää.
Nämä salaukset ovat täällä yhteensopivuutta varten, eivät uuteen työhön. DES vedettiin pois 2005, 3DES 2023, RC4 on kielletty TLS:ssä vuodesta 2015 (RFC 7465), ja Blowfishin 64 bitin lohko saavuttaa syntymäpäivärajansa noin 32 GiB:n jälkeen yhden avaimen alla. Käytä AES-GCM:ää kaikkeen uuteen.
Suunta: Salaus: Tila: Tulos:
DES = vuoden 1977 Data Encryption Standard: 64 bitin lohkot, 56 bitin tehokas avain. Vedetty pois, mutta yhä vanhoissa varmuuskopioissa, PIN-lohkoissa (pankkitoiminta) ja Kerberos v4:ssä. Avaimen on oltava tasan 8 tavua.
Heksa sietää välilyönnit, kaksoispisteet ja 0x-etuliitteet. DES ohittaa jokaisen avaintavun pariteettibitin.
Lohkosalaukset täyttävät PKCS#7:llä; RC4 ei koskaan täytä.
Tällä sivulla hyväksytyt avainpituudet
SalausAvainLohkoTila
DEStasan 8 tavua (56 tehokasta bittiä)64 bittiävedetty pois 2005 (NIST SP 800-131A)
3DES-EDE3tasan 24 tavua (112 tehokasta bittiä)64 bittiäkielletty vuoden 2023 jälkeen (SP 800-131A r2)
3DES-EDE2tasan 16 tavua (112 tehokasta bittiä)64 bittiäsama kuin EDE3, heikompi vanha vaihtoehto
RC4 / ARCFOUR1..256 tavuavirtakielletty TLS:ssä vuodesta 2015 (RFC 7465)
Blowfish4..56 tavua64 bittiämurtumaton, mutta 64 bitin lohkon rajoittama; käytä Twofishia/AES:ää
Tehokas avainkoko on pienempi kuin raakakoko, koska DES käyttää jokaisen tavun yhtä bittiä pariteettina: 64 bitin raakaavain kantaa vain 56 avainbittiä, ja kolmella riippumattomalla avaimella varustettu 3DES kantaa 112 (keskikohtahyökkäys).
OpenSSL-yhteentoimivuus — OpenSSL 3 siirsi nämä salaukset legacy-palveluntarjoajalle; lisää -provider legacy, jos komento kieltäytyy. Tämän sivun komentorivivastineet:
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 Blowfish-CBC:lle.
Purku tapahtuu -d-lipulla. -K ottaa raakaheksa-avaimen, -k salasanan (vältä — KDF eroaa kaikesta tällä sivulla).
Itsetesti
Suorittaa sivun moottorin uudelleen julkaistuja ja itsenäisesti luotuja vektoreita vastaan: FIPS 46-3:n työstetty DES-esimerkki, OpenSSL:n tuottamat 3DES EDE2/EDE3 -salateksit, Schneierin Blowfish-vektorit, RFC 6229:n RC4-testivektorit ja klassinen "Key/Plaintext"-esimerkki, kierrokset kaikissa tiloissa sekä negatiiviset testit (väärä avainkoko, lohkokokoon jaottomat salateksti on hylättävä). Mitään ei lähetetä minnekään.
DES, 3DES, RC4 ja Blowfish selitettynä alusta asti
Yhdellä lauseella: nämä neljä salausta olivat 1990-luvun työjuhtia — DES ja sen kolminkertainen kiertotapa 3DES, virtasalaus RC4 ja Blowfish — ja kaikki ne on nyt poistettu käytöstä tai vanhentuneet, ja niitä pitävät hengissä vain vanhat tiedostot, vanha laitteisto ja vanhat protokollat, joita täytyy yhä lukea.
DES: vuoden 1977 standardi, joka aloitti kaiken

Mitä se on. Data Encryption Standard (FIPS 46, 1977) on 16 kierroksen Feistel-salaus 64 bitin lohkoilla ja 56 bitin avaimella (tallennettu 8 tavuun, koska jokaisen tavun yksi bitti on pariteettitarkistus). IBM suunnitteli sen NSA:n panoksella, siitä tuli USA:n standardi kahdeksi vuosikymmeneksi, ja se murrettiin politiikan kautta vuonna 1998, kun EFF:n Deep Crack -kone ratkaisi avaimen raa'alla voimalla 56 tunnissa 250 000 dollarin laitteistolla. NIST veti sen pois salaukseen vuonna 2005.

Miksi pariteettibitti sekoittaa avainpituuksia. Jokainen DES-avaimen 8. bitti lasketaan muista seitsemästä, joten 8 tavun avain sisältää vain 56 riippumatonta bittiä — siksi samasta salauksesta näkee sekä "64-bittisen avaimen" että "56-bittisen avaimen". 3DES perii tämän: 24 raakatavua = 168 raakabittiä = 112 tehokasta (keskikohtahyökkäys poistaa loput).

Missä sen vielä kohtaa. Pankkien PIN-lohkot (ISO 9564), joitakin Kerberos v4 -alueita, vanhoja varmuuskopioarkistoja ja älykortteja. Jos järjestelmä vaatii DES:iä tänään, se joko kommunikoi 1990-luvun laitteiston kanssa tai on yksinkertaisesti turvaton.

3DES: salaa, pura, salaa

Temppu. Kolminkertainen DES ajaa DESin kolme kertaa jokaisen lohkon yli: EDE3 käyttää kolmea eri avainta (C = Ek3(Dk2(Ek1(P)))); keskimmäinen purkuvaihe on olemassa, jotta 3DES-toteutus voi jäljitellä yksinkertaista DES:iä asettamalla k1=k2. EDE2 käyttää vain kahta avainta (k1=k3), mikä antaa 112 tehokasta bittiä. Rakenne oli nopea korjaus, joka kolminkertaisti jo hyökätyn salauksen turvallisuuden keksimättä uutta.

Miksi se kuoli silti. Kaksi ongelmaa: se on hidas (kolme täyttä DES-kierrosta lohkoa kohden, noin 1/20 AESin nopeudesta), ja se säilytti 64 bitin lohkon. Yli 32 GiB dataa yhden avaimen alla (syntymäpäivärajat 232 lohkolle) tekee lohkotörmäyksistä riittävän todennäköisiä vuotamaan selkotekstin rakenteen — Sweet32-hyökkäys (2016) osoitti tämän TLS 3DES -istuntoja vastaan. NIST kielsi 3DES-salauksen vuoden 2023 jälkeen (SP 800-131A r2); PCI DSS vaatii sen poistamista maksujärjestelmissä.

RC4 / ARCFOUR: varhaisen webin virtasalaus

Miten se toimii. RC4 (Ron's Code 4, suunniteltu 1987, vuotanut 1994) on virtasalaus: avain muodostaa 256 tavun permutaation (KSA), jonka jälkeen permutaatio tuottaa pseudosatunnaisen tavuvirran (PRGA), joka XORataan viestin kanssa. Ei täytettä, ei lohkokokoa, mikä tahansa viestin pituus, triviaalisen nopea ohjelmistolla — siksi se hallitsi SSL/TLS:ää ja WEP:iä 1990-luvulla. "ARCFOUR" on tavaramerkistä vapaa nimi, jota useimmat avoimen lähdekoodin projektit käyttävät.

Miten se murtui. Fluhrer, Mantin ja Shamir (2001) osoittivat, että avainvirran ensimmäiset tavut ovat vinoutuneet — kohtalokas WEP:ssä, jonka pakettikohtainen avainrakenne syötti nuo tavut hyökkääjille. Myöhemmät vinoumahyökkäykset (2013, AlFardan ym.) palauttivat selkotekstin RC4:llä suojatuista TLS-istunnoista miljoonien yhteyksien kautta. RFC 7465 (2015) kieltää RC4:n TLS:ssä kokonaan.

Klassinen vektori. Avain "Key" (3 tavua), viesti "Plaintext" antaa salatekstin bbf316e8d940af0ad3 — kokeile RC4:n Näytettä ja vertaa. Tämän sivun itsetesti tarkistaa myös RFC 6229:n avainvirran 40-bittiselle avaimelle 01 02 03 04 05: b2396305f03dc027ccc3524a0a1118a8.

Blowfish: murtumaton, mutta lohkorajoitettu

Mitä se on. Bruce Schneierin vuoden 1993 Feistel-salaus: 64 bitin lohkot, avaimet 32-448 bittiä (4..56 tavua), 16 kierrosta ja tunnettu avaimen aikataulu, joka ajaa Blowfishia itseään 521 kertaa aliavainten rakentamiseksi — mikä tekee avaimen asetuksesta hitaan mutta myös raakavoimayritykset kalliiksi. Mikään käytännöllinen kryptanalyysi ei riko täyskierroksista Blowfishia.

Miksi se on silti tällä sivulla. Ongelma on 64 bitin lohko, ei algoritmi: yli noin 32 GiB yhden avaimen alla syntymäpäivätörmäykset vuotavat dataa (sama raja kuin 3DES:llä, Sweet32-tyyppinen). Schneier itse suosittelee seuraajaansa Twofishia (AES-finalisti) tai AES:ää kaikkeen uuteen. Blowfish elää yhä bcrypt-algoritmissa — salasanatiivisteen avaimen aikataulu on Blowfish — mikä on hyvä, koska tiivistys käsittelee pieniä syötteitä, ei gigatavuja.

Klassiset vektorit. Kaikkinollainen avain ja kaikkinollainen selkoteksti salautuvat muotoon 4ef997456198dd78 (Näyte-tulosteen ensimmäinen lohko); avain "abcdefghijklmnopqrstuvwxyz" tekstillä "BLOWFISH" antaa 324ed0fef413a203. Molemmat ovat Schneierin julkaistusta vektoritiedostosta, ja itsetesti tarkistaa ne.

Yleisiä virheitä
  • Uuden datan salaaminen näillä. Jokainen tämän sivun salaus on vanhentunut paitsi Blowfish (jolla on lohkokokorajoitus). Oikea nykyaikainen valinta on AES-GCM — katso AES-salaus / -purku.
  • DES-avain salasanasta. 8 merkin salasana ei ole 56 satunnaista bittiä; se on muutama entropiabitti merkkiä kohden. Vanhat järjestelmät tekivät juuri näin, ja se on yleisin syy, miksi "DES-salatut" arkistot murtuvat sanakirjahyökkäyksillä minuuteissa.
  • IV:n uudelleenkäyttö CBC:ssä. Ensimmäinen lohko paljastaa silloin selkotekstien yhtäsuuruuden viestien välillä samalla avaimella. Satunnaisen IV:n painike on olemassa tästä syystä.
  • RC4-avainvirran uudelleenkäyttö. RC4 XORaa saman avainvirran samalle avaimelle: kahden viestin salaaminen yhdellä avaimella on kaksi kertaa käytetty kertakäyttöavain — XORaa salatekstit yhteen, ja molemmat selkotekstit putoavat ulos. WEP:n kohtalokas virhe oli juuri tämä avainvirran uudelleenkäyttö.
  • Oletus "se purkautuu, joten se on oikein". ECB/CBC tarkistavat tässä purkaessa vain täytteen — väärä avain tuottaa yleensä roskaa, joka voi silti poistaa täytteensä. Yhdessäkään vanhassa tilassa ei ole eheystarkistusta; jos sellainen tarvitaan, tarvitaan AES-GCM, ei näitä.
  • 3DES:n laskeminen "168-bittiseksi". Raakaavain on 168 bittiä, mutta tehokas vahvuus on 112 — keskikohtahyökkäys pienentää kolminkertaisen salauksen kaksinkertaiseksi plus vähän, samoin kuin 3DES:n esi-isien rakenteet.
UKK

Miksi pitää ylipäätään murretun salauksen työkalu? Yhteensopivuuden vuoksi. Salatut varmuuskopiot, viedyt vanhan muotoiset tiedostot, tallennetut protokollajäljet, CTF-tehtävät ja laitteisto, jota ei voi päivittää, puhuvat yhä näitä salauksia. Vanhan datan lukeminen on oikeutettua; uuden datan kirjoittaminen niillä ei ole.

DES-avaimeni pariteetti on pariton / siinä on ei-ASCII-tavuja. DES ohittaa jokaisen avaintavun pariteettibitin, joten tehokas avain on joka tapauksessa muut 56 bittiä. Tämä sivu hyväksyy minkä tahansa 8 tavua eikä vaadi parillista pariteettia.

Miksi puretut tekstit näyttävät joskus roskalta? Väärä avain, väärä tila, väärä IV tai data ei ole salattu niin kuin oletat. Ilman todennustunnistetta ei ole siistiä "väärä avain" -virhettä — täytteen tarkistus on ainoa vihje, ja se voi mennä läpi sattumalta (1/256 kerrasta).

Onko Blowfish turvallinen tiedostoilleni? Pienille tiedostoille kryptografisesti kyllä (ei käytännöllistä murtoa). Kaikelle gigatavun kokoluokan datalle yhden avaimen alla ei — 64 bitin lohkon syntymäpäivärajat koskevat datan määrää, eivät avaimen vahvuutta. Twofish tai AES välttävät ongelman.

Entä 72 tavun Blowfish-avaimet, joita näin jossain? Jotkin toteutukset hyväksyvät jopa 72 tavua, mutta Schneierin referenssi käyttää 56 tavua, ja sen ylittävät tavut eivät anna lisädiffuusiota standardin aikataulussa. Tämä sivu seuraa referenssiä: 4..56 tavua.