MD5 vs SHA-256: forskelle og anbefalinger
MD5 og SHA-256 er to kryptografiske hash-funktioner. De producere et fingeraftryk i fast størrelse ud fra et input i vilkårlig størrelse. Vi møder dem overalt: verifikation af filintegritet, signaturer, unikke identifikatorer, TLS-certifikater, blockchain. Deres sikkerhedsstatus er dog meget anderledes: MD5 er brudt siden 2004 til kryptografisk brug forbliver SHA-256 sikker i 2026. Denne artikel gør status.
Påmindelse om hash-funktioner
En kryptografisk hash-funktion omdanner en besked af enhver længde til et fingeraftryk af fast størrelse. Tre forventede ejendomme:
- Preimage modstand: givet en hash, må det være umuligt at finde den originale besked.
- Anden preimage-modstand: givet en besked, må det være umuligt at finde en anden, der producerer den samme hash.
- Kollisionsmodstand: det må være umuligt at finde to adskilte beskeder, der producerer den samme hash.
En funktion siges at være brudt, så snart en af disse egenskaber falder. For MD5, modstand mod kollisioner faldt i 2004.
MD5: 128 bit, ødelagt siden 2004
MD5 (Message Digest 5) er en funktion designet af Ronald Rivest i 1991 og standardiseret af RFC 1321. Hun producerer et 128-bit fingeraftryk (16 bytes, 32 hexadecimale tegn).
I 2004 offentliggjorde Wang og Yu et angreb, der frembragte MD5-kollisioner inden for få timer på en pc. Siden da er omkostningerne ved at generere en kollision faldet til et par sekunder. I 2008, forskere har fremstillet et falsk MD5-signeret SSL-certifikat, der er anerkendt som gyldigt af alle browsere. I 2012 blev Flame malware brugte en MD5-kollision til at signere dens eksekverbare som en Microsoft-binær legitime.
Konklusion: MD5 bør ikke længere bruges, så snart en angriber kan påvirke inputtet. Alle kryptografiske anvendelser (signaturer, integritet mod en modstander, nøgleafledning) er udelukket. Kun få anvendelser uden fjendtlighed forbliver acceptable, såsom en kontrolsum for netværksoverførsel eller en cache-nøgle: MD5 forbliver hurtig, og den utilsigtede kollision forbliver statistisk umuligt.
SHA-256: 256 bit, sikker i 2026
SHA-256 tilhører SHA-2-familien udgivet af NIST i 2001 og standardiseret af FIPS 180-4. Hun producerer et 256-bit fingeraftryk (32 bytes, 64 hexadecimale tegn).
Der kendes ingen praktiske angreb mod SHA-256. Det bedste teoretiske angreb på kollisioner drejer sig om 31 runder ud af 64, uden praktisk betydning. De brute force omkostninger ved at finde en kollision er af størrelsesordenen 2^128 operationer, uden for rækkevidde af enhver kendt infrastruktur.
SHA-256 bruges i: TLS (X.509 certifikater), Git (siden SHA-256 overgang), Bitcoin (bevis arbejde), Linux-pakkesignaturer, Windows Update osv. I dag er hashen anbefales som standard til de fleste generelle kryptografiske anvendelser.
Praktiske forskelle
Outputlængde
MD5("hej") = 5d41402abc4b2a76b9719d911017c592 (32 hex-tegn)
SHA-256("hej") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (64 hex-tegn)
Hastighed
MD5 er omkring 2-3 gange hurtigere end SHA-256 på samme maskine. På en moderne CPU, MD5 behandler flere GB/s pr. kerne, SHA-256 er i størrelsesordenen GB/s. På nyere CPU'er med udvidelse SHA-NI, kløften indsnævres kraftigt.
Sikkerhed
Dette er den eneste forskel, der virkelig betyder noget: MD5 er brudt ved kollisioner, SHA-256 er ikke. Hvis sikkerheden mod en modstander er på spil, er valget klart.
Sammenligningstabel
| Kriterium | MD5 | SHA-256 |
|---|---|---|
| Årgang | 1991 | 2001 |
| Outputstørrelse | 128 bit / 32 hex | 256 bit / 64 hex |
| Kollisionsmodstand | Brukket siden 2004 | Intet praktisk angreb |
| Relativ hastighed | 2 til 3 gange hurtigere | Reference |
| Hardwareacceleration | Ingen dedikeret | SHA-NI på nyere CPU'er |
| Kryptografisk brug | Anbefales ikke | Anbefales |
| Ikke-fjendtlig integritetsbrug | Acceptabel | Anbefales |
| Overholdelse af lovgivning | Afvist (PCI-DSS, FIPS) | Accepteret |
Brug cases
Når MD5 forbliver acceptabel
- Applikationscache-nøgle (Redis, memcached) uden sikkerhedsimplikationer
- Duplikatdetektering i et ikke-fjendtligt datasæt
- Tjeksum af en netværksoverførsel for at opdage utilsigtet korruption
- Fodaftryk af en kæde til distribution (sharding) uden modstridende begrænsninger
Når SHA-256 er påkrævet
- Integritetstjek mod en hacker (signerede downloads, pakker)
- Digitale signaturer, X.509-certifikater
- Git-id'er for commits og objekter
- Nøgleafledning (i kombination med HKDF)
- Enhver ansøgning underlagt et lovkrav (PCI-DSS, ANSSI, FIPS)
Konkrete eksempler
I PHP er begge funktioner tilgængelige via funktionen hash():
// Aftryk af en streng
$md5 = hash('md5', 'hej verden');
$sha256 = hash('sha256', 'hej verden');
// Fingeraftryk en fil (streaming)
$md5File = hash_file('md5', '/path/to/file.iso');
$sha256File = hash_file('sha256', '/path/to/file.iso');
Du kan generere disse print direkte online med vores tekst-hash-generator, hash en fil med fil-hash-generator, eller identificer en ukendt hash-type med hash-id'et.
Henstilling
Regel 2026 er enkel: SHA-256 som standard. MD5 bør ikke længere vises i din kode, så snart en angriber kan påvirke inputtet, som dækker næsten alle tilfælde server. Den overlegne ydeevne af MD5 retfærdiggør ikke længere brugen, kløften er blevet ubetydelig med SHA-NI-accelerationer til stede på moderne x86- og ARM-CPU'er.
Ofte stillede spørgsmål
Er MD5 stadig sikker for adgangskoder?
Nej, aldrig. Og dette punkt er uafhængigt af kollisioner: MD5 er for hurtig. En GPU bryder adskillige milliarder MD5-hashes i sekundet og laver ethvert angreb ordbog eller triviel brute force. For adgangskoder, brug bcrypt, Argon2 eller scrypt (se vores Bcrypt vs Argon2 sammenligning).
Hvad er forskellen mellem SHA-256 og SHA-2?
SHA-2 er familien, SHA-256 er medlem. Familien inkluderer SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 og SHA-512/256. De adskiller sig i outputstørrelse og filstørrelse. indre blokke. SHA-256 er den mest brugte variant.
Skal vi flytte til SHA-3?
Ikke nødvendigvis. SHA-3 (udgivet i 2015) er afhængig af en radikalt anderledes konstruktion (Keccak/svamp), men SHA-256 forbliver sikker. SHA-3 fungerer hovedsageligt som en plan B i tilfælde af problemer uventet på SHA-2. Vælg SHA-3, hvis en standard kræver det, eller hvis du ønsker diversitet kryptografisk. Ellers forbliver SHA-256 standardvalget.
Kan vi reversere en MD5- eller SHA-256-hash?
Nej, efter konstruktion: en hash mister information. MD5 "dekryptering" websteder gør ikke end at forespørge på gigantiske baser af forudberegnede hashes (regnbuetabeller) for indgange fælles. For lange tilfældige data er det umuligt at finde posten med begge algoritmer.
Vil SHA-256 blive brudt af en kvantecomputer?
Grovers algoritme halverer den effektive sikkerhed af hashes mod en angriber kvante: SHA-256 ville derefter tilbyde omkring 128 bits sikkerhed, hvilket stort set stadig er tilstrækkeligt. Ingen haster på hash-siden, i modsætning til asymmetrisk kryptografi.