====== Hashování (Digitální otisk dat) ====== **Hashování** je proces, při kterém vložíte na vstup data (např. slovo "Ahoj" nebo celé video) a hashovací algoritmus (funkce) vyplivne unikátní řetězec znaků (např. ''a3f5b...'). Hashování je **jednosměrná operace** – z výsledného hashe nelze zpětně získat původní data. ---- ====== Klíčové vlastnosti dobrého hashe ====== Aby byla hashovací funkce užitečná v informatice a bezpečnosti, musí splňovat tato pravidla: * **Determinismus:** Pro stejný vstup musí vždy vyjít stejný hash. * **Rychlost:** Výpočet hashe musí být velmi rychlý. * **Lavinový efekt:** I minimální změna na vstupu (např. změna tečky na čárku) musí vést k totálně odlišnému hashi. * **Odolnost proti kolizím:** Je prakticky nemožné najít dvě různá vstupní data, která by měla stejný hash. * **Nezvratnost:** Z hashe nelze matematicky odvodit původní obsah. ---- ====== Hlavní využití hashování ====== ===== 1. Bezpečné ukládání hesel ===== Služby by nikdy neměly ukládat vaše hesla v čitelném textu. Místo toho uloží pouze **hash vašeho hesla**. * Když se přihlašujete, systém zahashuje vámi zadané heslo a porovná výsledek s hashem v databázi. * Pokud útočník ukradne databázi, získá jen nepoužitelné hashe, nikoliv skutečná hesla. ===== 2. Kontrola integrity dat ===== Stahujete-li velký soubor, autor často uvádí jeho hash (např. MD5 nebo SHA-256). Po stažení můžete soubor zahashovat sami. Pokud se váš hash shoduje s tím od autora, máte jistotu, že se soubor cestou nepoškodil a nikdo do něj nevložil virus. ===== 3. Digitální podpisy a Blockchain ===== Hashování je základem pro [[digitalni_podpis|digitální podpisy]] a technologii [[blockchain|kryptoměn]]. V Bitcoinu se například hashuje celý blok transakcí, čímž se nezaměnitelně propojuje s blokem předchozím. ---- ====== Nejčastější hashovací algoritmy ====== ^ Algoritmus ^ Stav ^ Použití ^ | **MD5** | **Zastaralý** | Již není bezpečný, používá se jen pro rychlou kontrolu integrity (ne pro hesla). | | **SHA-1** | **Zastaralý** | Podobně jako MD5, již byl matematicky prolomen. | | **SHA-256** | **Bezpečný** | Standard v kryptografii, těžba Bitcoinu, certifikáty webů. | | **bcrypt / Argon2** | **Excelentní** | Speciálně navrženy pro ukládání hesel (jsou záměrně pomalé, aby bránily [[brute_force|útokům hrubou silou]]). | ---- ====== Rozdíl: Hashování vs. Šifrování ====== Mnoho lidí tyto pojmy plete. Hlavní rozdíl je v **účelu**: * **[[cipher|Šifrování]]** je **dvousměrné**. Chceme data schovat a později je zase přečíst (potřebujeme klíč). * **Hashování** je **jednosměrné**. Chceme vytvořit unikátní identifikátor dat, aniž bychom je nutně chtěli "odemykat". ---- ====== Co je to "Sůl" (Salt)? ====== V souvislosti s hashováním hesel se používá tzv. **sůl**. Je to náhodný řetězec znaků, který se přidá k heslu předtím, než se zahashuje. Tím se zajistí, že i když mají dva uživatelé stejné heslo "12345", jejich výsledné hashe v databázi budou vypadat úplně jinak. To chrání databázi před útoky pomocí tzv. Duhových tabulek (Rainbow Tables). ---- //Související pojmy: Digitální podpis, Šifrování, RSA, AES, Blockchain, MD5, SHA-256, Sůl (Salt).//