MD5 vs SHA-256: skillnader och rekommendationer
MD5 och SHA-256 är två kryptografiska hashfunktioner. De producerar en fingeravtryck av fast storlek från en indata av godtycklig storlek. Man möter dem överallt: verifiering av filintegritet, signaturer, unika identifierare, TLS-certifikat, blockchain. Deras säkerhetsstatus är däremot mycket olika: MD5 är knäckt sedan 2004 för kryptografiska användningar, medan SHA-256 förblir säker 2026. Den här artikeln gör en sammanställning.
Påminnelse om hashfunktioner
En kryptografisk hashfunktion omvandlar ett meddelande av godtycklig längd till en fingeravtryck av fast storlek. Tre förväntade egenskaper:
- Preimage-motstånd: givet en hash ska det vara omöjligt att hitta det ursprungliga meddelandet.
- Andra-preimage-motstånd: givet ett meddelande ska det vara omöjligt att hitta ett annat som producerar samma hash.
- Kollisionsmotstånd: det ska vara omöjligt att hitta två distinkta meddelanden som producerar samma hash.
En funktion sägs vara knäckt så snart en av dessa egenskaper faller. För MD5 föll kollisionsmotståndet 2004.
MD5: 128 bitar, knäckt sedan 2004
MD5 (Message Digest 5) är en funktion utformad av Ronald Rivest 1991 och standardiserad genom RFC 1321. Den producerar en fingeravtryck på 128 bitar (16 byte, 32 hexadecimala tecken).
2004 publicerade Wang och Yu en attack som producerar MD5-kollisioner på några timmar på en PC. Sedan dess har kostnaden för att generera en kollision sjunkit till några sekunder. 2008 tillverkade forskare ett falskt SSL-certifikat signerat med MD5 som erkändes som giltigt av alla webbläsare. 2012 använde skadeprogrammet Flame en MD5-kollision för att signera sin körbara fil som en legitim Microsoft-binär.
Slutsats: MD5 ska inte längre användas så snart en angripare kan påverka indata. Alla kryptografiska användningar (signaturer, integritet mot en motståndare, nyckelderivering) är uteslutna. Endast några icke-fientliga användningar är fortfarande acceptabla, som en nätverksöverföringschecksumma eller en cachenyckel: MD5 förblir snabb, och oavsiktlig kollision är statistiskt omöjlig.
SHA-256: 256 bitar, säker 2026
SHA-256 tillhör SHA-2-familjen som publicerades av NIST 2001 och standardiserades genom FIPS 180-4. Den producerar en fingeravtryck på 256 bitar (32 byte, 64 hexadecimala tecken).
Ingen praktisk attack är känd mot SHA-256. Den bästa teoretiska attacken på kollisioner rör 31 omgångar av 64, utan praktisk inverkan. Brute force-kostnaden för att hitta en kollision är i storleksordningen 2^128 operationer, utom räckhåll för all känd infrastruktur.
SHA-256 används i: TLS (X.509-certifikat), Git (sedan SHA-256-övergången), Bitcoin (proof of work), signaturer av Linux-paket, Windows Update, etc. Det är idag den rekommenderade standardhashen för majoriteten av allmänna kryptografiska användningar.
Praktiska skillnader
Utdatalängd
MD5("hello") = 5d41402abc4b2a76b9719d911017c592 (32 chars hex)
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (64 chars hex)
Hastighet
MD5 är ungefär 2 till 3 gånger snabbare än SHA-256 på samma maskin. På en modern CPU bearbetar MD5 flera GB/s per kärna, SHA-256 ligger på storleksordningen GB/s. På nya CPU:er med SHA-NI-tillägget krymper gapet kraftigt.
Säkerhet
Det är den enda skillnaden som verkligen räknas: MD5 är knäckt för kollisioner, SHA-256 är det inte. Om säkerhet mot en motståndare står på spel är valet avgjort.
Jämförelsetabell
| Kriterium | MD5 | SHA-256 |
|---|---|---|
| År | 1991 | 2001 |
| Utdatastorlek | 128 bitar / 32 hex | 256 bitar / 64 hex |
| Kollisionsmotstånd | Knäckt sedan 2004 | Ingen praktisk attack |
| Relativ hastighet | 2 till 3 gånger snabbare | Referens |
| Hårdvaruacceleration | Ingen dedikerad | SHA-NI på nya CPU:er |
| Kryptografisk användning | Avrådes | Rekommenderas |
| Icke-fientlig integritetsanvändning | Acceptabel | Rekommenderas |
| Regelefterlevnad | Avvisad (PCI-DSS, FIPS) | Accepterad |
Användningsfall
När MD5 fortfarande är acceptabel
- Applikationscachenyckel (Redis, memcached) utan säkerhetsimplikationer
- Dubblettdetektion i ett icke-fientligt dataset
- Checksumma vid nätverksöverföring för att upptäcka oavsiktlig korruption
- Fingeravtryck av en sträng för fördelning (sharding) utan motståndarbegränsning
När SHA-256 är ett måste
- Integritetsverifiering mot en angripare (signerade nedladdningar, paket)
- Digitala signaturer, X.509-certifikat
- Git-identifierare för commits och objekt
- Nyckelderivering (i kombination med HKDF)
- Alla applikationer som omfattas av regelkrav (PCI-DSS, ANSSI, FIPS)
Konkreta exempel
I PHP är båda funktionerna tillgängliga via funktionen hash():
// Fingeravtryck av en strang
$md5 = hash('md5', 'hello world');
$sha256 = hash('sha256', 'hello world');
// Fingeravtryck av en fil (lasning i streaming)
$md5File = hash_file('md5', '/path/to/file.iso');
$sha256File = hash_file('sha256', '/path/to/file.iso');
Du kan generera dessa fingeravtryck direkt online med vår texthashgenerator, hasha en fil med filhashgeneratorn, eller identifiera en okänd hashtyp med hashidentifieraren.
Rekommendation
Regeln för 2026 är enkel: SHA-256 som standard. MD5 ska inte längre förekomma i din kod så snart en angripare kan påverka indata, vilket täcker nästan alla serverfall. MD5:s högre prestanda motiverar inte längre dess användning, gapet har blivit försumbart med SHA-NI-acceleration som finns på moderna x86- och ARM-CPU:er.
Vanliga frågor
Är MD5 fortfarande säker för lösenord?
Nej, aldrig. Och denna punkt är oberoende av kollisioner: MD5 är för snabb. En GPU knäcker flera miljarder MD5-hashar per sekund, vilket gör varje ordbok- eller brute force-attack trivial. För lösenord, använd bcrypt, Argon2 eller scrypt (se vår jämförelse Bcrypt vs Argon2).
Vad är skillnaden mellan SHA-256 och SHA-2?
SHA-2 är familjen, SHA-256 är en medlem av den. Familjen omfattar SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 och SHA-512/256. De skiljer sig åt i utdatastorlek och storlek på interna block. SHA-256 är den mest använda varianten.
Bör man gå över till SHA-3?
Inte nödvändigtvis. SHA-3 (publicerad 2015) bygger på en radikalt annorlunda konstruktion (Keccak / sponge), men SHA-256 förblir säker. SHA-3 fungerar främst som plan B om något oväntat skulle hända med SHA-2. Välj SHA-3 om en standard kräver det, eller om du vill ha kryptografisk mångfald. Annars är SHA-256 fortfarande standardvalet.
Kan man invertera en MD5- eller SHA-256-hash?
Nej, av design: en hash förlorar information. MD5-"dekrypteringssajter" frågar bara gigantiska databaser med förberäknade hashar (rainbow tables) för vanliga indata. För långa slumpmässiga data är det omöjligt att hitta indata med båda algoritmerna.
Kommer SHA-256 att knäckas av en kvantdator?
Grovers algoritm halverar den effektiva säkerheten hos hashar mot en kvantangripare: SHA-256 skulle då erbjuda omkring 128 bitars säkerhet, vilket fortfarande är gott och väl tillräckligt. Ingen brådska på hashsidan, till skillnad från asymmetrisk kryptografi.