Představte si, že byste mohli vzít jakákoli data — jedno slovo, román, 4 GB video — a zredukovat je na krátký řetězec znaků pevné délky, který je jedinečně identifikuje. Změňte jedinou čárku v originálu a řetězec se změní úplně. A neexistuje žádný způsob, jak proces zvrátit a získat původní data zpět.
Přesně to dělá kryptografická hašovací funkce. Je jedním z nejzákladnějších stavebních kamenů moderní bezpečnosti a tiše chrání téměř vše, co děláte online.
Metafora otisku prstu
Haš funguje jako digitální otisk prstu. Váš otisk prstu vás jedinečně identifikuje, ale nikdo z něj nemůže rekonstruovat váš obličej. Podobně kryptografický haš jedinečně identifikuje kus dat, aniž by odhaloval, co tato data jsou.
Vložte jakýkoli vstup do hašovací funkce a získáte otisk (nazývaný také hodnota haše nebo kontrolní součet) — řetězec hexadecimálních znaků pevné délky. SHA-256, jeden z nejběžnějších algoritmů, vždy produkuje 64znakový výstup bez ohledu na velikost vstupu.
| Vstup | Otisk SHA-256 (prvních 16 znaků) |
|---|---|
Hello |
185f8db32271fe25... |
hello |
2cf24dba5fb0a30e... |
| Celý dump Wikipedie | (stále 64 znaků) |
Čtyři základní vlastnosti
Funkce se kvalifikuje jako kryptografická hašovací funkce pouze tehdy, pokud splňuje tyto vlastnosti:
- Deterministická. Stejný vstup vždy produkuje stejný výstup, na jakémkoli stroji, v jakémkoli čase.
- Jednosměrná (odolnost proti nalezení vzoru). Na základě haše je výpočetně neproveditelné najít původní vstup. Data nelze „odhašovat".
- Odolná proti kolizím. Je prakticky nemožné najít dva různé vstupy, které produkují stejný otisk. U SHA-256 je pravděpodobnost náhodné kolize přibližně 1 ku 2^128 — číslo větší než počet atomů v pozorovatelném vesmíru.
- Lavinový efekt. Změna jediného bitu na vstupu převrátí přibližně polovinu bitů na výstupu. Neexistuje žádný detekovatelný vzor ani vztah mezi podobnými vstupy.
Klíčový rozdíl: Hašování není šifrování. Šifrování je reverzibilní s klíčem; hašování je záměrně nevratné. Data šifrujete pro ochranu při přenosu. Data hašujete pro ověření jejich integrity nebo uložení důkazu bez uchovávání originálu.
Běžné hašovací algoritmy
MD5 (1991)
- Výstup: 128 bitů (32 hexadecimálních znaků)
- Status: Kryptograficky prolomen. Výzkumníci dokáží generovat kolize za sekundy na notebooku.
- Stále viditelný v: Bezpečnostně nesouvisejících kontrolních součtech pro stahování souborů a starších systémech.
SHA-1 (1995)
- Výstup: 160 bitů (40 hexadecimálních znaků)
- Status: Zastaralý pro bezpečnost. Google demonstroval praktickou kolizi v roce 2017 (útok „SHAttered").
- Stále viditelný v: Starších Git repozitářích, některých starších certifikátech.
SHA-256 (2001)
- Výstup: 256 bitů (64 hexadecimálních znaků)
- Status: Současný standard. Žádné známé praktické útoky.
- Používán v: TLS certifikátech, Bitcoinu, hašování hesel, digitálních podpisech, ověřování integrity souborů.
SHA-3 (2015)
- Výstup: Proměnlivý (běžně 256 bitů)
- Status: Nejnovější standard, založený na zcela jiném vnitřním designu (Keccak houbová konstrukce) než rodina SHA-2.
- Používán v: Systémech orientovaných na budoucnost, Ethereu, situacích vyžadujících diverzitu algoritmů.
| Algoritmus | Velikost výstupu | Bezpečný? | Rychlost |
|---|---|---|---|
| MD5 | 128 bitů | Ne | Velmi rychlý |
| SHA-1 | 160 bitů | Ne | Rychlý |
| SHA-256 | 256 bitů | Ano | Střední |
| SHA-3-256 | 256 bitů | Ano | Střední |
Kde se kryptografické hašování používá
Ukládání hesel
Když si zakládáte účet, dobře navržený systém nikdy neukládá vaše heslo v otevřeném textu. Ukládá haš. Při přihlášení systém zahašuje to, co napíšete, a porovná to s uloženou hodnotou. I když je databáze narušena, útočníci získají haše — ne hesla.
Moderní systémy jdou dále přidáním náhodné soli (extra data připojená před hašováním) a použitím záměrně pomalých algoritmů jako bcrypt, scrypt nebo Argon2, aby bylo hádání hrubou silou nepraktické.
Ověření integrity souborů
Distributoři softwaru zveřejňují kontrolní součty SHA-256 spolu se svými stahovanými soubory. Po stažení spočítáte haš souboru na svém počítači a porovnáte. Shoda dokazuje, že soubor nebyl poškozen ani pozměněn během přenosu.
Digitální podpisy
Když digitálně podepisujete dokument, systém dokument nejprve zahašuje a poté haš zašifruje vaším soukromým klíčem. Příjemce ho dešifruje vaším veřejným klíčem a porovná se svým vlastním hašem dokumentu. To je daleko efektivnější než šifrování celého dokumentu a dokazuje jak autorství, tak integritu.
Blockchain
Každý blok v blockchainu obsahuje haš předchozího bloku a vytváří tak neměnný řetěz. Změna jakékoli minulé transakce změní haš jejího bloku, čímž se řetěz od tohoto bodu přeruší a manipulace je okamžitě viditelná.
Proč jsou MD5 a SHA-1 považovány za prolomené
Hašovací algoritmus je „prolomený", když někdo může záměrně vytvořit dva různé vstupy, které produkují stejný haš (kolizi). To podkopává každý případ použití, který se spoléhá na jedinečnost.
- MD5: Kolize lze generovat za sekundy. Výzkumníci vytvořili dva různé PDF soubory s identickými MD5 haši.
- SHA-1: Útok SHAttered v roce 2017 vytvořil dva různé PDF se stejným SHA-1 hašem, vyžadující přibližně 6 500 let výpočtu na jednom CPU (proveditelné s cloudovými zdroji).
Praktické pravidlo: Nikdy nepoužívejte MD5 nebo SHA-1 pro cokoli souvisejícího s bezpečností — hesla, certifikáty, digitální podpisy ani kontroly integrity, kde by mohl být zapojen protivník. Místo toho použijte SHA-256 nebo SHA-3.
Další informace
Hašování je jedním z těch konceptů, které se stanou intuitivními, jakmile s nimi začnete experimentovat. Zkuste zahašovat větu, pak změňte jeden znak a pozorujte lavinový efekt na vlastní oči.
- Jak generovat a ověřovat haše — tutoriál krok za krokem
- Generátor hašů — spočítejte SHA-256, MD5, SHA-512 a další okamžitě ve vašem prohlížeči
- Identifikátor hašů — vložte neznámý haš a identifikujte jeho algoritmus
