MD5 vs SHA-256: rozdíly a doporučení
MD5 a SHA-256 jsou dvě kryptografické hashovací funkce. Produkují otisk pevné velikosti ze vstupu libovolné velikosti. Setkáváme se s nimi všude: ověření integrity souborů, podpisy, unikátní identifikátory, TLS certifikáty, blockchain. Jejich bezpečnostní status je naopak velmi odlišný: MD5 je prolomený od 2004 pro kryptografická použití, SHA-256 zůstává bezpečný v 2026. Tento článek shrnuje situaci.
Připomenutí hashovacích funkcí
Kryptografická hashovací funkce transformuje zprávu libovolné délky na otisk pevné velikosti. Tři očekávané vlastnosti:
- Preimage odolnost: daný hash, musí být neproveditelné najít původní zprávu.
- Druhá preimage odolnost: daná zpráva, musí být neproveditelné najít jinou, která produkuje stejný hash.
- Kolizní odolnost: musí být neproveditelné najít dvě odlišné zprávy, které produkují stejný hash.
Funkce se nazývá prolomená, jakmile jedna z těchto vlastností padne. Pro MD5 padla kolizní odolnost v 2004.
MD5: 128 bitů, prolomený od 2004
MD5 (Message Digest 5) je funkce navržená Ronaldem Rivestem v 1991 a standardizovaná RFC 1321. Produkuje 128bitový otisk (16 bajtů, 32 hexadecimálních znaků).
V 2004 Wang a Yu publikovali útok produkující MD5 kolize v několika hodinách na PC. Od té doby cost generování kolize spadl na několik sekund. V 2008 výzkumníci vyrobili falešný MD5 podepsaný SSL certifikát uznaný jako validní všemi prohlížeči. V 2012 malware Flame použil MD5 kolizi k podpisu svého spustitelného souboru jako legitimní Microsoft binárky.
Závěr: MD5 již nesmí sloužit, jakmile může útočník ovlivnit vstup. Všechna kryptografická použití (podpisy, integrita vůči adversáři, derivace klíče) jsou vyloučena. Pouze několik použití bez nepřátelství zůstává akceptovatelných, jako checksum síťového přenosu nebo cache key: MD5 zůstává rychlý a nezáměrná kolize zůstává statisticky nemožná.
SHA-256: 256 bitů, bezpečný v 2026
SHA-256 patří do rodiny SHA-2 publikované NIST v 2001 a standardizované FIPS 180-4. Produkuje 256bitový otisk (32 bajtů, 64 hexadecimálních znaků).
Žádný praktický útok není znám proti SHA-256. Nejlepší teoretický kolizní útok se týká 31 kol ze 64, bez praktického dopadu. Cost hrubé síly pro nalezení kolize je v řádu 2^128 operací, mimo dosah jakékoli známé infrastruktury.
SHA-256 se používá v: TLS (X.509 certifikáty), Git (od SHA-256 transition), Bitcoin (proof of work), podpisech Linux balíčků, Windows Update, atd. Je to dnes defaultně doporučený hash pro většinu obecných kryptografických použití.
Praktické rozdíly
Délka výstupu
MD5("hello") = 5d41402abc4b2a76b9719d911017c592 (32 chars hex)
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (64 chars hex)
Rychlost
MD5 je přibližně 2 až 3krát rychlejší než SHA-256 na stejném stroji. Na moderním CPU MD5 zpracovává několik GB/s na jádro, SHA-256 je v řádu GB/s. Na novějších CPU s rozšířením SHA-NI se rozdíl výrazně snižuje.
Bezpečnost
Je to jediný rozdíl, který skutečně počítá: MD5 je prolomený pro kolize, SHA-256 ne. Pokud je v sázce bezpečnost vůči adversáři, je volba jasná.
Srovnávací tabulka
| Kritérium | MD5 | SHA-256 |
|---|---|---|
| Rok | 1991 | 2001 |
| Velikost výstupu | 128 bitů / 32 hex | 256 bitů / 64 hex |
| Kolizní odolnost | Prolomená od 2004 | Bez praktického útoku |
| Relativní rychlost | 2 až 3krát rychlejší | Reference |
| Hardware akcelerace | Žádná dedikovaná | SHA-NI na novějších CPU |
| Kryptografické použití | Nedoporučeno | Doporučeno |
| Nehostilní integrita | Akceptovatelný | Doporučený |
| Regulatorní shoda | Odmítnut (PCI-DSS, FIPS) | Akceptován |
Případy použití
Kdy zůstává MD5 akceptovatelný
- Aplikační cache key (Redis, memcached) bez bezpečnostního dopadu
- Detekce duplikátů v nehostilním datasetu
- Checksum síťového přenosu pro detekci nezáměrné korupce
- Otisk řetězce pro rozdělení (sharding) bez adversariální podmínky
Kdy se SHA-256 vyžaduje
- Ověření integrity vůči útočníkovi (podepsané downloady, balíčky)
- Digitální podpisy, X.509 certifikáty
- Git identifikátory commitů a objektů
- Derivace klíčů (v kombinaci s HKDF)
- Jakákoli aplikace podléhající regulatorní požadavku (PCI-DSS, ANSSI, FIPS)
Konkrétní příklady
V PHP jsou obě funkce dostupné přes funkci hash():
// Otisk řetězce
$md5 = hash('md5', 'hello world');
$sha256 = hash('sha256', 'hello world');
// Otisk souboru (streamované čtení)
$md5File = hash_file('md5', '/path/to/file.iso');
$sha256File = hash_file('sha256', '/path/to/file.iso');
Tyto otisky můžete generovat přímo online naším generátorem textových hashů, hashovat soubor generátorem souborových hashů, nebo identifikovat neznámý typ hashe identifikátorem hashů.
Doporučení
Pravidlo 2026 je jednoduché: SHA-256 defaultně. MD5 se již nesmí objevit ve vašem kódu, jakmile může útočník ovlivnit vstup, což pokrývá téměř všechny serverové případy. Vyšší výkon MD5 již neospravedlňuje jeho použití, rozdíl se stal zanedbatelným s SHA-NI akceleracemi přítomnými na moderních x86 a ARM CPU.
Často kladené otázky
Je MD5 stále bezpečný pro hesla?
Ne, nikdy. A tento bod je nezávislý na kolizích: MD5 je příliš rychlý. GPU prolomí miliardy MD5 hashů za sekundu, což činí jakýkoli slovníkový útok nebo útok hrubou silou triviální. Pro hesla použijte bcrypt, Argon2 nebo scrypt (viz naše srovnání Bcrypt vs Argon2).
Jaký je rozdíl mezi 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. Liší se velikostí výstupu a velikostí interních bloků. SHA-256 je nejpoužívanější varianta.
Je třeba přejít na SHA-3?
Ne nutně. SHA-3 (publikované v 2015) spočívá na radikálně odlišné konstrukci (Keccak / sponge), ale SHA-256 zůstává bezpečný. SHA-3 slouží hlavně jako plán B v případě nečekaného problému s SHA-2. Vyberte SHA-3, pokud to vyžaduje norma, nebo pokud chcete kryptografickou diverzitu. Jinak SHA-256 zůstává standardní volbou.
Lze invertovat MD5 nebo SHA-256 hash?
Ne, konstrukcí: hash ztrácí informaci. Stránky "dešifrování" MD5 pouze dotazují obrovské databáze předpočítaných hashů (rainbow tables) pro běžné vstupy. Pro dlouhá náhodná data je nalezení vstupu nemožné s oběma algoritmy.
Bude SHA-256 prolomen kvantovým počítačem?
Groverův algoritmus dělí efektivní bezpečnost hashů vůči kvantovému útočníkovi na polovinu: SHA-256 by pak nabízel přibližně 128 bitů bezpečnosti, což zůstává široce postačující. Žádná urgence na straně hashe, na rozdíl od asymetrické kryptografie.