MD5 vs SHA-256: rozdiely a odporúčania
MD5 a SHA-256 sú dve kryptografické hashovacie funkcie. Produkujú otisk pevnej veľkosti zo vstupu ľubovoľnej veľkosti. Stretávame sa s nimi všade: overenie integrity súborov, podpisy, unikátne identifikátory, TLS certifikáty, blockchain. Ich bezpečnostný status je naopak veľmi odlišný: MD5 je prelomený od 2004 pre kryptografické použitia, SHA-256 zostáva bezpečný v 2026. Tento článok sumarizuje situáciu.
Pripomenutie hashovacích funkcií
Kryptografická hashovacia funkcia transformuje správu ľubovoľnej dĺžky na otisk pevnej veľkosti. Tri očakávané vlastnosti:
- Preimage odolnosť: daný hash, musí byť nevykonateľné nájsť pôvodnú správu.
- Druhá preimage odolnosť: daná správa, musí byť nevykonateľné nájsť inú, ktorá produkuje rovnaký hash.
- Kolízna odolnosť: musí byť nevykonateľné nájsť dve odlišné správy, ktoré produkujú rovnaký hash.
Funkcia sa nazýva prelomená, akonáhle jedna z týchto vlastností padne. Pre MD5 padla kolízna odolnosť v 2004.
MD5: 128 bitov, prelomený od 2004
MD5 (Message Digest 5) je funkcia navrhnutá Ronaldom Rivestom v 1991 a štandardizovaná RFC 1321. Produkuje 128bitový otisk (16 bajtov, 32 hexadecimálnych znakov).
V 2004 Wang a Yu publikovali útok produkujúci MD5 kolízie v niekoľkých hodinách na PC. Odvtedy cost generovania kolízie klesol na niekoľko sekúnd. V 2008 výskumníci vyrobili falošný MD5 podpísaný SSL certifikát uznaný ako validný všetkými prehliadačmi. V 2012 malware Flame použil MD5 kolíziu na podpis svojho spustiteľného súboru ako legitímnej Microsoft binárky.
Záver: MD5 už nesmie slúžiť, akonáhle môže útočník ovplyvniť vstup. Všetky kryptografické použitia (podpisy, integrita voči adversárovi, derivácia kľúča) sú vylúčené. Iba niekoľko použití bez nepriateľstva zostáva akceptovateľných, ako checksum sieťového prenosu alebo cache key: MD5 zostáva rýchly a nezámerná kolízia zostáva štatisticky nemožná.
SHA-256: 256 bitov, bezpečný v 2026
SHA-256 patrí do rodiny SHA-2 publikovanej NIST v 2001 a štandardizovanej FIPS 180-4. Produkuje 256bitový otisk (32 bajtov, 64 hexadecimálnych znakov).
Žiadny praktický útok nie je známy proti SHA-256. Najlepší teoretický kolízny útok sa týka 31 kôl zo 64, bez praktického dopadu. Cost hrubej sily na nájdenie kolízie je v ráde 2^128 operácií, mimo dosah akejkoľvek známej infraštruktúry.
SHA-256 sa používa v: TLS (X.509 certifikáty), Git (od SHA-256 transition), Bitcoin (proof of work), podpisoch Linux balíčkov, Windows Update, atď. Je to dnes defaultne odporúčaný hash pre väčšinu všeobecných kryptografických použití.
Praktické rozdiely
Dĺžka výstupu
MD5("hello") = 5d41402abc4b2a76b9719d911017c592 (32 chars hex)
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (64 chars hex)
Rýchlosť
MD5 je približne 2 až 3krát rýchlejší ako SHA-256 na rovnakom stroji. Na modernom CPU MD5 spracováva niekoľko GB/s na jadro, SHA-256 je v ráde GB/s. Na novších CPU s rozšírením SHA-NI sa rozdiel výrazne znižuje.
Bezpečnosť
Je to jediný rozdiel, ktorý sa skutočne počíta: MD5 je prelomený pre kolízie, SHA-256 nie. Ak je v stávke bezpečnosť voči adversárovi, voľba je jasná.
Porovnávacia tabuľka
| Kritérium | MD5 | SHA-256 |
|---|---|---|
| Rok | 1991 | 2001 |
| Veľkosť výstupu | 128 bitov / 32 hex | 256 bitov / 64 hex |
| Kolízna odolnosť | Prelomená od 2004 | Bez praktického útoku |
| Relatívna rýchlosť | 2 až 3krát rýchlejší | Referencia |
| Hardware akcelerácia | Žiadna dedikovaná | SHA-NI na novších CPU |
| Kryptografické použitie | Neodporúčaný | Odporúčaný |
| Nehostilná integrita | Akceptovateľný | Odporúčaný |
| Regulatorná zhoda | Odmietnutý (PCI-DSS, FIPS) | Akceptovaný |
Prípady použitia
Kedy zostáva MD5 akceptovateľný
- Aplikačný cache key (Redis, memcached) bez bezpečnostného dopadu
- Detekcia duplikátov v nehostilnom datasete
- Checksum sieťového prenosu na detekciu nezámernej korupcie
- Otisk reťazca na rozdelenie (sharding) bez adversariálnej podmienky
Kedy sa SHA-256 vyžaduje
- Overenie integrity voči útočníkovi (podpísané downloady, balíčky)
- Digitálne podpisy, X.509 certifikáty
- Git identifikátory commitov a objektov
- Derivácia kľúčov (v kombinácii s HKDF)
- Akákoľvek aplikácia podliehajúca regulatornej požiadavke (PCI-DSS, ANSSI, FIPS)
Konkrétne príklady
V PHP sú obe funkcie dostupné cez funkciu hash():
// Otisk retazca
$md5 = hash('md5', 'hello world');
$sha256 = hash('sha256', 'hello world');
// Otisk suboru (streamovane citanie)
$md5File = hash_file('md5', '/path/to/file.iso');
$sha256File = hash_file('sha256', '/path/to/file.iso');
Tieto otisky môžete generovať priamo online naším generátorom textových hashov, hashovať súbor generátorom súborových hashov, alebo identifikovať neznámy typ hashu identifikátorom hashov.
Odporúčanie
Pravidlo 2026 je jednoduché: SHA-256 defaultne. MD5 sa už nesmie objaviť vo vašom kóde, akonáhle môže útočník ovplyvniť vstup, čo pokrýva takmer všetky serverové prípady. Vyšší výkon MD5 už neospravedlňuje jeho použitie, rozdiel sa stal zanedbateľným s SHA-NI akceleráciami prítomnými na moderných x86 a ARM CPU.
Často kladené otázky
Je MD5 stále bezpečný pre heslá?
Nie, nikdy. A tento bod je nezávislý od kolízií: MD5 je príliš rýchly. GPU prelomí miliardy MD5 hashov za sekundu, čo robí akýkoľvek slovníkový útok alebo útok hrubou silou triviálnym. Pre heslá použite bcrypt, Argon2 alebo scrypt (viď naše porovnanie Bcrypt vs Argon2).
Aký je rozdiel medzi SHA-256 a SHA-2?
SHA-2 je rodina, SHA-256 je jej člen. Rodina obsahuje SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 a SHA-512/256. Líšia sa veľkosťou výstupu a veľkosťou interných blokov. SHA-256 je najpoužívanejší variant.
Je potrebné prejsť na SHA-3?
Nie nutne. SHA-3 (publikované v 2015) spočíva na radikálne odlišnej konštrukcii (Keccak / sponge), ale SHA-256 zostáva bezpečný. SHA-3 slúži hlavne ako plán B v prípade neočakávaného problému s SHA-2. Vyberte SHA-3, ak to vyžaduje norma, alebo ak chcete kryptografickú diverzitu. Inak SHA-256 zostáva štandardnou voľbou.
Možno invertovať MD5 alebo SHA-256 hash?
Nie, konštrukciou: hash stráca informáciu. Stránky "dešifrovania" MD5 iba dotazujú obrovské databázy predpočítaných hashov (rainbow tables) pre bežné vstupy. Pre dlhé náhodné dáta je nájdenie vstupu nemožné s oboma algoritmami.
Bude SHA-256 prelomený kvantovým počítačom?
Groverov algoritmus delí efektívnu bezpečnosť hashov voči kvantovému útočníkovi na polovicu: SHA-256 by potom ponúkal približne 128 bitov bezpečnosti, čo zostáva široko postačujúce. Žiadna urgencia na strane hashu, na rozdiel od asymetrickej kryptografie.