✍️ Hashovací funkce a digitální podpis

Otisk prstu dat

O čem to je

Stahuješ instalačku Linuxu, má 3 GB. Jak poznáš, že ti po cestě nikdo nepodstrčil upravenou verzi s virem? A jak web pozná tvoje heslo, když ho vůbec nemá uložené? Obojí řeší hashovací funkce.

Na ní stojí i digitální podpis, kterým se podepisují smlouvy, aktualizace programů a datové zprávy úřadů.

Nové pojmy

Hashovací funkceMatematický postup, který z libovolně velkých dat spočítá krátký řetězec pevné délky. Tomu výsledku se říká hash (otisk, haš).SHA-256 z jakýchkoli dat vrátí 256 bitů, zapsaných jako 64 šestnáctkových znaků.
IntegritaPřipomenutí z triády CIA: data jsou správná a nikdo je nezměnil bez oprávnění.Stažený soubor je bit po bitu stejný jako originál.

Otisk prstu dat

Hash je jako otisk prstu. Z člověka otisk snadno získáš. Z otisku ale člověka „nevyrobíš“. A dva různí lidé prakticky nemají stejný otisk.

VlastnostCo znamená
pevná délkavýstup má vždy stejnou délku, ať jde o jedno písmeno nebo film
deterministickástejná data → vždy stejný hash
jednosměrnostz hashe nejde zpětně spočítat původní data
odolnost proti kolizímprakticky nejde najít dvoje různá data se stejným hashem
lavinový efektzměna jediného bitu vstupu změní výstup k nepoznání
KolizeDvoje různá data se stejným hashem. Teoreticky existují vždy (vstupů je nekonečně, výstupů konečně), dobrá funkce ale nedovolí žádnou prakticky najít.U MD5 a SHA-1 se kolize najít podařilo, proto se pro bezpečnost už nepoužívají.
Web distribuce uvádí SHA-256 souboru: 9f86d0…. Po stažení ti vyjde 3a7bd3…. Co to znamená a co uděláš?
Hashe se liší, takže se soubor liší od originálu – poškodil se při stahování, nebo ho někdo podvrhl. Neinstaluj ho a stáhni znovu z oficiálního zdroje. Pozor: hash musí pocházet z důvěryhodného místa, jinak ho útočník podvrhne spolu se souborem.

Jak se ukládají hesla

Sůl (salt)Náhodný řetězec, který server přidá k heslu každého uživatele před hashováním. Ukládá se vedle hashe.Dva uživatelé s heslem „kocka123“ mají díky různé soli úplně jiné hashe.
Uživatel si nastaví heslo.
Server vygeneruje náhodnou sůl.
Spočítá hash ze soli a hesla pomalou funkcí určenou pro hesla (bcrypt, scrypt, Argon2).
Uloží jen sůl a hash, heslo nikdy.
Při přihlášení spočítá hash ze soli a zadaného hesla a porovná s uloženým.
  • Proč sůl? – Stejná hesla mají různé hashe a útočník nemůže použít předpočítané tabulky.
  • Proč pomalá funkce? – Útočník s uniklou databází zvládne za sekundu jen málo pokusů.
  • MD5 na hesla? – Ne – je rychlá a prolomená.
  • Jde hash „dešifrovat“? – Ne. Útočník může jen hádat hesla a porovnávat hashe.

Zkus odpovědět dřív, než kartu otočíš.

Digitální podpis

Veřejný a soukromý klíčPřipomenutí z asymetrické kryptografie: dvojice klíčů, které k sobě patří. Soukromý drží jen majitel, veřejný zná každý.Pár klíčů RSA nebo ECC.
Digitální podpisAutor spočítá hash dokumentu a „zašifruje“ ho svým soukromým klíčem. Kdokoli pak podpis ověří jeho veřejným klíčem.Aktualizace Windows je podepsaná Microsoftem; systém nepodepsanou nebo změněnou aktualizaci odmítne.
✗Hash je druh šifrování, takže z hashe jde heslo dešifrovat.
✓Hash je jednosměrný a nemá klíč. Dešifrovat ho nejde; útočník může jen zkoušet hesla a porovnávat jejich hashe.

Šifrování je vratné (s klíčem). Hashování vratné není – proto se hodí na hesla a otisky dat.

Hashovací funkce dělá z dat otisk pevné délky: jednosměrně, bez kolizí, s lavinovým efektem (SHA-256; MD5 a SHA-1 už ne). Hesla se ukládají jako hash se solí pomalou funkcí. Digitální podpis = hash podepsaný soukromým klíčem, ověřený veřejným.

Podpis krok za krokem

O čem to je

Ručně podepsanou smlouvu může někdo po podpisu přepsat a podpis se dá napodobit. Digitální podpis je mnohem silnější: prozradí každou změnu dokumentu a bez soukromého klíče ho nikdo nevytvoří. Projdeme, jak přesně funguje.

Nové pojmy

Hash (otisk)Krátký řetězec pevné délky, který hashovací funkce spočítá z libovolných dat. Stejná data dají vždy stejný hash, jakákoli změna dá úplně jiný a zpět se z něj data spočítat nedají.SHA-256(„ahoj“) a SHA-256(„Ahoj“) se liší úplně.
Asymetrická kryptografieKaždý má pár klíčů: soukromý (tajný, jen majitel) a veřejný (zná každý). Co se udělá jedním, ověří nebo otevře jen ten druhý.Pár klíčů RSA.
Autenticita a nepopiratelnostAutenticita = víme, kdo je autor. Nepopiratelnost = autor nemůže později tvrdit, že to nepodepsal (jen on má soukromý klíč).Firma nemůže popřít, že podepsala nabídku.

Podepsání

Autor spočítá hash dokumentu (např. SHA-256).
Hash zpracuje svým soukromým klíčem → vznikne podpis.
Dokument pošle spolu s podpisem (dokument sám zůstává čitelný).

Ověření

Příjemce sám spočítá hash přijatého dokumentu.
Veřejným klíčem autora zpracuje podpis a získá hash, který podepsal autor.
Porovná oba hashe.
Shodují se → dokument je nezměněný a podepsal ho majitel soukromého klíče.
Neshodují se → dokument byl změněn, nebo ho podepsal někdo jiný.
Útočník v podepsané smlouvě změní částku z 10 000 na 100 000 Kč a podpis nechá. Co zjistí příjemce?
Příjemce spočítá hash změněné smlouvy. Ten je kvůli lavinovému efektu úplně jiný než hash v podpisu. Ověření selže, změna se odhalí. Útočník nový podpis nevytvoří, protože nemá soukromý klíč autora.
Proč se podepisuje hash a ne celý dokument?
Operace se soukromým klíčem jsou pomalé. Hash je krátký (např. 256 bitů), i když dokument má gigabajty. Díky odolnosti proti kolizím podpis hashe stejně spolehlivě chrání celý dokument.

Co podpis zaručuje a co ne

ZaručujeNezaručuje
integritu – dokument se nezměnildůvěrnost – dokument zůstává čitelný (na utajení je šifrování)
autenticitu – podepsal majitel soukromého klíčeže veřejný klíč opravdu patří tomu, za koho ho považuješ (to řeší certifikáty)
nepopiratelnost – autor podpis nezapřeže obsah dokumentu je pravdivý

Roztřiď úkony podle toho, který klíč se k nim používá.

V EU upravuje elektronické podpisy nařízení eIDAS (č. 910/2014). Rozlišuje mimo jiné kvalifikovaný elektronický podpis, který má stejné právní účinky jako vlastnoruční podpis.

✗Digitálně podepsaný e-mail je zašifrovaný, takže ho nikdo jiný nepřečte.
✓Podpis chrání integritu a autenticitu, ne důvěrnost. Kdo chce zprávu i utajit, musí ji navíc zašifrovat.

Podpis ověří každý veřejným klíčem a dokument k tomu musí mít čitelný.

Podpis: hash dokumentu zpracovaný soukromým klíčem autora. Ověření: veřejným klíčem získat podepsaný hash a porovnat s vlastním hashem dokumentu. Zaručuje integritu, autenticitu a nepopiratelnost, ne utajení.