MD5 vs SHA-256: erot ja suositukset
MD5 ja SHA-256 ovat kaksi kryptografista tiivistefunktiota. Ne luovat kiinteän kokoisen sormenjäljen mielivaltaisen kokoisesta syötteestä. Niitä tavataan kaikkialla: tiedostojen eheystarkistuksissa, allekirjoituksissa, yksilöllisissä tunnisteissa, TLS-varmenteissa, lohkoketjuissa. Niiden turvallisuustilanne on kuitenkin hyvin erilainen: MD5 on ollut murrettu vuodesta 2004 lähtien kryptografisessa käytössä, kun taas SHA-256 on edelleen turvallinen vuonna 2026. Tämä artikkeli selvittää tilanteen.
Muistutus tiivistefunktioista
Kryptografinen tiivistefunktio muuntaa minkä tahansa pituisen viestin kiinteän kokoiseksi sormenjäljeksi. Kolme odotettua ominaisuutta:
- Alkukuvatukevuus (pre-image resistance): tietyn tiivisteen perusteella on oltava mahdotonta löytää alkuperäistä viestiä.
- Toisen alkukuvan tukevuus (second pre-image resistance): tietyn viestin perusteella on oltava mahdotonta löytää toista viestiä, joka tuottaa saman tiivisteen.
- Törmäyksenkestävyys (collision resistance): on oltava mahdotonta löytää kaksi eri viestiä, jotka tuottavat saman tiivisteen.
Funktiota pidetään murrettuna heti, kun jokin näistä ominaisuuksista ei enää päde. MD5-algoritmin kohdalla törmäyksenkestävyys murtui vuonna 2004.
MD5: 128 bittiä, murrettu vuodesta 2004
MD5 (Message Digest 5) on Ronald Rivestin vuonna 1991 suunnittelema ja RFC 1321 -standardilla määritelty funktio. Se tuottaa 128-bittisen sormenjäljen (16 tavua, 32 heksadesimaalimerkkiä).
Vuonna 2004 Wang ja Yu julkaisivat hyökkäyksen, joka tuotti MD5-törmäyksiä muutamassa tunnissa tavallisella tietokoneella. Sittemmin törmäyksen luomisen kustannus on laskenut muutamaan sekuntiin. Vuonna 2008 tutkijat loivat väärennetyn MD5-allekirjoitetun SSL-varmenteen, jonka kaikki selaimet hyväksyivät. Vuonna 2012 Flame-haittaohjelma käytti MD5-törmäystä allekirjoittaakseen suoritettavan tiedostonsa laillisena Microsoftin binaarina.
Johtopäätös: MD5-algoritmia ei tule enää käyttää, jos hyökkääjä voi vaikuttaa syötteeseen. Kaikki kryptografiset käyttötavat (allekirjoitukset, eheyden tarkistus vastustajaa vastaan, avaimen johtaminen) ovat poissuljettuja. Vain muutamat ei-vihamieliset käyttötavat ovat edelleen hyväksyttäviä, kuten verkkosiirron tarkistussumma tai välimuistiavain: MD5 on edelleen nopea, ja tahaton törmäys on tilastollisesti epätodennäköinen.
SHA-256: 256 bittiä, turvallinen vuonna 2026
SHA-256 kuuluu SHA-2-perheeseen, jonka NIST julkaisi vuonna 2001 ja joka on standardoitu FIPS 180-4 -asiakirjassa. Se tuottaa 256-bittisen sormenjäljen (32 tavua, 64 heksadesimaalimerkkiä).
SHA-256-algoritmia vastaan ei tunneta yhtään käytännön hyökkäystä. Paras teoreettinen törmäyshyökkäys koskee 31 kierrosta 64:stä, ilman käytännön merkitystä. Brute-force-kustannus törmäyksen löytämiseksi on noin 2^128 operaatiota, mikä on kaiken tunnetun infrastruktuurin ulottumattomissa.
SHA-256:ta käytetään muun muassa seuraavissa: TLS (X.509-varmenteet), Git (SHA-256-siirtymän jälkeen), Bitcoin (proof of work), Linux-pakettien allekirjoitukset, Windows Update jne. Se on nykyään suositeltu oletustiiviste useimpiin yleisiin kryptografisiin tarkoituksiin.
Käytännön erot
Tulosteen pituus
MD5("hello") = 5d41402abc4b2a76b9719d911017c592 (32 heksamerkkiä)
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (64 heksamerkkiä)
Nopeus
MD5 on noin 2–3 kertaa nopeampi kuin SHA-256 samalla koneella. Nykyaikaisella suorittimella MD5 käsittelee useita gigatavuja sekunnissa ydintä kohden, kun taas SHA-256 on gigatavun luokkaa sekunnissa. Uusissa suorittimissa, joissa on SHA-NI-laajennus, ero kapenee huomattavasti.
Turvallisuus
Tämä on ainoa todella merkittävä ero: MD5 on murrettu törmäysten osalta, SHA-256 ei ole. Jos kyseessä on turvallisuus vastustajaa vastaan, valinta on selvä.
Vertailutaulukko
| Kriteeri | MD5 | SHA-256 |
|---|---|---|
| Vuosi | 1991 | 2001 |
| Tulosteen koko | 128 bittiä / 32 hex | 256 bittiä / 64 hex |
| Törmäyksenkestävyys | Murrettu vuonna 2004 | Ei käytännön hyökkäystä |
| Suhteellinen nopeus | 2–3 kertaa nopeampi | Viitearvo |
| Laitteistokiihdytys | Ei dedikoitua | SHA-NI uusissa suorittimissa |
| Kryptografinen käyttö | Ei suositella | Suositellaan |
| Ei-vihamielinen eheyden tarkistus | Hyväksyttävä | Suositellaan |
| Sääntöjenmukaisuus | Hylätty (PCI-DSS, FIPS) | Hyväksytty |
Käyttötapaukset
Milloin MD5 on edelleen hyväksyttävä
- Sovelluksen välimuistiavain (Redis, memcached) ilman turvallisuusvaikutuksia
- Kaksoiskappaleiden havaitseminen ei-vihamielisessä tietoaineistossa
- Verkkosiirron tarkistussumma satunnaisen korruption havaitsemiseksi
- Merkkijonon sormenjälki jakamista (sharding) varten ilman vastustajan uhkaa
Milloin SHA-256 on välttämätön
- Eheyden varmistaminen hyökkääjää vastaan (allekirjoitetut lataukset, paketit)
- Digitaaliset allekirjoitukset, X.509-varmenteet
- Git-tunnisteet commit-viesteille ja objekteille
- Avaimen johtaminen (yhdessä HKDF:n kanssa)
- Kaikki sovellukset, joihin sovelletaan sääntelyvaatimuksia (PCI-DSS, ANSSI, FIPS)
Konkreettisia esimerkkejä
PHP:ssä molemmat funktiot ovat käytettävissä hash()-funktion kautta:
// Merkkijonon sormenjälki
$md5 = hash('md5', 'hello world');
$sha256 = hash('sha256', 'hello world');
// Tiedoston sormenjälki (streaming-luku)
$md5File = hash_file('md5', '/polku/tiedostoon.iso');
$sha256File = hash_file('sha256', '/polku/tiedostoon.iso');
Voit luoda näitä sormenjälkiä suoraan verkossa meidän tekstihajautusgeneraattorillamme, hajauttaa tiedoston tiedostohajautusgeneraattorilla tai tunnistaa tuntemattoman hajautustyypin hajautustunnistimella.
Suositus
Vuoden 2026 sääntö on yksinkertainen: oletuksena SHA-256. MD5-algoritmia ei tule enää esiintyä koodissasi heti, kun hyökkääjä voi vaikuttaa syötteeseen, mikä kattaa lähes kaikki palvelintapaukset. MD5:n parempi suorituskyky ei enää oikeuta sen käyttöä, sillä ero on tullut mitättömäksi nykyaikaisten x86- ja ARM-suorittimien SHA-NI-kiihdytysten myötä.
Usein kysytyt kysymykset
Onko MD5 vielä turvallinen salasanoille?
Ei, ei koskaan. Ja tämä on riippumatonta törmäyksistä: MD5 on liian nopea. Näytönohjain (GPU) murtaa useita miljardeja MD5-hajautuksia sekunnissa, mikä tekee sanakirja- tai brute-force-hyökkäyksistä triviaaleja. Käytä salasanoille bcryptia, Argon2:ta tai scryptia (katso Bcrypt vs Argon2 -vertailumme).
Mitä eroa on SHA-256:lla ja SHA-2:lla?
SHA-2 on perhe, ja SHA-256 on sen jäsen. Perheeseen kuuluvat SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 ja SHA-512/256. Ne eroavat toisistaan tulosteen koon ja sisäisten lohkojen koon perusteella. SHA-256 on yleisimmin käytetty muunnelma.
Pitäisikö siirtyä SHA-3-algoritmiin?
Ei välttämättä. SHA-3 (julkaistu 2015) perustuu täysin erilaiseen rakenteeseen (Keccak / sieni), mutta SHA-256 on edelleen turvallinen. SHA-3 toimii pääasiassa varasuunnitelmana, jos SHA-2-perheestä löytyy odottamattomia ongelmia. Valitse SHA-3, jos jokin standardi sitä vaatii tai jos haluat kryptografista monimuotoisuutta. Muussa tapauksessa SHA-256 on edelleen vakio-valinta.
Voiko MD5- tai SHA-256-hajautuksen purkaa?
Ei voida: hajautusfunktio hukkaa tietoa rakenteellisesti. MD5-purkusivustot vain kysyvät valtavista esilaskettujen hajautusten tietokannoista (rainbow tables) yleisiä syötteitä. Pitkien ja satunnaisten tietojen kohdalla syötteen löytäminen on mahdotonta kummallakin algoritmilla.
Murtaako kvanttitietokone SHA-256:n?
Groverin algoritmi puolittaa hajautusten tehollisen turvallisuuden kvanttihyökkääjää vastaan: SHA-256 tarjoaisi silloin noin 128 bitin turvallisuuden, mikä on edelleen täysin riittävä. Hajautusten osalta ei ole kiirettä, toisin kuin epäsymmetrisen kryptografian kohdalla.