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
Vuosi19912001
Tulosteen koko128 bittiä / 32 hex256 bittiä / 64 hex
TörmäyksenkestävyysMurrettu vuonna 2004Ei käytännön hyökkäystä
Suhteellinen nopeus2–3 kertaa nopeampiViitearvo
LaitteistokiihdytysEi dedikoituaSHA-NI uusissa suorittimissa
Kryptografinen käyttöEi suositellaSuositellaan
Ei-vihamielinen eheyden tarkistusHyväksyttäväSuositellaan
SääntöjenmukaisuusHylä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.