Criptare și decriptare DES / 3DES / RC4 / Blowfish

Criptare sau decriptare cu cele patru cifruri clasice care mai trăiesc în fișiere vechi, copii de siguranță și protocoale — DES și 3DES în ECB sau CBC, RC4 (ARCFOUR) ca flux, iar Blowfish cu chei de până la 56 de octeți. Verificat față de FIPS 46-3, de vectorii lui Schneier pentru Blowfish și de RFC 6229. Totul rulează local în browser — nimic nu se încarcă. Pentru lucrul modern se folosește AES-GCM.
Aceste cifruri există aici pentru compatibilitate, nu pentru lucru nou. DES a fost retras în 2005, 3DES în 2023, RC4 este interzis în TLS din 2015 (RFC 7465), iar blocul de 64 de biți al Blowfish atinge limita de aniversare după circa 32 GiB de date sub o singură cheie. Pentru orice lucru nou se folosește AES-GCM.
Direcție: Cifru: Mod: Ieșire:
DES = Standardul de criptare a datelor din 1977: blocuri de 64 de biți, cheie efectivă de 56 de biți. Retras, dar încă întâlnit în copii de siguranță vechi, blocuri PIN (bancare) și Kerberos v4. Cheia trebuie să aibă exact 8 octeți.
Hex acceptă spații, două puncte și prefixe 0x. DES ignoră bitul de paritate din fiecare octet al cheii.
Cifrurile bloc umplu cu PKCS#7; RC4 nu umple niciodată.
Lungimi de cheie acceptate de această pagină
CifruCheieBlocStare
DESexact 8 octeți (56 de biți efectivi)64 de bițiretras în 2005 (NIST SP 800-131A)
3DES-EDE3exact 24 de octeți (112 biți efectivi)64 de bițiinterzis după 2023 (SP 800-131A r2)
3DES-EDE2exact 16 octeți (112 biți efectivi)64 de bițila fel ca EDE3, opțiune veche mai slabă
RC4 / ARCFOUR1..256 de octețifluxinterzis în TLS din 2015 (RFC 7465)
Blowfish4..56 de octeți64 de biținespart, dar limitat de dimensiunea blocului; se folosesc Twofish/AES
Dimensiunea efectivă a cheii este mai mică decât cea brută, deoarece DES folosește un bit din fiecare octet ca paritate: o cheie brută de 64 de biți poartă doar 56 de biți de cheie, iar 3DES cu trei chei independente poartă 112 (întâlnire la mijloc).
Interoperabilitate OpenSSL — OpenSSL 3 a mutat aceste cifruri în furnizorul legacy; se adaugă -provider legacy dacă versiunea instalată refuză. Echivalentele din linia de comandă ale acestei pagini:
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 pentru Blowfish-CBC.
Decriptarea se face cu -d. -K primește o cheie hex brută, -k o parolă (de evitat — KDF-ul diferă de orice de pe această pagină).
Autotest
Rulează din nou motorul paginii față de vectori din surse publice și de vectori produși independent: exemplul lucrat DES din FIPS 46-3, textele cifrate 3DES EDE2/EDE3 generate cu OpenSSL, vectorii Schneier pentru Blowfish, vectorii de test RC4 din RFC 6229 și exemplul clasic „Key/Plaintext”, transformările dus-întors în fiecare mod și teste negative (dimensiune greșită a cheii, text cifrat care nu este multiplu de bloc trebuie să eșueze). Nimic nu se trimite nicăieri.
DES, 3DES, RC4 și Blowfish explicate de la zero
Într-o propoziție: aceste patru cifruri au fost caii de povară ai anilor 1990 — DES și soluția lui de criptare triplă 3DES, cifrul de flux RC4 și Blowfish — iar astăzi toate sunt retrase sau depreciate, menținute în viață doar de fișiere vechi, hardware vechi și protocoale vechi care trebuie încă citite.
DES: standardul din 1977 care a deschis drumul

Ce este. Standardul de criptare a datelor (FIPS 46, 1977) este un cifru Feistel cu 16 runde, pe blocuri de 64 de biți, cu o cheie de 56 de biți (stocată în 8 octeți, deoarece un bit din fiecare octet este un bit de paritate). A fost proiectat de IBM cu contribuția NSA, a devenit standardul SUA timp de două decenii și a fost spart prin decizie politică în 1998, când mașina Deep Crack a EFF a găsit prin forță brută o cheie în 56 de ore, cu 250.000 de dolari în hardware. NIST l-a retras pentru criptare în 2005.

De ce bitul de paritate încurcă lungimile cheilor. Fiecare al 8-lea bit dintr-o cheie DES este calculat din ceilalți șapte, deci o cheie de 8 octeți conține doar 56 de biți independenți — de aceea apar atât „cheie de 64 de biți”, cât și „cheie de 56 de biți” pentru același cifru. 3DES moștenește aceasta: 24 de octeți brut = 168 de biți brut = 112 efectivi (atacul întâlnire la mijloc elimină restul).

Unde mai apare. Blocurile PIN bancare (ISO 9564), unele domenii Kerberos v4, arhive vechi de copii de siguranță și cardurile inteligente. Dacă un sistem cere DES astăzi, fie interoperează cu hardware din anii 1990, fie este pur și simplu nesigur.

3DES: criptare, decriptare, criptare

Trucul. Triple-DES rulează DES de trei ori pe fiecare bloc: EDE3 folosește trei chei diferite (C = Ek3(Dk2(Ek1(P)))); pasul de decriptare din mijloc există pentru ca o implementare 3DES să poată emula DES simplu, setând k1=k2. EDE2 folosește doar două chei (k1=k3), ceea ce dă 112 biți efectivi. Construcția a fost o soluție rapidă care a triplat securitatea unui cifru deja atacat, fără a inventa unul nou.

De ce a murit oricum. Două probleme: este lent (trei treceri complete DES pe bloc, cam 1/20 din viteza AES) și a păstrat blocul de 64 de biți. Cu 32 GiB de date sub o singură cheie (limita de aniversare de 232 blocuri), coliziunile de blocuri devin suficient de probabile încât să scurgă structura textului clar — atacul Sweet32 (2016) a demonstrat aceasta împotriva sesiunilor TLS 3DES. NIST a interzis criptarea 3DES după 2023 (SP 800-131A r2); PCI DSS impune retragerea acestuia în sistemele de plată.

RC4 / ARCFOUR: cifrul de flux al primului web

Cum funcționează. RC4 (Ron's Code 4, proiectat în 1987, scurs în 1994) este un cifru de flux: cheia programează o permutare de 256 de octeți (KSA), apoi permutarea emite un flux pseudoaleatoriu de octeți (PRGA), care se aplică prin XOR cu mesajul. Fără umplere, fără dimensiune de bloc, orice lungime a mesajului, extrem de rapid în software — motiv pentru care a dominat SSL/TLS și WEP în anii 1990. „ARCFOUR” este denumirea fără marcă înregistrată pe care o folosesc majoritatea proiectelor open-source.

Cum s-a spart. Fluhrer, Mantin și Shamir (2001) au arătat că primii octeți ai fluxului de chei sunt părtinitori — fatal în WEP, unde construcția cheii pe pachet le oferea atacatorilor. Atacurile ulterioare de părtinire (2013, AlFardan et al.) au recuperat texte clare din sesiuni TLS protejate cu RC4, având milioane de conexiuni. RFC 7465 (2015) interzice explicit RC4 în TLS.

Vectorul clasic. Cheia „Key” (3 octeți), mesajul „Plaintext” dau textul cifrat bbf316e8d940af0ad3 — se poate încerca exemplul RC4 și se compară. Autotestul acestei pagini verifică și fluxul de chei RFC 6229 pentru cheia de 40 de biți 01 02 03 04 05: b2396305f03dc027ccc3524a0a1118a8.

Blowfish: nespart, dar limitat de bloc

Ce este. Cifrul Feistel al lui Bruce Schneier din 1993: blocuri de 64 de biți, chei de la 32 la 448 de biți (4..56 de octeți), 16 runde și un program de chei celebru, care rulează chiar Blowfish de 521 de ori pentru a construi subcheile — ceea ce face inițializarea cheii lentă, dar și încercările de forță brută costisitoare. Nicio criptanaliză practică nu sparge Blowfish cu runde complete.

De ce se află pe această pagină. Problema este blocul de 64 de biți, nu algoritmul: peste ~32 GiB sub o singură cheie, coliziunile de tip aniversare scurg date (aceeași limită ca la 3DES, de tip Sweet32). Schneier însuși recomandă succesorul său Twofish (finalist AES) sau AES pentru orice lucru nou. Blowfish trăiește mai departe în bcrypt — programul de chei al hașului pentru parole este Blowfish — ceea ce este în regulă, deoarece hașurile folosesc intrări mici, nu volume de ordinul gigaoctetelor.

Vectorii clasici. Cheia și textul clar formate doar din zerouri se cifrează în 4ef997456198dd78 (primul bloc al ieșirii din exemplu); cheia "abcdefghijklmnopqrstuvwxyz" pentru "BLOWFISH" dă 324ed0fef413a203. Ambii provin din fișierul publicat de vectori al lui Schneier și sunt verificate de autotest.

Greșeli frecvente
  • Utilizarea lor pentru date noi. Fiecare cifru de pe această pagină este depreciat, cu excepția Blowfish (care este limitat de dimensiunea blocului). Alegerea modernă corectă este AES-GCM — vezi Criptare / decriptare AES.
  • Cheie DES dintr-o parolă. O parolă de 8 caractere nu înseamnă 56 de biți aleatori; înseamnă câțiva biți de entropie pe caracter. Sistemele vechi făceau exact aceasta, iar aceasta este cea mai frecventă cauză pentru care arhivele „criptate DES” cad în minute în atacuri de dicționar.
  • Refolosirea unui IV în CBC. Primul bloc scurge atunci egalitatea textului clar între mesaje sub aceeași cheie. Butonul IV aleatoriu există dintr-un motiv.
  • Refolosirea unui flux de chei RC4. RC4 aplică XOR cu același flux de chei pentru aceeași cheie: criptarea a două mesaje cu o cheie este un bloc de unică folosință folosit de două ori — prin XOR-ul textelor cifrate ies la iveală ambele texte clare. Defectul fatal al WEP a fost exact o construcție cu refolosirea fluxului de chei.
  • Presupunerea că „se decriptează, deci e corect”. ECB/CBC validează aici doar umplerea la decriptare — o cheie greșită produce de obicei un text fără sens, care poate trece totuși de verificarea umplerii. Niciun mod vechi nu are verificare de integritate; dacă este nevoie de una, se folosește AES-GCM, nu aceste moduri.
  • Numărarea 3DES ca „168 de biți”. Cheia brută are 168 de biți, dar puterea efectivă este de 112 — atacul întâlnire la mijloc reduce criptarea triplă la una dublă plus ceva, exact ca la construcțiile strămoșești ale 3DES.
Întrebări frecvente

De ce să mai existe un instrument cu cifruri sparte? Compatibilitatea. Copiile de siguranță criptate, fișierele exportate în format vechi, urmele de protocol capturate, provocările CTF și hardware-ul care nu poate fi actualizat mai vorbesc încă aceste cifruri. Citirea datelor vechi este legitimă; scrierea de date noi cu ele nu este.

Cheia DES are paritate impară / octeți non-ASCII. DES ignoră bitul de paritate din fiecare octet al cheii, deci cheia efectivă este oricum celelalte 56 de biți. Această pagină acceptă orice 8 octeți și nu impune paritate pară.

De ce arată uneori textul decriptat ca un șir de caractere fără sens? Cheie greșită, mod greșit, IV greșit sau datele nu au fost criptate în felul presupus. Fără etichetă de autentificare nu există o eroare curată de „cheie greșită” — verificarea umplerii este singurul indiciu, iar aceasta poate trece din noroc (în 1/256 din cazuri).

Este Blowfish sigur pentru fișiere? Pentru fișiere mici, din punct de vedere criptografic, da (fără spargere practică). Pentru orice volum de ordinul gigaoctetelor sub o singură cheie, nu — limita de aniversare pentru blocul de 64 de biți ține de volumul datelor, nu de puterea cheii. Twofish sau AES evită problema.

Ce este cu cheile Blowfish de 72 de octeți pe care le-am văzut undeva? Unele implementări acceptă până la 72 de octeți, dar referința lui Schneier folosește 56, iar octeții de peste această limită nu aduc difuzie suplimentară în programul standard de chei. Această pagină urmează referința: 4..56 de octeți.