Hashovaná hesla: co to je, jak fungují a proč byste je měli používat
Hashování hesel je technika, při které je původní heslo převedeno speciální (nevratnou) hashovací funkcí na pevný řetězec znaků - tzv. hash. Pokud by měl útočník přístup k databázi s hashi hesel, neviděl by samotná hesla, ale pouze jejich otisky. Výstup hashovací funkce je jednosměrný: jakmile je hash vypočítán, není snadné se vrátit k původnímu heslu. Například heslo "exTraTAjnePassword159" vypadá po hashování jako dlouhý "náhodný" řetězec. Nikdo z něj nemůže dohledat původní text. Při přihlašování je heslo znovu zhashováno a porovnáno s tímto řetězcem. Je to podobné jako s sejmutím otisku prstu. Identitu z otisku prstu nezjistíte, ale poznáte podle něj stejnou osobu. Hash hesla funguje stejným způsobem: systém ověří identitu hesla, ale nikdy nezná samotné heslo.
zdroj: gen.Ai
Hashování má několik klíčových funkcí
Jednosměrnost: Původní heslo nelze (snadno) získat z hashe. I kdyby útočník znal celý hash, je téměř nemožné z něj uhodnout heslo bez brutálního hledání možností.
Pevná délka výstupu: Bez ohledu na délku původního hesla má vypočtený algoritmus hash vždy stejnou délku (např. MD5 → 32 znaků, SHA-256 → 64 znaků).
Deterministický výsledek: Stejné heslo vždy generuje stejný hash (bez přidané soli).
Kryptografická sůl: K heslu je přidán náhodný řetězec solí. Díky kryptografické soli vytvoří i dvě identická hesla po hashování různé hashe. Útočník nemůže použít předem vypočítané duhové tabulky (hashovací tabulky běžných hesel). Pokud mají například dva uživatelé stejné heslo, přidáním různých kotrmelců (náhodných řetězců) zajistíte, že jejich hodnoty hash budou zcela odlišné. Útočník tedy nemůže použít jednu předem vypočítanou tabulku nebo stejný seznam slov k vyhledání obou hesel.
Algoritmy: Existuje více hashovacích funkcí. MD5 a SHA-1 byly kdysi standardem, ale dnes jsou považovány za nedostatečně bezpečné. Moderní řešení jako bcrypt nebo Argon2 jsou navržena tak, aby byla vědomě zpomalená a náročná na paměť. Například Argon2 umožňuje nastavit velikost použité paměti a počet výpočetních kol; bcrypt má vestavěný nákladový faktor (počet iterací). V praxi to znamená, že výpočet hashe hesla může vyžadovat hodně paměti a opakované výpočty, což výrazně zpomaluje útok (zejména při použití GPU).
Jak funguje hashování hesel
Při registraci nebo přihlašování systém nikdy neukládá heslo v čitelné podobě. Postup je obvykle následující:
- Uživatel zadává své heslo (např. v přihlašovacím formuláři webových stránek nebo v administraci tiskárny).
- Systém na heslo aplikuje hashovací algoritmus (např. SHA-256, bcrypt nebo Argon2). Výsledkem je pevně daný dlouhý řetězec – hash hesla.
- Hash je uložen v databázi (Linux, např. v souboru /etc/shadow) místo skutečného hesla. Systém si pamatuje pouze tento hash, nikoli samotné heslo.
- Při příštím přihlášení se zadané heslo zašifruje stejným způsobem a výsledný hash se porovná s uloženým. Pokud se shodují, přístup je povolen.
Server nebo zařízení tak ani jednou neuvidí vaše heslo v "čisté" podobě. Při přihlašování je do sítě odeslán pouze hash, nikoli text hesla. I v případě útoku na databázi získá útočník pouze hashe, které musí sám prolomit (např. slovníkovým útokem nebo hrubou silou). Díky tomu všemu je hashování velmi odolné, i když jsou data kompromitována, útočník nemůže přímo používat hesla.
Výhody hašování a srovnání s jinými metodami
Ochrana proti úniku dat: Pokud by hackeři získali přístup k databázi hash, viděli by pouze hashe. Bez znalosti původních hesel musí ještě prolomit hashe a tento proces je zdlouhavý a zpomaluje útočníka. Pokud by byla hesla uložena bez hashe, útočník by získal okamžitý přístup ke všem účtům.
Na rozdíl od šifrování: Šifrování je obousměrný proces s klíčem (zašifrované heslo lze dešifrovat). Pokud by útočník získal šifrovací klíč, mohl by dešifrovat všechna uložená hesla. Hashování je jednosměrné bez klíčů. Tedy ani útok na server není spojen s prozrazením tajného klíče. Útočník nemá žádný klíč, pomocí kterého by mohl hesla "dešifrovat" a musí testovat možnosti pro každé heslo zvlášť (hrubou silou nebo slovníkem). Ochrana heslem tedy závisí pouze na složitosti samotného procesu hashování, nikoli na bezpečnosti klíče.
Rizika útoku: Útočníci běžně používají slovníkové útoky (zkoušejí běžná hesla) a duhové tabulky (předem vypočítané hashovací tabulky pro častá hesla). Použitím unikátní soli pro každý účet a výkonných "pomalých" algoritmů si tyto útoky značně zkomplikujete. Tedy, i když se útočník dostane k hashi, nebude se moci jednoduše podívat do jedné tabulky; Každý hash musí zkontrolovat obtížným výpočtem.
Další faktory: Hashování se často kombinuje s dalšími vrstvami zabezpečení, jako je dvoufaktorové ověřování (2FA) nebo biometrické ověřování. Tyto prvky vyžadují další krok od uživatele (SMS kód, otisk prstu atd.), což zvyšuje jistotu identifikace. Princip ukládání hesla se však nemění. I s 2FA nebo biometrií heslo serveru stále cestuje v hashované podobě. Tyto metody slouží jako druhá linie ochrany.
Výpočetní náročnost: Moderní algoritmy (Argon2, bcrypt) jsou navrženy tak, aby výpočet hashe byl záměrně pomalejší a náročnější. Ke generování jejich hodnot hash je zapotřebí více paměti a času. Například Argon2 umožňuje nastavit velikost paměti a počet iterací a bcrypt má svůj vlastní "nákladový faktor", který výrazně zpomaluje schopnost uhodnout heslo. Proto i při použití výkonných serverů nebo speciálních čipů je zpracování milionů hashů za sekundu mnohem obtížnější než u starých algoritmů. Starší (MD5, SHA-1) jsou dnes považovány za nedostatečné.
Hashování hesel je tak přirozeným způsobem, jak minimalizovat riziko masivního úniku. Umožňuje webovým stránkám a zařízením pracovat s hesly, aniž by je znaly v otevřené podobě.
Příklady použití hashovaných hesel
Hashovaná hesla lze nalézt téměř všude v IT systémech, které spravují uživatelské účty.
Webové služby: E-shopy, online banky, e-mail a sociální sítě ukládají hesla uživatelů pouze jako hashe. V ideálním případě by všechna hesla ve světě IT mohla být uložena jako hashe." V praxi to znamená, že po zadání hesla dojde k hashování hesla a do databáze se uloží pouze jeho hash. Password server nikdy nefunguje ve své čisté podobě, takže ani v případě útoku nemůže přímo prozradit vaše heslo.
Operační systémy: Hesla účtů v systémech Linux, Windows nebo macOS jsou uložena s algoritmem hash. Linux například používá soubor /etc/shadow, kde má zapsané hodnoty hash hesel všech účtů. Při přihlašování systém zadaný hash hesla a porovná ho s uloženým hashem. Windows i macOS pracují s hashi (např. NT hash v doméně AD). Díky tomu operační systém sám nikdy neukládá žádné heslo, zachovává pouze jeho bezpečnou podobu.
Síť a periferie: Moderní tiskárny, skenery nebo směrovače často vyžadují heslo správce pro správu. Například zpráva o zabezpečení chyb tiskáren Brother odhalila, že výchozí heslo správce bylo vygenerováno hashováním sériového čísla. Ačkoliv se jednalo o chybnou implementaci (útočník znal algoritmus generování), případ ukazuje, že hashovací funkce se používají i při výrobě hesel v těchto zařízeních. Hesla na tiskárnách a periferiích by proto měla být vždy silná a uložená hashovaná (nejlépe s jedinečnou solí), stejně jako v jiných IT systémech.
Zabezpečení tisku: Některé firemní tiskárny používají režim zabezpečeného tisku, ve kterém uživatel chrání tisk heslem. Tato hesla by měla být při uložení zpracována i hashem - tiskový server si pamatuje pouze hashe a porovnává hash zadaného hesla s hashem uloženým při autentizaci. Byla by to nebezpečná situace, pokud by takové heslo bylo uloženo v prostém textu; Správně navržený systém bude místo toho hashovat hesla.
Jiné aplikace: Mnoho programů a služeb přistupuje k heslům stejným způsobem. Například redakční systémy (WordPress, Drupal), databázové systémy nebo firemní CRM ukládají uživatelská hesla zašifrovaná. Autentizační protokoly (např. SSH nebo RADIUS) také často komunikují pouze ve formě hashů hesel. Hashování se zároveň používá k ochraně integrity dat (kontrolní součty, digitální podpisy), i když se nejedná o přímé ukládání hesel. Ve všech případech platí totéž: systém si pamatuje pouze hodnoty hash, nikoli text hesla. To znamená, že pokud uživatel heslo získá, web ho nezíská zpět, může pouze vygenerovat nové (protože staré heslo nikdy neznal).
Hashovaná hesla se proto nacházejí všude tam, kde je potřeba bezpečně ověřit identitu uživatele, aniž by se heslo ukládalo v jeho čisté podobě. Jejich využití zajišťuje, že i v případě úniku databáze získá útočník pouze hashe, které pak musí na dlouhou dobu prolomit, a nikoliv přímé přístupové údaje.
Závěr
Hashování hesel je základním kamenem moderní ochrany přístupu. Pro uživatele to znamená, že servery, webové stránky nebo zařízení, se kterými pracujete, nikdy neukládají vaše heslo jako prostý text. Vidí pouze jeho hash. I kdyby útočník získal databázi hashů, měl by k dispozici pouze tyto hashe, které by musel sám (obtížně) rozluštit (např. slovníkovým útokem).
Pro běžného uživatele to znamená: používejte silná a jedinečná hesla, používejte správce hesel ke správě přístupu k různým službám. Povolte dvoufaktorové ověřování (2FA), kdykoli je to možné. Tímto způsobem, i když jsou hashe kompromitovány, přístup útočníka zůstane nemožný. Nikdy například nepoužívejte stejné heslo na více webech a používejte správce hesel ke generování silných, jedinečných hesel pro každý účet. Tyto návyky ještě více posílí ochranu, pokud se heslo bude v každé službě lišit, útočník nebude schopen získat přístup jinam jediným únikem.
Důvěřujte pouze službám, které podporují hashování hesel. Pokud systém může heslo poslat zpět (např. e-mailem), znamená to, že heslo uloží jako prostý text, a to je závažná bezpečnostní chyba.
Při zpracování hesel zabraňuje hashování jejich přímému odhalení a poskytuje robustní ochranu přístupových údajů. Proto je hashování hesel klíčovým prvkem, který výrazně zvyšuje bezpečnost našich účtů i v kontextu tiskáren a dalších zařízení.
Pro většinu běžných uživatelů je řada pojmů spojených s bezpečností neznámá. Pokud však při vytváření účtu pro službu narazíte na další prvek ochrany, než je heslo, při registraci pro jiný prvek ochrany, než je heslo, použijte tuto možnost. Dnes je součástí nastavení zabezpečení téměř v každé službě, aplikaci.
Kryptografické solení je bezpečnostní technika používaná k ochraně hesel a dalších citlivých dat před útoky, jako jsou útoky hrubou silou nebo slovníkové útoky. Tento proces zahrnuje přidání náhodných dat, známých jako "sůl", k původním datům uživatele před jejich hašováním. Přidání soli před hashováním zvyšuje odolnost systému proti útočníkům, kteří mohou mít přístup k databázi hashovaných hesel. Kryptografické solení je považováno za důležitou praxi při ochraně citlivých dat v moderních systémech zabezpečení informací.