Heslo zůstává nejobvyklejší ochranou přístupu k uživatelským účtům a do počítačových sítí; bývá také klíčem k zašifrovaným souborům nebo diskům.
Jsou sice nástroje na to, abychom si nemuseli pamatovat mnoho hesel — některé přitom nabízejí vytváření hesel náhodných, a tedy poměrně bezpečných — ale nemůžeme‑li na takové pomůcce záviset přinejmenším pro několik nejdůležitějších hesel, nezbývá nám, než si je pamatovat.
Obvyklá doporučení zavádějí
Takto nabádá uživatele Komerční banka ve svém testu bezpečnosti
(Prostřední odpověď se vyhodnocuje jako správná)
Dosud převládající doporučení svádějí běžného uživatele k tomu, že si ve skutečnosti vytvoří něco, co se bezpečnému heslu podobá jen pro lidské oko. Dlouhé náhodné heslo si totiž zapamatovat nedokáže.
Jak dlouhé náhodné heslo bychom si pamatovali?
Dosud bývá často citován výzkum vydaný Georgem A. Millerem v roce 1956. Miller se nezabýval přímo hesly, zabýval se tím, kolik různých podnětů, popřípadě „kusů informace“ jsme schopni najednou udržet v okamžité neboli pracovní paměti. I máme‑li si něco vybavit z dlouhodobé paměti, musí se nám to vejít do paměti pracovní.
Miller zkoumal mladé dospělé ve své době a zjistil průměr sedm — s určitým rozptylem mezi osobami; zjednodušeně se mluví o „pravidle 7±2“. Výzkumy z počátku 21. století však docházejí spíše k závěru 4±2.
Můžeme sice najednou pracovat s informací zdánlivě mnohem delší — například s větou — ale díky tomu, že jsme si malé jednotky „překódovali“ do souhrnnějších — například hlásky do slov a slova do frází. Pamatovávali jsme si také delší čísla, například telefonní, ale díky tomu, že jsme si v nich našli určité vzorce nebo spojili číslice do čísel.
Heslo sestavené náhodně z různých znaků běžně dostupných na klávesnici by dnes mělo mít nejméně dvanáct znaků, spíše však třináct a více, aby bylo možné považovat ho za silné pro běžnou potřebu.
Z čeho se skládá heslo?
Na heslo můžeme pohlížet jako na posloupnost určitých „stavebních kamenů“, vlastně jednotek informace — prvků vybraných z nějakého oboru možností, z nějaké množiny. Celkový počet možností, které je nejvýše nutno vyzkoušet k nalezení správného hesla — jestliže ovšem známe, podle jakého vzoru je heslo složeno a z jakých množin jsou vybrány jeho prvky — je součinem velikostí oborů možností každého jednotlivého prvku. Statisticky je přitom nutno vyzkoušet v průměru polovinu ze všech možností. (Není to úplně pravda, jestliže je některý prvek jen odvozený od jiného, a o tom ještě dále…)
Řekněme, že si někdo zvolil heslo „Anička55“. Takové je o mnoho slabší než řetězec osmi náhodných písmen a čísel. Je totiž opravdu složeno jen ze dvou prvků z velmi malých množin: první prvek je poměrně rozšířené jméno a druhý prvek je číslo z rozsahu 0—99, přitom se obě číslice opakují, a to ještě více snižuje nahodilost tohoto hesla, jelikož i toto opakování lze předvídat — a tedy zkusit přednostně. Jestliže útočník očekává, že máte heslo složené z běžného jména a z čísla, nemusí vyzkoušet mnoho možností.
Zkusíte‑li zjevně slabé heslo Anička55 vložit do některé internetové „zkoušečky síly hesla“, nahlédnete, že se na tyto testery spoléhat nelze, přinejmenším nejste‑li si plně vědomi jejich omezení.
Heslo „AničkaVomáčková55“ je mnohem delší řetězec, ale přinejmenším teoreticky není bezpečnějším heslem o tolik, jak by se zdálo podle délky. Ani tehdy ne, jestliže nejste Anička Vomáčková, ani nejste Vomáčka, ani nikoho s tímto příjmením neznáte.
Do hesla totiž přibyl jen jeden další prvek, a pokud to není prvek z množiny několika málo příjmení ve vašem příbuzenstvu, pořád je to prvek z množiny českých příjmení, nebo přinejmenším spíše běžných českých slov. I neznáte‑li žádné Vomáčkovy, je vhodné předpokládat, že k odhalení hesla „AničkaVomáčková55“ potřebuje vyspělý útočník v podstatě jen několiktisíckrát více pokusů než k odhalení „Anička55“.
Entropie hesla
Pojem „entropie“, jak jej užívá teorie informace, můžeme chápat jako jiné pojmenování pro nahodilost.
Entropie se vyjadřuje počtem bitů. Jeden bit entropie značí například to, že určitá jednotka informace, jejíž obsah předem neznáme, může nabývat dvou různých hodnot, a to každé se stejnou pravděpodobností. Čtyři bity entropie by mohly vyjadřovat například to, že jednotka může nabývat šestnácti různých, stejně pravděpodobných hodnot.
V těchto jednoduchých příkladech můžeme počtem bitů entropie umocnit základ dvě a tak se dopočítat stejně pravděpodobných možností. Opačně, má‑li něco například sto stejně pravděpodobných možností, spočítáme pro to bity entropie jako log2 100, tedy nám vyjde přibližně 6,6 bitů entropie.
Jestliže jsou však některé možnosti pravděpodobnější než jiné, poněkud se tím snižuje nahodilost hodnoty, tedy počet bitů vyjadřující její entropii. Tu pak často nelze přesně spočítat, ale jen odhadnout, popřípadě určit horní a dolní mez.
Výše uvedené přísné hodnocení hesla „AničkaVomáčková55“ je vlastně pokusem stanovit dolní mez jeho nahodilosti, nikoli jeho skutečnou nahodilost z pohledu útočníka, který přece jen nejprve zkusí ještě jinak složená hesla.
Stejně přísně přisuzuje bity entropie Randall Munroe ve svém slavném comicsu xkcd.com/936.
Jak se louskají hesla?
Útočník zpravidla nemůže vyzkoušet velké množství pokusů přímým přihlašováním za vás, systémy jednak záměrně omezují počet pokusů v čase, a i kdyby ne — třeba pro nějakou zranitelnost — musíme počítat s minimální prodlevou na každý pokus. Hesla se louskají především „offline“, porovnáváním hashů.
Hash je číselný „otisk hesla“. Je pevné délky a spočítán funkcí navrženou tak, aby z otisku nešlo zpětně dovozovat na vlastnosti hesla. Běžně zabezpečený systém si neukládá hesla uživatelů, ale jen hashe hesel. Vloží‑li uživatel heslo, to systém přepočte na hash a porovná s uloženým. Je‑li systém nabourán, uniknou z něj hashe, nikoli hesla. Hashem se přitom nejde přihlásit, při přihlašování musíte zadat heslo.
Lépe zabezpečené systémy přidělují každému uživateli ještě náhodnou „sůl“, kterou systém přidá k uživatelovu heslu před výpočtem hashe. Dvěma uživatelům se stejným heslem pak vyjde různý hash. Sůl bývá uložena v databázi s hashi, a tedy unikne spolu s hashi. Sůl řádově ztíží rozlousknutí hesel podle uniklé databáze, ale neznemožní to.
Jestliže jste si někde zvolili heslo, které neužíváte nikde jinde a které není uhodnutelné na základě toho, že si útočník o vás něco zjistí, mohli byste se domnívat, že takové heslo nemusí být příliš silné. Ale to platí jen do okamžiku, než právě z této služby někdo zcizí tabulku přístupových jmen a hashů.
Slabé heslo bude podle hashe odhaleno v řádu minut, nejvýše dní — tedy dost možná dříve, než se o úniku dozvíte, dozvíte‑li se o něm vůbec. A zaměří‑li se někdo jmenovitě na vás, vyhledá‑li si vás třeba podle e‑mailu v uniklých databázích, poskytnete mu odhalitelnými hesly nápovědu k tomu, jak asi mohou vypadat hesla u jiných vašich účtů.
Jak silní jsou louskači hesel?
Podle použité hashovací funkce může běžný domácí „nadšenec“ docílit řádově těchto počtů pokusů za vteřinu:
BH/s značí miliardy hashů za sekundu; MH/s značí milióny hashů za sekundu.
Tabulka převzata z prezentace algoritmu Prince
Běžní profesionálové, kteří se zabývají podnikovou bezpečností, zvládnou na vybavení za několik tisíc dolarů několikanásobek. A jestliže to někomu stojí za to, může si pronajmout cloud.
Zkušení louskači jsou vybaveni seznamy až desítek milionů slov — běžných, neběžných, nebo dokonce jen možných, a z různých jazyků. Mohou využívat poznatků o tom, která písmena spíše pravděpodobně následují po kterých. I jestliže jste si slova ve svém hesle vymysleli, je bezpečnější předpokládat, že útočník je už má v nějakém seznamu.
Obdobně je lepší nedomnívat se, že si heslo složíte způsobem, jaký by nikoho jiného nenapadl. Louskači mají celé soubory pravidel, jak všelijak pospojovat prvky hesla a jaké úpravy s nimi udělat.
Tady je potřeba vrátit se k Aničce a k entropii. Kdyby vás napadlo vytvořit mnohem bezpečnější heslo tak, že „Anička55“ zopakujete a sestavíte tím „Anička55Anička55“, nebo že třeba vytvoříte „Anička55akčinA“ nebo něco podobného, a tím že zmnohonásobíte sílu hesla, není tomu tak. Opatrně a nejpřísněji lze každou takovou úpravu hodnotit, že přidává pouhý bit entropie, byť ve skutečnosti trochu více. Je to prostě jen jedna úprava provedená se stávajícím heslem nebo jeho prvkem. Není to přidání další, nezávislé informace.
Bezpečné zapamatovatelné heslo
Jako silné lze hodnotit takové heslo, jehož odhalení je nepravděpodobné i za předpokladu, že útočník zná obecnou skladbu hesla a obory jeho prvků. Silné heslo sestavíte prostě tak, aby byl dostatečně velký součin velikostí zvolených oborů, ze kterých jste vybrali na sobě nezávislé informace — abyste dosáhli dostatečného počtu možností, kterými se útočník musí probrat, než heslo pravděpodobně odhalí.
Použité jednotky informace by měly být něco, co si vy zapamatujete ve spojení s tím, k čemu se heslem přihlašujete, ale co si nemůže dovodit někdo cizí výzkumem o vás.
S drobnými úpravami hesla to nepřehánějte. Každá jednoduchá náhrada nějakého znaku nebo někde přidaný znak je totiž další informací o hesle, kterou si vy musíte pamatovat, přitom kvůli jen poměrně malému zvýšení entropie.
Nechce‑li se vám vypisovat příliš dlouhé heslo, můžete se sice pokusit o nějaké zkrácení na něco jakoby náhodného, ale nejspíše tím jeho entropii o hodně snížíte, a nesnadno odhadnutelně.
Pokud jde o doporučený počet bitů entropie podle oblasti užití hesla, lze se snad dosud držet hodnot uváděných Tylerem Akinsem. Můžete si ostatně odhadnout (ne Tylerovou zkoušečkou, ale sami podle zvažovaného hesla), že patrně nedosáhnete šedesáti spolehlivých bitů entropie zapamatovatelným heslem takovým, že je ještě budete ochotni vypisovat, a budete rádi třeba za čtyřicet nebo nejvýše padesát.
Snažte se o vysokou pravděpodobnost, že stejné heslo ještě nenapadlo nikoho jiného na světě. A ovšem nikdy nedejte stejné heslo na více míst. Myslete na to, že jakmile jednou odněkud unikne hash nějakého hesla (byť ani nepatřilo k vašemu účtu), pustí se do jeho louskání řada zkušených lidí a je vlastně jen otázkou času, než někdo přijde na to, jaké heslo k takovému hashi patří.
Nebo už ho dávno spočítal. Je totiž v podstatě jen otázkou času, než někdo podle nějakých pravidel předpočítá hashe právě pro vaše heslo, byť odnikud neuniklo. Můžete se jen pokusit o to, aby se to pravděpodobně nestalo v dohledné době.