Volba ideálního hesla
Aleš Padrta
Computerworld, 17. června 2011
V předchozích dvou dílech tohoto seriálu jsme představili způsoby, kterými se útočníci snaží uhodnout hesla. Příslušná doba, kterou k tomu potřebují, je úměrná jeho délce a kvalitě, takže nejbezpečnější by bylo využívat množinu všech dostupných znaků a heslo mít nekonečně dlouhé.
Nicméně hesla používají také lidé a jejich mozek není uzpůsoben na pamatování si dlouhých řetězců náhodných znaků. Dobrým pomocníkem mohou být bezpečná úložiště hesel, která se v současné době vyskytují téměř v každém mobilním telefonu, takže už není nutné trvat na zapamatování si hesla jako na jediném způsobu jeho bezpečného uchovávání. Na druhou stranu řada uživatelů zadává hesla několikrát denně a zapamatovatelnost je pro ně podstatná. Ideální heslo je tedy dostatečně silné a zároveň zapamatovatelné, což se na první pohled jeví jako protichůdné požadavky.
Zapamatovatelnost hesla
První požadavek zcela závisí na uživatelích a schopnostech jejich paměti. Této problematice byla věnována nemalá pozornost a byla provedena řada experimentálních studií. Klíčové poznatky ohledně vztahu uživatel - přijatelné heslo přinesla studie The Memorability and Security of Passwords - Some Empirical Results z roku 2004, která ověřovala hypotézu, že silná hesla jsou pro většinu uživatelů nezapamatovatelná, a naopak snadno zapamatovatelná jsou zase slabá.
Prakticky bylo zjištěno, že vynucené používání silných hesel, která připravil pseudonáhodný generátor, přinášela uživatelům velké obtíže při jejich učení a navíc docházelo k rychlému zapomínání, pokud nebyla používána pravidelně.
Dále byl testován druhý extrémní případ, kdy uživatelé byli informováni pouze o požadavcích na heslo, tj. minimální délce a počtu použitých skupin znaků, přičemž jim při jeho tvorbě byla ponechána úplná volnost. Takováto hesla se uživatelé byli schopni naučit relativně rychle a míra zapomínání se také výrazně snížila. Problémem však byla nízká odolnost proti lámání, kdy největší úspěchy slavil slovníkový a hybridní útok, protože se většinou jednalo o běžná slova mateřského jazyka, která byla doplněna příponou tvořenou číslicemi, aby byl splněn požadavek na další skupinu znaků.
Z těchto experimentů mimo jiné vyplývá, že pokud heslo (obecně i jiný údaj) vychází od daného člověka, je pro něj jednodušší si jej zapamatovat a dlouhodobě udržet v paměti. Příčinou jsou další asociované údaje, jež si člověk k dané informaci připojí a které mu pomáhají při vzpomínání. Může jít například o oblíbené výrazy, slova spojená s daným účtem, ale také o postup, jak bylo heslo vytvářeno. Tyto pomocné údaje však u vnucovaných hesel chybějí a uživatel si v lepším případě nějaké sám vymyslí - typicky si zapamatuje rozložení odpovídajících kláves, což je vlastně transformace nesmyslného řetězce znaků na lépe uchopitelný prostorový vzor. V horším případě musí spoléhat jen na učení a časté opakování.
Za hesla silnější
Rozumnou zapamatovatelnost tedy lze zachovat pouze v případě, kdy si heslo vytvoří sám uživatel. To značně omezuje možnosti jak zvýšit jeho sílu. V podstatě jedinou variantou je zaměřit se na postup, kterým jsou hesla v myslích uživatelů vytvářena, a jejich spontánní tvorbu nahradit vhodnějším a bezpečnějším algoritmem.
V ideálním případě budou tedy uživatelé přesvědčeni, aby pro konstrukci hesel používali doporučený postup, který povede k vytvoření dostatečně silného hesla při současném zachování zapamatovatelnosti. Uživatel by se o správném postupu měl dozvědět stejným způsobem jako o minimálních požadavcích na heslo.
Vybrané postupy pro tvorbu hesla
Existuje celá řada algoritmů, které uživatelům umožňují vytvářet zapamatovatelná a současně silnější hesla, než by si zvolili sami bez doporučení. Všechny vycházejí ze dvou kroků -uživatel si nejprve zvolí frázi a následně ji modifikuje podle určitého klíče. Prakticky si tak vlastně pamatuje vstupní data a algoritmus, který na ně aplikuje.
Některým postupům se daří vytčeného cíle dosáhnout lépe, jiným méně, přičemž základním problémem bývá omezení prostoru dostupných znaků, které útočníkovi zjednodušují lámání, např. výsledkem algoritmu „zvol si větu a vynechej všechny samohlásky“ bude vždy řetězec písmen. Také náhrada znaků podobně vypadajícími číslicemi vyřadí původní znaky. Očividné je také snadné rozšíření slovníkového útoku například pro posunuté klávesy nebo vynechané samohlásky. Proto nezbývá než řetězit více takovýchto kroků, což zvyšuje sílu hesla, ale na druhou stranu zase může dost komplikovat výslednou syntézu. Pro většinu uživatelů totiž můžou být některé postupy nepříjemné, například používání tzv. leet speaku (náhrada písmen podobně vypadajícím shlukem znaků) nebo nutnost zpaměti smíchat dvě slova.
Tvorba hesla z passfráze
S výběrem vhodných kroků algoritmu pro běžného uživatele bylo laborováno poměrně dlouho a v současné době je nejrozšířenějším a většinou doporučovaným algoritmem „tvorba hesla z passfráze“ (viz obrázek).
Základem je výběr vhodné věty, ze které jsou z každého slova extrahovány určité znaky, a výsledek je dále upraven. Každý uživatel si může své parametry algoritmu modifikovat, ale měl by vždy absolvovat následující kroky:
- výběr dostatečně dlouhé fráze (libovolná věta),
- extrakce znaků z každého slova (určitý znak z každého slova - první, poslední apod.),
- náhrada některých znaků (číslicí, písmeno převést na velké apod.),
- vložení speciálních znaků na vhodná místa (za každé sloveso, místo předložek apod.).
![[Výběr vhodné fráze]](cw08_obr1m_prev.png)
Tento algoritmus byl také testován v již zmíněné studii a hesla vyprodukovaná uvedeným způsobem měla srovnatelnou sílu s těmi tvořenými pseudonáhodným generátorem při současně dobré zapamatovatelnosti pro uživatele.
Shrnutí
Pro tvorbu trvanlivého a silného hesla je potřeba používat vhodný algoritmus, který transformuje zapamatovatelný text zapamatovatelným způsobem na heslo. Pro širší populaci je doporučován zmíněný algoritmus „tvorba hesla z passfráze“, ale není nutné na něm dogmaticky trvat, protože mnoho lidí je schopno vytvářet silná hesla i jinými způsoby.
O autorovi
Aleš Padrta
Autor je řešitelem aktivity CESNET CSIRT sdružení CESNET.