Co je hash? Hash, česky kontrolní součet nebo otisk, je krátký řetězec znaků, který se spočítá z libovolně velkých dat podle pevně daného postupu. Ať vložíte jedno slovo nebo film o velikosti několika gigabajtů, výsledek má vždy stejnou délku, například 64 znaků.
Otisk má dvě klíčové vlastnosti. Ze stejných dat vyjde vždy stejný otisk, ale ze změněných dat vyjde otisk úplně jiný, i kdybyste změnili jedinou čárku. A hlavně to nejde obrátit: z otisku původní data nikdo nespočítá zpátky. Je to jako otisk prstu. Poznáte podle něj člověka, ale z otisku ho nesestavíte.
K čemu se otisky používají?
- K ukládání hesel – seriózní služba si Vaše heslo neukládá, uloží si jen jeho otisk. Při přihlášení spočítá otisk znovu a porovná ho. Kdyby někdo databázi ukradl, hesla v ní nenajde. Proto Vám také poctivá služba zapomenuté heslo nikdy nepošle, umí ho jen nastavit nové.
- Ke kontrole, že se soubor cestou nepoškodil – u stahovaných programů bývá uveden otisk, který si můžete přepočítat a porovnat.
- Při zálohování – podle otisků se pozná, které soubory se od minule změnily, takže se přenáší jen to nutné.
- V TLS a elektronických podpisech – otisk hlídá, že obsah nikdo po cestě nezměnil.
Není hash totéž co šifrování? Není a je to častá záměna. Zašifrovaná data jde správným klíčem rozbalit zpátky do čitelné podoby. Otisk zpátky rozbalit nejde vůbec, je to jednosměrná ulice. Zjednodušeně: šifrování je trezor, hash je pečeť.
Záleží na tom, jaký postup se použije. Starší postupy s názvy MD5 a SHA-1 se dnes k heslům nesmí používat, protože je moderní počítače prolomí. Pro hesla se používají pomalé postupy jako bcrypt nebo Argon2, které se schválně počítají dlouho, aby útok hrubou silou nedával smysl, jak popisuje heslo brute force. Přidává se k nim navíc náhodná přísada, takže dva lidé se stejným heslem mají různý otisk.
Co z toho plyne pro Vás? Používáte li na webhostingu WordPress nebo jiný běžný systém, hesla se ukládají jako otisky automaticky a nemusíte nic řešit. Máte li vlastní PHP aplikaci, nikdy si nepište vlastní postup a použijte vestavěné funkce jazyka. Ukládat hesla čitelně je jedna z nejhorších chyb, jaké se dají na webu udělat, viz zabezpečení webu.