Lehce zlomitelná hesla (I)
Aleš Padrta
Computerworld, 6. května 2011
Dnešní díl je zaměřen na postupy používané při lámání hesel. Jejich analýzou lze snadno zjistit, která jsou lehce zlomitelná, a následně se jim pak vyhnout. Zpravidla lze z těchto informací také odvodit obecně platné požadavky na heslo.
Společné charakteristiky
Všechny dále zmíněné algoritmy používané při lámání potřebují možnost ověřit si, zda dospěly ke správnému heslu. V případě on-line útoku se pokusí přihlásit k cílovému systému, zatímco při off-line útoku tuto činnost simulují provedením příslušného výpočtu a porovnáním výsledku s uloženým hashem nebo s výsledkem šifrování. Pochopitelně je k tomu potřeba znát přesný algoritmus pro ukládání hesel, používaný systémem, ze kterého byla uložená hesla odcizena.
Je třeba zmínit, že pro útočníka je mnohem příjemnější off-line lámání, protože není limitován ničím jiným než výpočetní složitostí, která závisí na kvalitě algoritmu používaného při ukládání. Oproti tomu má většina současných systémů již implementovány ochrany proti očividnému on-line lámání hesel, které celý proces výrazně zpomalují a jimž bude věnován některý z dalších dílů tohoto seriálu.
Co se týká rychlosti lámání, současný pokrok ve světě IT umožňuje provést řádově statisíce až miliony off-line pokusů za sekundu.
Nehledě ke skutečnosti, že úlohu lámání hesla lze snadno distribuovat mezi více počítačů, a výrazně tak urychlit výpočet. Každopádně je prolomení vždy pouze otázkou času - zda to bude trvat několik sekund nebo staletí, závisí na způsobu uložení hesla a také na jeho kvalitě.
Útok hrubou silou
Nejjednodušší a nejstarší, leč stále velmi účinnou metodou je použití hrubé síly (brute force attack). Algoritmus spočívá v postupném zkoušení všech možných kombinací a délek, přičemž prohledávaný prostor hesel je definován množinou přípustných znaků. Nevýhodou toho „hloupého“ přístupu je doba trvání, která útok hrubou silou činí špatně použitelný pro dlouhá a složitá hesla, což je vidět z tabulky s uvedenými orientačními časy pro různé délky hesel a velikosti množiny přípustných znaků. Uvedené doby předpokládají otestování 10 milionů hesel za sekundu, což by mělo zvládnout současné PC s dvoujádrovým procesorem. Na druhou stranu, pro lámání krátkých a jednoduchých hesel je útok hrubou silou ideální.
Četnost hesel podle použitých znaků a délky
Útok hrubou silou s kapkou inteligence
Základní algoritmus však lze optimalizovat specifikací pořadí, v jakém má hesla, resp. určité bloky zkoušet. Postupně je opět prohledán úplně celý prostor hesel, ale počátek je spojen s pravděpodobnějšími variantami, takže heslo bude v průměru zjišťováno s menším počtem pokusů.
Konkrétní pravidla pro zlepšení efektivity vycházejí ze znalosti statistiky používaných hesel. Jako pěkný statistický soubor pro tyto účely může skvěle posloužit 32 603 388 passwordů uniklých v roce 2010 ze sociální sítě RockYou. Pro různé jazyky mohou existovat určité odlišnosti, protože hesla nejsou v drtivé většině generována náhodně, nicméně základní charakteristiky se příliš neliší a pro české prostředí zatím není k dispozici takto rozsáhlý soubor dat.
Pokud se podíváme na základní statistické údaje o délce, průměrná je 7,89 znaku, přičemž nejčastěji bylo zvoleno šestiznakové heslo následované hesly o délce osmi a sedmi znaků. Tato znalost může ušetřit mnoho času při relativně malém snížení úspěšnosti, protože pokud by byl výpočet omezen pouze na tři nejčastější délky, dokázal by prolomit 65 % hesel. Případně se lze také smířit s účinností pouze 26 % a testovat jen délku šest znaků, protože doba výpočtu je výrazně nižší než u delších hesel. Vždy záleží na tom, zda útočníka zajímá konkrétní účet nebo mu stačí libovolný v daném systému.
Druhým parametrem pro optimalizaci je množina znaků, které heslo může obsahovat. Opět vyjdeme ze statistiky z RockYou. Standardně několik základních skupin znaků - číslice, malá písmena, velká písmena a speciální znaky (alias zbývající tisknutelné znaky). V grafu je zobrazena četnost hesel podle použitých znaků a délky. Čím světlejší barva, tím více hesel s danými parametry existuje. Pro lepší rozlišení údajů jsou uvedené hodnoty v logaritmickém měřítku. Na první pohled je zřejmé, že optimalizovaný algoritmus začne zkoušet hesla tvořená pouze číslicemi o délce 6 znaků (2,2 milionu hesel), protože číslic je jen deset a 6 znaků je relativně krátké heslo, takže výpočet bude trvat krátkou dobu, a přitom má šanci na získání cca 7 % hesel. Další na řadu přijdou hesla složená pouze z malých písmen o délkách 6 znaků (3,9 milionu hesel - 12 %), 7 znaků (2,7 milionu -8,4 %) a 8 znaků (2,4 milionu -7,5 %). Dále má ještě smysl uvažovat o heslech, která jsou tvořena malými písmeny a číslicemi o délkách 8, 7 a 6 znaků. Ostatní kombinace jsou ze statistického hlediska nevýhodné - buď je v dané kategorii málo hesel, nebo by příslušný výpočet trval velmi dlouho.
Doporučení proti útoku hrubou silou
Uživatel může proti útoku hrubou silou udělat jen jediné -zvolit si heslo, které bude dostatečně dlouhé (minimálně 9 znaků) a složité (alespoň 3 skupiny znaků). Rozhodně není vhodné mít např. heslo o délce 6 znaků složené pouze z číslic.
| DÉLKA HESLA (ZNAKY) | 4 | 5 | 6 | 7 | 8 | 9 |
| Pouze číslice (10 možností) | 0x3C 1 sec | 0x3C 1 sec | 0x3C 1 sec | 1 sec | 10 sec | 1,6 min |
| Malá písmena (26 možností) | 0x3C 1 sec | 1,2 sec | 50 sec | 22 min | 5,8 hod | 150 hod |
| Malá písmena a číslice (36 možností) | 0x3C 1 se | c 6,1 sec | 3,6 min | 2,2 hod | 78,4 hod | 118 dní |
| Alfanumerické znaky (62 možností) | 1,5 sec | 1,5 min | 95 min | 97,8 hod | 252 dní | 42,9 roku |
| Všechny běžné znaky (96 možností) | 8,5 sec | 13,5 min | 22 hod | 87 dní | 23 let | 2 196 let |
O autorovi
Aleš Padrta
Autor je řešitelem aktivity Cesnet CSIRT sdružení Cesnet.