MD5 vs SHA-256: verschillen en aanbevelingen
MD5 en SHA-256 zijn twee cryptografische hashfuncties. Ze produceren een vingerafdruk van vaste lengte uit een invoer van willekeurige lengte. Je komt ze overal tegen: controle van bestandsintegriteit, handtekeningen, unieke identificatoren, TLS-certificaten, blockchain. Hun veiligheidsstatus verschilt echter sterk: MD5 is gebroken sinds 2004 voor cryptografisch gebruik, SHA-256 blijft veilig in 2026. Dit artikel zet de zaken op een rij.
Even opfrissen: hashfuncties
Een cryptografische hashfunctie zet een bericht van willekeurige lengte om in een vingerafdruk van vaste lengte. Er worden drie eigenschappen verwacht:
- Preimage-weerstand: gegeven een hash, moet het onhaalbaar zijn om het oorspronkelijke bericht terug te vinden.
- Tweede-preimage-weerstand: gegeven een bericht, moet het onhaalbaar zijn om een ander bericht te vinden dat dezelfde hash oplevert.
- Botsingsweerstand: het moet onhaalbaar zijn om twee verschillende berichten te vinden die dezelfde hash opleveren.
Een functie wordt gebroken genoemd zodra één van deze eigenschappen valt. Voor MD5 viel de botsingsweerstand in 2004.
MD5: 128 bits, gebroken sinds 2004
MD5 (Message Digest 5) is een functie ontworpen door Ronald Rivest in 1991 en gestandaardiseerd in RFC 1321. Hij produceert een vingerafdruk van 128 bits (16 bytes, 32 hexadecimale tekens).
In 2004 publiceren Wang en Yu een aanval die in enkele uren MD5-botsingen produceert op een pc. Sindsdien is de kost om een botsing te genereren gedaald tot enkele seconden. In 2008 fabriceerden onderzoekers een vals SSL-certificaat ondertekend met MD5 dat door alle browsers als geldig werd erkend. In 2012 gebruikte de Flame-malware een MD5-botsing om zijn uitvoerbaar bestand te ondertekenen als een legitieme Microsoft-binary.
Conclusie: MD5 mag niet meer worden gebruikt zodra een aanvaller de invoer kan beïnvloeden. Alle cryptografische toepassingen (handtekeningen, integriteit tegenover een tegenstander, sleutelafleiding) zijn uitgesloten. Slechts enkele niet-vijandige toepassingen blijven aanvaardbaar, zoals een checksum bij een netwerkoverdracht of een cache-sleutel: MD5 blijft snel, en een onbedoelde botsing blijft statistisch onmogelijk.
SHA-256: 256 bits, veilig in 2026
SHA-256 behoort tot de SHA-2-familie die in 2001 door NIST is gepubliceerd en gestandaardiseerd in FIPS 180-4. Hij produceert een vingerafdruk van 256 bits (32 bytes, 64 hexadecimale tekens).
Er is geen praktische aanval bekend tegen SHA-256. De beste theoretische botsingsaanval betreft 31 rondes op 64, zonder praktische implicatie. De brute-force-kost om een botsing te vinden ligt in de orde van 2^128 bewerkingen, buiten het bereik van elke bekende infrastructuur.
SHA-256 wordt onder meer gebruikt in: TLS (X.509-certificaten), Git (sinds de SHA-256-overgang), Bitcoin (proof of work), handtekeningen van Linux-pakketten, Windows Update, enz. Het is vandaag de standaard aanbevolen hash voor het merendeel van de algemene cryptografische toepassingen.
Praktische verschillen
Uitvoerlengte
MD5("hello") = 5d41402abc4b2a76b9719d911017c592 (32 tekens hex)
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (64 tekens hex)
Snelheid
MD5 is ongeveer 2 tot 3 keer sneller dan SHA-256 op dezelfde machine. Op een moderne CPU verwerkt MD5 meerdere GB/s per core, SHA-256 zit in de orde van een GB/s. Op recente CPU's met de SHA-NI- extensie wordt het verschil sterk gereduceerd.
Veiligheid
Dat is het enige verschil dat echt telt: MD5 is gebroken voor botsingen, SHA-256 niet. Als de veiligheid tegenover een tegenstander op het spel staat, is de keuze gemaakt.
Vergelijkingstabel
| Criterium | MD5 | SHA-256 |
|---|---|---|
| Jaar | 1991 | 2001 |
| Uitvoergrootte | 128 bits / 32 hex | 256 bits / 64 hex |
| Botsingsweerstand | Gebroken sinds 2004 | Geen praktische aanval |
| Relatieve snelheid | 2 tot 3 keer sneller | Referentie |
| Hardware-versnelling | Geen specifieke | SHA-NI op recente CPU's |
| Cryptografisch gebruik | Afgeraden | Aanbevolen |
| Niet-vijandig integriteitsgebruik | Acceptabel | Aanbevolen |
| Regelgevende conformiteit | Geweigerd (PCI-DSS, FIPS) | Aanvaard |
Gebruiksgevallen
Wanneer MD5 acceptabel blijft
- Applicatie-cachesleutel (Redis, memcached) zonder veiligheidsimpact
- Detectie van duplicaten in een niet-vijandige dataset
- Checksum van een netwerkoverdracht om toevallige corruptie te detecteren
- Vingerafdruk van een string voor verdeling (sharding) zonder adversaire eis
Wanneer SHA-256 verplicht is
- Integriteitscontrole tegenover een aanvaller (ondertekende downloads, pakketten)
- Digitale handtekeningen, X.509-certificaten
- Git-identificatoren van commits en objecten
- Sleutelafleiding (in combinatie met HKDF)
- Elke toepassing onderworpen aan een regelgevende eis (PCI-DSS, ANSSI, FIPS)
Concrete voorbeelden
In PHP zijn beide functies beschikbaar via de functie hash():
// Vingerafdruk van een string
$md5 = hash('md5', 'hello world');
$sha256 = hash('sha256', 'hello world');
// Vingerafdruk van een bestand (streaming lezen)
$md5File = hash_file('md5', '/path/to/file.iso');
$sha256File = hash_file('sha256', '/path/to/file.iso');
Je kunt deze vingerafdrukken rechtstreeks online genereren met onze tekst-hash-generator, een bestand hashen met de bestands-hash-generator, of een onbekend hashtype identificeren met de hash-identificator.
Aanbeveling
De regel voor 2026 is eenvoudig: SHA-256 standaard. MD5 mag niet meer in je code verschijnen zodra een aanvaller de invoer kan beïnvloeden, wat vrijwel alle serverzijde gevallen dekt. De hogere prestaties van MD5 rechtvaardigen het gebruik niet meer, het verschil is verwaarloosbaar geworden met de SHA-NI-versnelling op moderne x86- en ARM-CPU's.
Veelgestelde vragen
Is MD5 nog veilig voor wachtwoorden?
Nee, nooit. En dat punt staat los van de botsingen: MD5 is te snel. Een GPU kraakt meerdere miljarden MD5-hashes per seconde, waardoor elke woordenboek- of brute-force-aanval triviaal wordt. Gebruik voor wachtwoorden bcrypt, Argon2 of scrypt (zie onze vergelijking Bcrypt vs Argon2).
Wat is het verschil tussen SHA-256 en SHA-2?
SHA-2 is de familie, SHA-256 is er een lid van. De familie omvat SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 en SHA-512/256. Ze verschillen in uitvoergrootte en in de grootte van de interne blokken. SHA-256 is de meest gebruikte variant.
Moet je overschakelen naar SHA-3?
Niet noodzakelijk. SHA-3 (gepubliceerd in 2015) is gebaseerd op een radicaal andere constructie (Keccak / sponge), maar SHA-256 blijft veilig. SHA-3 dient vooral als plan B mocht er een onverwacht probleem opduiken met SHA-2. Kies SHA-3 als een norm dat vereist, of als je cryptografische diversiteit wenst. Anders blijft SHA-256 de standaardkeuze.
Kun je een MD5- of SHA-256-hash omkeren?
Nee, per ontwerp: een hash verliest informatie. De « ontsleutelings »-sites voor MD5 doen niets anders dan reusachtige databases van vooraf berekende hashes (rainbow tables) ondervragen voor veelvoorkomende invoer. Voor lange willekeurige data is het bij beide algoritmes onmogelijk om de invoer terug te vinden.
Wordt SHA-256 gebroken door een kwantumcomputer?
Het Grover-algoritme deelt de effectieve veiligheid van hashes door twee tegen een kwantumaanvaller: SHA-256 zou dan ongeveer 128 bits veiligheid bieden, wat ruimschoots voldoende blijft. Geen urgentie aan de hash-kant, in tegenstelling tot de asymmetrische cryptografie.