Hashované heslá: čo to je, ako fungujú a prečo ich používať
Hashovanie hesiel je technika, ktorou sa pôvodné heslo premení pomocou špeciálnej (nevratnej) hashovacej funkcie na fixne dlhý reťazec znakov - tzv. hash (haš). Ak by mal útočník prístup k databáze s hashmi hesiel, nevidel by priamo samotné heslá, ale iba ich odtlačky. Výstup hashovacej funkcie je pritom jednosmerný: raz vypočítaný haš sa späť do pôvodného hesla nedá ľahko získať. Napríklad heslo „exTraTAjneHeslo159“ po zahashovaní vyzerá ako dlhý „náhodný“ reťazec. Nikto z neho nedokáže vypátrať pôvodný text. Pri prihlasovaní sa heslo znova zahashuje a porovnáva sa s týmto reťazcom. Je to podobné, ako keď si vytvoríte odtlačok prsta. Z odtlačku nezistíte totožnosť, ale podľa neho tú istú osobu spoznáte. Hash hesla funguje rovnako: systém overí totožnosť hesla, no samotné heslo nikdy nepozná.
zdroj: gen.Ai
Hashovanie má viacero kľúčových vlastností
Jednosmernosť: Z hašu sa nedá (ľahko) získať pôvodné heslo. Ani keby útočník poznal celý haš, bez brutálneho prehľadania možností heslo z neho takmer nemožno odhadnúť.
Fixná dĺžka výstupu: Bez ohľadu na dĺžku pôvodného hesla má vypočítaný haš vždy rovnakú dĺžku (napr. MD5 → 32 znakov, SHA-256 → 64 znakov).
Deterministický výsledok: Rovnaké heslo vždy generuje rovnaký haš (bez pridanej soli).
Kryptografická soľ (salt): K heslu sa pridáva náhodný reťazec salt. Vďaka kryptografickej soli aj dve identické heslá vytvoria po zahashovaní odlišné haše. Útočník tak nemôže použiť predpočítané rainbow tables (tabuľky hashov bežných hesiel). Napríklad ak dvaja používatelia majú totožné heslo, pridanie odlišných saltov (náhodných reťazcov) zabezpečí, že ich haše budú úplne rozdielne. Útočník tak nemôže použiť jednu predpočítanú tabuľku ani rovnaký zoznam slov pri hľadaní oboch hesiel.
Algoritmy: Existuje viac hashovacích funkcií. MD5 a SHA-1 boli kedysi štandard, dnes sa považujú za nedostatočne bezpečné. Moderné riešenia ako bcrypt či Argon2 sú navrhnuté tak, aby boli vedome spomalené a pamäťovo náročné. Napríklad Argon2 umožňuje nastaviť veľkosť využívanej pamäte a počet výpočtových kôl; bcrypt má vstavaný tzv. cost factor (počet iterácií). V praxi to znamená, že výpočet hašu hesla môže vyžadovať veľa pamäte a zopakovaných výpočtov, čím sa útok (najmä pomocou GPU) významne spomaľuje.
Ako funguje hashovanie hesiel
Pri registrácii či prihlasovaní systém nikdy neukladá heslo v čitateľnej podobe. Postup je zvyčajne nasledovný:
- Používateľ zadá svoje heslo (napr. v prihlasovacom formulári webu alebo administrácie tlačiarne).
- Systém k heslu aplikuje hashovací algoritmus (napr. SHA-256, bcrypt či Argon2). Výsledkom je fixne dlhý reťazec – haš hesla.
- Haš sa uloží do databázy (Linux napr. do súboru /etc/shadow) namiesto reálneho hesla. Systém si pamätá len tento haš, nie samotné heslo.
- Pri ďalšom prihlásení sa zadané heslo rovnakým spôsobom zahashuje a vzniknutý haš sa porovná s uloženým. Ak sa zhodujú, prístup je povolený.
Takto server či zariadenie ani raz nevidia vaše heslo v „čistom“ tvare. Do siete sa pri prihlasovaní posiela len haš, nie text hesla. Aj v prípade útoku na databázu útočník získa len haše, ktoré musí sám prelomiť (napr. slovníkovým útokom alebo brute-force). Toto všetko robí hashovanie veľmi odolným aj pri kompromitácii dát útočník nedokáže priamo využiť heslá.
Výhody hashovania a porovnanie s inými metódami
Ochrana pri úniku dát: Ak by sa hackeri dostali k databáze hashov, videli by len haše. Bez znalosti pôvodných hesiel musia hashe ešte prelomiť a tento proces je zdĺhavý a útočníka spomalí. Ak by sa heslá ukladali bez hashovania, útočník by získal okamžite prístup ku všetkým účtom.
Na rozdiel od šifrovania: Šifrovanie je obojsmerný proces s kľúčom (zašifrované heslo sa môže dešifrovať). Ak by útočník získal šifrovací kľúč, mohol by dešifrovať všetky uložené heslá. Hašovanie je jednosmerné bez kľúča. Tým pádom ani útok na server nie je spojený s kompromitáciou nejakého tajného kľúča. Útočník totiž nemá žiadny kľúč, ktorým by mohol heslá „rozlúštiť“ a musí pre každé heslo zvlášť skúšať možnosti (brute-force či slovník). Tým pádom ochrana hesla závisí len od zložitosti samotného hashovacieho procesu, nie od bezpečnosti kľúča.
Riziká útokov: Útočníci bežne používajú slovníkové útoky (vyskúšanie bežných hesiel) a rainbow tables (predpočítané tabuľky hashov pre frekventované heslá). Použitím unikátnej soli pre každý účet a výkonných „pomalých“ algoritmov tieto útoky značne skomplikujete. Teda aj keď sa útočník dostane k hashu, nebude môcť jednoducho pozrieť do jednej tabuľky; musí každý hash náročným výpočtom skontrolovať.
Doplňujúce faktory: Hašovanie sa často kombinuje s ďalšími vrstvami zabezpečenia, napr. dvojfaktorová autentifikácia (2FA) alebo biometrické overovanie. Tieto prvky vyžadujú od používateľa ďalší krok (SMS kód, odtlačok prsta a pod.), čím sa zvýši istota identifikácie. Princíp ukladania hesla sa však nemení. Aj pri 2FA či biometrike heslo serveru stále putuje v zahashovanej podobe. Tieto metódy slúžia ako druhá línia ochrany.
Výpočtová náročnosť: Moderné algoritmy (Argon2, bcrypt) sú navrhnuté tak, aby bol výpočet hašu zámerne pomalší a náročnejší. Na generovanie ich hašov treba viac pamäte a času. Napríklad Argon2 umožňuje nastaviť veľkosť pamäte a počet iterácií, a bcrypt má svoj „cost factor“, čím sa silne spomaľuje možnosť uhádnuť heslo. Aj pri použití výkonných serverov či špeciálnych čipov je preto spracovanie miliónov hašov za sekundu omnoho ťažšie ako pri starých algoritmoch. Staršie (MD5, SHA-1) sa dnes považujú za nedostatočné.
Hashovanie hesiel je tak prirodzený spôsob, ako minimalizovať riziko masívneho úniku. Umožňuje webom a zariadeniam pracovať s heslami bez toho, aby ich poznali v otvorenej podobe.
Príklady použitia hashovaných hesiel
Hashované heslá nájdeme takmer všade v IT systémoch, ktoré spravujú používateľské účty.
Webové služby: E-shopy, online banky či e-mailové a sociálne siete ukladajú heslá používateľov iba ako haše. Ideálne by bolo, aby sa všetky heslá v IT svete mohli ukladať ako hashe“. V praxi to znamená, že po zadaní hesla sa heslo zahashuje a do databázy sa uloží len jeho haš. Server s heslom v čistej forme nikdy nepracuje, takže ani v prípade útoku nemôže priamo odhaliť vaše heslo.
Operačné systémy: Heslá účtov v Linuxe, Windows či macOS sú uložené zahashované. Linux napríklad používa súbor /etc/shadow, kde má zapísané haše hesiel všetkých účtov. Pri prihlasovaní systém zadané heslo zahashuje a porovná s uloženým hašom. Rovnako Windows i macOS pracujú s hashmi (napr. NT hash v AD doméne). Vďaka tomu samotný OS nikdy neuchováva žiadne heslo, zachováva len jeho zabezpečenú formu.
Sieťové a periférne zariadenia: Moderné tlačiarne, skenery či routery často vyžadujú administrátorské heslo pre správu. Napríklad bezpečnostná správa o chybe tlačiarní Brother odhalila, že predvolené administrátorské heslo bolo vygenerované hashovaním sériového čísla. Aj keď išlo o chybnú implementáciu (útočník poznal generovací algoritmus), prípad ukazuje, že hashovacie funkcie sa využívajú aj pri výrobe hesiel v týchto zariadeniach. Preto by heslá na tlačiarňach a perifériách mali byť vždy silné a ukladané zahashované (najlepšie s unikátnou soľou), rovnako ako v iných IT systémoch.
Bezpečnosť tlače: V niektorých firemných tlačiarňach sa používa režim Secure Print, kde používateľ chráni tlač heslom. Aj tieto heslá by mali byť pri ukladaní spracované hašovacie - tlačový server si pamätá len haše a pri overovaní porovnáva haš zadaného hesla s uloženým. Nebezpečná by bola situácia, ak by bolo také heslo uložené v plaintext; správne navrhnutý systém heslá namiesto toho zahashuje.
Ďalšie aplikácie: Mnohé programy a služby pristupujú k heslám rovnakým spôsobom. Napríklad redakčné systémy (WordPress, Drupal), databázové systémy či firemné CRM ukladá heslá používateľov zahashované. Tiež autentifikačné protokoly (napr. SSH alebo RADIUS) často komunikujú iba formou hashov hesiel. Zároveň sa hashovanie používa na ochranu integrity dát (kontrolné súčty, digitálne podpisy), hoci to nie je priame ukladanie hesla. Vo všetkých prípadoch platí to isté: systém si pamätá len haše, nie text hesla. To znamená, že ak sa používateľ heslom dostane, stránka ho nenezíska späť, vie iba generovať nové (pretože staré heslo nikdy nepoznala).
Hashované heslá teda nájdeme všade tam, kde sa potrebuje bezpečne overovať identita používateľa bez ukladania hesla v čistej podobe. Ich použitie zaisťuje, že aj v prípade úniku databázy útočník získava len haše, ktoré potom musí zdĺhavo prelomiť a nie priame prístupové údaje.
Záver
Hashovanie hesiel je základný kameň modernej ochrany prístupu. Pre používateľa to znamená, že servery, weby či zariadenia s ktorými pracujete, nikdy neukladajú vaše heslo ako čistý text. Vidia iba jeho hash. Dokonca, ak by útočník získal databázu hashov, mal by k dispozícii len tieto haše, ktoré by sám musel (ťažko) dešifrovať (napr. slovníkovým útokom).
Pre bežného používateľa to znamená: používajte silné a jedinečné heslá, využívajte správcov hesiel na správu prístupu do rôznych služieb. Aktivujte si dvojfaktorové overenie (2FA) všade tam, kde je to možné. Týmto spôsobom aj v prípade kompromitácie hashov zostane útočníkovi prístup znemožnený. Napríklad nikdy nepoužívajte rovnaké heslo na viacerých stránkach a využívajte správcu hesiel na generovanie silných unikátnych hesiel pre každý účet. Tieto návyky ešte viac posilnia ochranu, ak je heslo v každej službe odlišné, útočník nebude môcť pomocou jedného úniku získať prístup aj inde.
Dôverujte len službám, ktoré podporujú hashovanie hesiel. Ak nejaký systém dokáže heslo poslať späť (napr. e-mailom), znamená to, že heslo ukladá ako otvorený text a to je vážny bezpečnostný nedostatok.
Pri spracovaní hesiel hashovanie zamedzuje ich priamemu odhaleniu a poskytuje robustnú ochranu prístupových údajov. Preto je hashovanie hesiel kľúčovým prvkom, ktorý výrazne zvyšuje bezpečnosť našich účtov aj v kontexte tlačiarní a iných zariadení.
Pre väčšinu bežných používateľov je množstvo výrazov spojených s bezpečnosťou neznámych. Ak však narazíte pri vytváraní účtu k službe, registrácii na ďalší prvok ochrany než je heslo, využite túto možnosť. Dnes už je to súčasťou bezpečnostného nastavenia skoro v každej službe, aplikácii.
Kryptografické solenie je bezpečnostná technika používaná na ochranu hesiel a iných citlivých údajov pred útokmi, ako sú útoky hrubou silou alebo slovníkové útoky. Tento proces zahŕňa pridanie náhodných údajov, známych ako 'soľ', k pôvodným údajom používateľa pred ich hashovaním. Pridanie soli pred hashovaním zvyšuje odolnosť systému proti útočníkom, ktorí môžu mať prístup k databáze hashovaných hesiel. Kryptografické solenie je považované za dôležitú prax pri ochrane citlivých údajov v moderných systémoch informačnej bezpečnosti.