MD5 vs SHA-256: diferențe și recomandări
MD5 și SHA-256 sunt două funcții de hashing criptografic. Produc o amprentă de dimensiune fixă plecând de la o intrare de dimensiune arbitrară. Le întâlnim peste tot: verificare de integritate a fișierelor, semnături, identificatori unici, certificate TLS, blockchain. Statutul lor de securitate este în schimb foarte diferit: MD5 este spart din 2004 pentru utilizările criptografice, SHA-256 rămâne sigur în 2026. Acest articol face punctul.
Reamintire asupra funcțiilor de hashing
O funcție de hashing criptografic transformă un mesaj de lungime oarecare într-o amprentă de dimensiune fixă. Trei proprietăți așteptate:
- Rezistență la preimage: fiind dat un hash, trebuie să fie infezabil să se găsească mesajul de origine.
- Rezistență la a doua preimage: fiind dat un mesaj, trebuie să fie infezabil să se găsească altul care să producă același hash.
- Rezistență la coliziuni: trebuie să fie infezabil să se găsească două mesaje distincte care produc același hash.
O funcție este zisă spartă imediat ce una dintre aceste proprietăți cade. Pentru MD5, rezistența la coliziuni a căzut în 2004.
MD5: 128 biți, spart din 2004
MD5 (Message Digest 5) este o funcție concepută de Ronald Rivest în 1991 și standardizată prin RFC 1321. Produce o amprentă de 128 biți (16 octeți, 32 caractere hexazecimale).
În 2004, Wang și Yu publică un atac care produce coliziuni MD5 în câteva ore pe un PC. De atunci, costul generării unei coliziuni a căzut la câteva secunde. În 2008, cercetători au fabricat un certificat SSL fals semnat MD5 recunoscut valid de toate browserele. În 2012, malware-ul Flame utiliza o coliziune MD5 pentru a-și semna executabilul ca un binar Microsoft legitim.
Concluzie: MD5 nu mai trebuie să servească imediat ce un atacator poate influența intrarea. Toate utilizările criptografice (semnături, integritate față de un adversar, derivare de cheie) sunt excluse. Doar câteva utilizări fără ostilitate rămân acceptabile, precum un checksum de transfer rețea sau o cheie de cache: MD5 rămâne rapid, iar coliziunea involuntară rămâne statistic imposibilă.
SHA-256: 256 biți, sigur în 2026
SHA-256 aparține familiei SHA-2 publicată de NIST în 2001 și standardizată prin FIPS 180-4. Produce o amprentă de 256 biți (32 octeți, 64 caractere hexazecimale).
Niciun atac practic nu este cunoscut contra SHA-256. Cel mai bun atac teoretic asupra coliziunilor privește 31 runde din 64, fără implicație practică. Costul forței brute pentru a găsi o coliziune este de ordinul a 2^128 operații, în afara îndemânii oricărei infrastructuri cunoscute.
SHA-256 este utilizat în: TLS (certificate X.509), Git (din SHA-256 transition), Bitcoin (proof of work), semnături de pachete Linux, Windows Update, etc. Este astăzi hash-ul recomandat implicit pentru majoritatea utilizărilor criptografice generale.
Diferențe practice
Lungime de ieșire
MD5("hello") = 5d41402abc4b2a76b9719d911017c592 (32 chars hex)
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (64 chars hex)
Viteză
MD5 este aproximativ de 2 până la 3 ori mai rapid decât SHA-256 pe aceeași mașină. Pe un CPU modern, MD5 tratează mai mulți Gb/s per core, SHA-256 este de ordinul Gb/s. Pe CPU-urile recente cu extensia SHA-NI, diferența se reduce puternic.
Securitate
Este singura diferență care contează realmente: MD5 este spart pentru coliziuni, SHA-256 nu este. Dacă securitatea față de un adversar este în joc, alegerea este tranșată.
Tabel comparativ
| Criteriu | MD5 | SHA-256 |
|---|---|---|
| An | 1991 | 2001 |
| Dimensiune ieșire | 128 biți / 32 hex | 256 biți / 64 hex |
| Rezistență la coliziuni | Spartă din 2004 | Niciun atac practic |
| Viteză relativă | De 2 până la 3 ori mai rapid | Referință |
| Accelerare hardware | Niciuna dedicată | SHA-NI pe CPU-uri recente |
| Utilizare criptografică | Descurajată | Recomandată |
| Utilizare integritate nemalițioasă | Acceptabilă | Recomandată |
| Conformitate reglementare | Refuzată (PCI-DSS, FIPS) | Acceptată |
Cazuri de utilizare
Când MD5 rămâne acceptabil
- Cheie de cache aplicativ (Redis, memcached) fără implicație de securitate
- Detectare de duplicate într-un dataset neostil
- Checksum al unui transfer rețea pentru a detecta o corupție accidentală
- Amprentă a unui șir pentru repartiție (sharding) fără constrângere adversarială
Când SHA-256 se impune
- Verificare de integritate față de un atacator (download-uri semnate, pachete)
- Semnături numerice, certificate X.509
- Identificatori Git de commit-uri și obiecte
- Derivare de chei (în combinație cu HKDF)
- Orice aplicație supusă unei cerințe reglementare (PCI-DSS, ANSSI, FIPS)
Exemple concrete
În PHP, cele două funcții sunt disponibile prin funcția hash():
// Amprenta unui șir
$md5 = hash('md5', 'hello world');
$sha256 = hash('sha256', 'hello world');
// Amprenta unui fișier (citire în streaming)
$md5File = hash_file('md5', '/path/to/file.iso');
$sha256File = hash_file('sha256', '/path/to/file.iso');
Poți genera aceste amprente direct online cu generatorul nostru de hash text, hashui un fișier cu generatorul de hash de fișier, sau identifica un tip de hash necunoscut cu identificatorul de hash.
Recomandare
Regula 2026 este simplă: SHA-256 implicit. MD5 nu mai trebuie să apară în codul tău imediat ce un atacator poate influența intrarea, ceea ce acoperă aproape totalitatea cazurilor server. Performanța superioară a MD5 nu mai justifică utilizarea sa, diferența a devenit neglijabilă cu accelerările SHA-NI prezente pe CPU-urile x86 și ARM moderne.
Întrebări frecvente
Este MD5 încă sigur pentru parole?
Nu, niciodată. Și acest punct este independent de coliziuni: MD5 este prea rapid. Un GPU sparge mai multe miliarde de hash-uri MD5 pe secundă, ceea ce face orice atac prin dicționar sau forță brută trivial. Pentru parole, utilizează bcrypt, Argon2 sau scrypt (vezi comparativul nostru Bcrypt vs Argon2).
Care este diferența între SHA-256 și SHA-2?
SHA-2 este familia, SHA-256 este unul dintre membrii săi. Familia cuprinde SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 și SHA-512/256. Diferă prin dimensiunea de ieșire și dimensiunea blocurilor interne. SHA-256 este varianta cea mai utilizată.
Trebuie să trec la SHA-3?
Nu neapărat. SHA-3 (publicat în 2015) se bazează pe o construcție radical diferită (Keccak / sponge), dar SHA-256 rămâne sigur. SHA-3 servește mai ales ca plan B în caz de problemă neașteptată pe SHA-2. Alege SHA-3 dacă o normă o cere, sau dacă vrei o diversitate criptografică. Altfel, SHA-256 rămâne alegerea standard.
Se poate inversa un hash MD5 sau SHA-256?
Nu, prin construcție: un hash pierde informație. Site-urile de "decriptare" MD5 nu fac decât să interogheze baze gigantice de hash-uri precalculate (rainbow tables) pentru intrări curente. Pentru date aleatorii lungi, găsirea intrării este imposibilă cu cei doi algoritmi.
Va fi SHA-256 spart de un calculator cuantic?
Algoritmul Grover divide cu doi securitatea efectivă a hash-urilor față de un atacator cuantic: SHA-256 ar oferi atunci aproximativ 128 biți de securitate, ceea ce rămâne larg suficient. Nicio urgență pe partea hash, contrar criptografiei asimetrice.