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]

Č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.

Běžná doba potřebná na prohledání celého prostoru hesel
DÉLKA HESLA (ZNAKY)45 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 sec 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.

další weby:fond rozvojemetacentrumCzechLightpřenosyvideoservereduroameduID.cz