Bezpečnost hesla

Útočník, který se snaží dostat do nějaké heslem zabezpečené aplikace (zaheslovaný RAR, email…) má několik možností, jak se bez znalosti hesla dopracovat k výsledku. Některé z nich vyžadují jistou dávku inteligence, důvtipu a znalostí, jiné zase vyžadují trochu štěstí a fyzické průpravy. Takže pojďme si nejdřív shrnout, jaké má útočník možnosti.

Jak prorazit něčí heslo

  • Najít toho, kdo heslo zná (majitele emailu, například) a heslo od něj získat — ukecat ho, uplatit, zmlátit. Tento způsob nebudu dále v článku popisovat :-).
  • Zkusit od majitele heslo vymámit nějak nenápadně, například fake mailem, odborněji se tomu říká phishing, česky rhybaření. Metoda spočívá v tom, že majiteli účtu pošlete email, kde ho vyzvete, aby vám zpět poslal přihlašovací jméno a heslo. Záleží jen na vás, jak moc se bude zpráva tvářit důvěryhodně, samotná prosba by asi totiž nestačila, je nutné k tomu přidat nějaký příběh. Často se můžeme setkat s tím, že se porouchala databáze a proto vyzýváme všechny uživatele, aby zadali znova své heslo a jméno, jinak že jim schránku zrušíme apod. Pokud ta zpráva vypadá opravdu seriózně, procento úspěšnosti nebývá malé.
  • Slovníkový útok — stáhneme si z internetu nějaké balíčky nejčastějších hesel a všechny prozkoušíme. Pokud budeme mít štěstí a majitel má nějaké frekventovanější heslo, skutečně ho snadno získáme. Z toho plyne ono zásadní ponaučení — nedávejte si hesla, která dávají smysl. Dejte si třeba heslo eminem a garantuji vám, že první lamoidní hacker vám to prolomí za pár vteřin. Toto je asi nejúčinnější metoda, pokud máte opravdu velký slovník hesel, tak jste schopni uhádnout heslo velké části uživatelů bez větší námahy.
  • Brute force je nejblbější metoda, hrubá síla. Spočívá ve zkoušení všech možných variací hesel, jaké jen na světě existují. Program skládá postupně písmenka podle určitého algoritmu a zkouší, zda se netrefil do požadovaného hesla. Až ho najde, uloží si heslo a skončí. Tuto metodu si dále probereme.

Hrubá síla

Program využívající tuto metodu jen tvoří různé variace slov a zkouší, zda se náhodou netrefil do hesla. Spočítáme si, jak dlouho mu takové zkoušení může trvat.

Předpokládejme, že máme heslo o pěti znacích, které se skládá jen z malých písmen anglické abecedy (bez českých č, š apod.). Počet písmen anglické abecedy je dvacet šest. Nyní už jednoduše spočítáme, kolik různých hesel můžeme z pěti takových písmen sestrojit. Budeme používat variace, jelikož nám záleží na pořadí (heslo strom není stejné jako morst, ačkoliv se skládá ze stejných písmen) a dále musíme využít variace s opakováním, protože písmena se v heslech mohou opakovat. A jdeme na samotný výpočet. Vzoreček pro práci s variacemi s opakováním vypadá V'(k, n) = nk. Za n dosadíme počet písmen, ze kterých budeme vybírat — počet písmen anglické abecedy a za k dosadíme počet písmen, ze kterých se heslo skládá, v našem případě pět. Vychází nám 265, což je přibližně dvanáct milionů různých variací. Je to hodně nebo málo?

To záleží i na tom, jaký máme k dispozici stroj. Nějaká starší šunka zvládne za vteřinu málo porovnání, supermoderní počítače jich zvládnou desettisíckrát více. Já budu v těchto příkladech pracovat s tím, že počítač zvládne deset milionů porovnání a vyhodnocení za vteřinu. Už asi každému dochází, že pětimístné heslo by takový počítač odhalil do dvou vteřin, což opravdu není pozitivní výsledek. Ale nevzdávejme se.

Zesilujeme heslo

Pětimístné heslo opravdu není bezpečné ani trošičku, některé rozumější systémy ani takto krátké heslo neumožňují zvolit. Říká se, že heslo by nemělo být katší než osm znaků. Pojďme si nyní spočítat, kolik existuje variací pro osmimístné heslo. Stejně jako v předchozím případě budeme uvažovat pouze malá písmena anglické abecedy. Dosadíme do vzorce a vychází nám 268, což je přibližně dvěstě miliard variací. To už je hezčí číslo. Počítač by všechny variace vyhodnotil za necelých šest hodin. Je to lepší než minule, ale podívejme se, jak by narostla síla hesla, kdybyste používali i velká písmena, číslice a speciální znaky jako jsou podtržítka, pomlčky apod.

Malých písmen je 26, velkých písmen je také 26, to dává dohromady 52 znaků. K tomu ještě musíme přičíst 10 číslic a nějaké speciální znaky. Ne všude jsou povolené všechny speciální znaky, tak pro jednoduchost budu počítat pouze s osmi speciálními znaky, ať se mi počet znaků zaokrouhlí na hezkých 70. Délka hesla bude opět osm. Po dosazení vychází toto číslo: 708, což je pro lepší představu přibližně 5 · 1014, slovně pět milionů miliard variací. To už je docela úctyhodné číslo. Náš počítač by všechny variace zkontroloval za šestnáct tisíc hodin! Což jsou necelé dva roky. Útočník by musel mít hodně velké štěstí, aby heslo objevil v nějakou reálnou dobu. Navíc by musel znát délku vašeho hesla, v opačném případě, kdy by délku neznal, by musel ještě prověřit variace nižšího počtu písmen.

Někteří lidé se tak bojí o svá data, že používají číselná hesla. Tyto hesla jsou velice dobře odolná proti slovníkovému útoku, protože těžko bude v nějakém slovníku často používaných hesel zrovna 41 274 390 553. Bohužel takováto hesla jsou sice odolná proti slovníkovému útoku, ale jsou méně odolná proti brutal-force. Čísel totiž je pouze deset, to znamená, že počet variací je vždy 10k. Sílu hesla udržuje pouze jeho délka. Naše předchozí osmimístné heslo se všemi druhy znaků mělo celkem 1014 variací. Abychom dosáhli toho samého u číselného hesla, muselo by mít čtrnáct číslic, více jak o polovinu více znaků. Je jasně vidět, že efektnější je volit heslo kratší, ale s více druhy znaků.

Nepodceňujte útočníka

Útočník může být chytrý. Po přečtení předchozích řádků jste se dejme tomu rozhodli, že vaše současné heslo „limonada“ přepíšete alespoň na „Limonada“, čímž se několikanásobně zvýší počet možných variací, protože útočník již musí do algoritmu zahrnout i velká písmena. Jenže útočník může předpokládat, že velké písmeno bude pouze na prvním místě, protože se to lépe pamatuje a nebývá zvyklostí, aby bylo velké písmeno uprostřed slova. Takže si napíše algoritmus, který prověří všechny variace slov s malými písmeny a případně s jedním velkým písmenem hned na začátku.

Vaše původní heslo mělo složitost (teď myslím, kolik celkem mohlo být variací, pokud bychom dodrželi stejný tvar hesla — osm malých písmen) 268. Pokud by útočník nepřemýšlel, nové heslo by mělo složitost 528, ale pokud by použil výše nastínený algoritmus, mělo by heslo složitost 52 · 267. Na prvním místě hesla se mohou střídat malá a velká písmena, těch je dohromady 52 a na dalších sedmi místech se mohou střídat již jen malá písmena, což už je standardní variace s opakováním.

Dále útočník může třeba vědět, že se vaše heslo skládá ze čtyř písmen a čtyř číslic, nepřeházeně, vždy čísla za sebou a písmena za sebou. Složitost takového hesla bychom vypočetli takto: první čtveřice písmen má celkem 264 variací, druhá čtveřice číslic má 104 variací. Tyto dva výsledky následně vynásobíme: 264 · 104. Pokud by útočník nevěděl, zda jsou první číslice nebo písmena, museli bychom předchozí výsledek ještě vynásobit dvěma.

Ještě se můžete podívat na tyto tabulky, jsou tam uvedeny rychlosti lámání hesel.