Přesněji řečeno, pokud je ten web napsaný správně, tak by heslo znát neměl. Proto vám také neřekne, když procházíte přes formulář pro zapomenuté heslo, jaké přesně heslo jste vlastně zapomněli, ale buď vygeneruje nové náhodné, nebo vám nějak nabídne možnost zadat jiné. To zapomenuté prostě nikdo nezná.
Na uložení hesel se používají takzvané jednosměrné šifry. Běžná (tedy obousměrná) šifra převádí jednu zprávu na druhou beze ztrát. Hodně známá je třeba Cézarova šifra, kde se vyměňují písmenka podle nějaké předem dohodnuté převodní tabulky:
TELEVIZE HRAJE => YRARBOUR JTSKR
V tomto případě jsem vyšel z pozice písmenek na klávesnici. Jakmile pochopíte konkrétní použitý postup šifrování, jste schopní rozluštit původní text. Různé jednoduché šifrovací triky si můžete prohlédnout v Zašifrované nástěnce. U obousměrné šifry bývá cílem, aby příjemce zprávy (a ideálně nikdo jiný!) dokázal bezchybně rozluštit, co mu je sdělováno.
Jednosměrné šifry o bezchybnost neusilují. Jejich cílem je naopak vytvořit poškozenou zprávu – takzvaný otisk – ve kterém je původní sdělení rozmělněno. Třeba můžou seřadit písmenka podle abecedy:
TELEVIZE HRAJE => AEEEEHIJLRTVZ
Z této změti písmenek už původní sdělení jednoznačně poskládat nejde, protože existuje spousta zpráv se stejným otiskem...
HRAJE TELEVIZE => AEEEEHIJLRTVZ
HELE ZAVIREJTE => AEEEEHIJLRTVZ
ZERETE JIHLAVE => AEEEEHIJLRTVZ
HAZEJ VERITELE => AEEEEHIJLRTVZ
... a tak dále.
Na vytváření otisků existuje v informatice spousta prověřených postupů, obvykle se písmenka převádějí na čísla a provádí se s nimi poměrně masivní množství matematických operací – součty, násobení, zbytky po dělení, mocnění. Výsledkem je jedno obrovské číslo (zvané hash, čteno [heš]) poskládané ze stovek nul a jedniček. Jakkoliv drobná změna v utajovaném sdělení změní hodnotu otisku k nepoznání.
TELEVIZE HRAJE => 328 233 511 345 688 276 319 516 582 552 617 899 886
TELEVIZE HRABE => 121 726 223 404 660 788 683 447 277 013 813 716 577
Pokud se tedy někde registrujete, systém si neukládá skutečné heslo, ale jen jeho otisk. Kdykoliv se přihlašujete, tak z vámi zadávaného hesla také vypočítá otisk stejným způsobem a porovná ho s tím, který má uložený v databázi. Pokud se otisky shodují, je velmi pravděpodobné, že bylo zadané stejné heslo jako při té registraci. Docela chytré, že?
Bystrý čtenář teď namítne „velmi pravděpodobné, to ale neznamená, že je to jisté!“ – a má pravdu. Existuje ve skutečnosti mnoho různých hesel, kterými byste se mohli přihlásit. Dokonce jich je teoreticky nekonečno.
Nicméně šance, že by se někdo dokázal trefit do hesla se stejným otiskem, je astronomicky malá. Pravděpodobně by to jiné pasující heslo mělo statisíce znaků, takže je mnohem pravděpodobnější, že útočník nějakým způsobem uhodne vaše heslo, než že by si tipnul sáhodlouhou posloupnost roztodivných znaků, kterým by vyšel stejný otisk.
Prověřené jednosměrné šifry bývají tak komplikované, že i kdybyste znali otisk, tak zpětné odvození nějakého pasujícího hesla je strašně moc výpočetně náročné, zabralo by desítky let času. Pokud se někdo nabourá do cizí databáze, prakticky jedinou možností, jak z ní může vycucat hesla, je metoda pokus-omyl, to jest zkoušet hrubou silou všechny možné kombinace znaků, počítat z každé z nich otisk a ten porovnávat s uloženým otiskem.
Když vás nějaký program nebo web nutí dávat do hesla malé i velké znaky, čísla a speciální znaky, nebo zadat delší heslo, dělá to právě proto, aby útočník potřeboval řádově víc pokusů na prolomení. Heslo složené třeba ze čtyř číslic jde prolomit až příliš snadno – stačí deset tisíc pokusů.

Ze seriálu Stranger Things, prolamování nepříliš složitého hesla :-), © Netflix
Doufám, že jsem popsal toto zákoutí kryptografie srozumitelně. Je snad teď i docela dobře patrné, jak velký důraz se klade na to, aby byla hesla skutečně tajná. Svoje heslo
nikomu neříkejte. Ani provozovatel webu by se vás na něj nikdy neměl ptát – neměl by ho potřebovat. Opatrný uživatel heslo nikam jinam než do registračního a přihlašovacího formuláře nikdy nepíše.