Dlouhá a složitá hesla jsou zlo a měla by vymřít, jojo…
Prý musíte mít v heslu velké písmeno, malé písmeno, číslici, speciální znak… je to kvůli VAŠEMU bezpečí, kreténi!
Okej, tak jaká je pravda? Jak se nejčastěji kompromituje váš přístup? Heslo nejčastěji:
- někomu řeknete,
- prozradíte ho,
- napíšete si ho na papírek vedle monitoru,
- odposlechne keylogger ve vašem počítači,
- někdo ho odposlechne po cestě,
- napíšete ho někam, kam ho napsat nemáte, třeba do podvrženého formuláře
- použijete stejné jako na nějaké službě, kde si ho uloží v plaintextu (to byste se možná divili, kde všude to tak mají),
- někdo sebere databázi z té služby a louskne hashe,
- nebo je v té aplikaci jiná díra.
Co z toho je ovlivnitelné složitostí hesla? Hmmmm… jo, louskání hashe. Zbytek je na komplexnosti hesla nezávislý; půlku z těch problémů si uděláte sami, druhou půlku vývojáři té aplikace. Po pravdě: s rostoucí složitostí hesla roste i pravděpodobnost, že si ho uživatel někam napíše, a já se v tomhle postavím za ně, na jejich stranu, a obviním vývojáře: Vy je k tomu nepřímo nutíte!
Možná vás to překvapí, ale u běžně používaných hashovacích metod ani tak nezáleží na tom, jestli tam máte jenom malá písmena, nebo malá i velká. Ono to trošku ovlivní, ale fakt jen trochu. Mnohem, mnohem víc (řádově!) ztíží rozlousknutí hesla jeho délka. Čtyři znaky jsou málo, pět znaků taky, osm znaků už je docela OK, deset znaků pro vaše použití stačí. Samozřejmě si nesmíte vybrat heslo „ze slovníku“.
Ale na druhou stranu: jsou jiné hashovací algoritmy, které jsou pomalé, takže u nich postupné zkoušení jednoho hesla po druhém stojí docela dost prostředků. Pro uživatele je OK, když se jeho přístup ověřuje sekundu, pro útočníka je test hesla trvající sekundu hodně, hodně pomalý. Tohle vy neovlivníte, ale ten chlapík, co to programuje, by to měl znát a používat.
A teď nepřekvapivá informace: Délku vašeho hesla může ovlivnit taky autor aplikace. Může totiž k vašemu heslu přidat klidně sto dalších znaků, čímž z vašeho pětiznakového hesla udělá heslo o délce 105. Cílenému útoku na váš účet to nezabrání, ale eliminuje to plošné prohnání deseti tisíc ukradených účtů přes rainbow tables… Zároveň by měl omezit počet přihlašovacích pokusů na rozumné malé číslo. A pokud to udělá, tak můžete – pozor, teď to přijde – použít klidně heslo jaké chcete. Klidně tři hvězdičky. Pokud útočník použije brute force, tak se k tomu nedostane, protože ho dřív automatika zablokuje, a pokud ukradne databázi, bude si generovat rainbow tables pro každého uživatele zvlášť, a za to mu vaše heslo do diskusního fóra nestojí. (U banky je to trošku jiné, ale i tam platí, že víc bezpečí dá třeba dvoufaktorové ověření.)
Takže co jsou všechny ty požadavky „Vaše heslo musí mít alespoň šest znaků, velké písmeno, číslici, speciální znak a symbol pro odchrchlání“ u kdejakého diskusního fóra majitelů škodovek stopětek? Jo, kokotina a pruzení uživatelů. Najmě když o kus dál dáte nesmysl jako je „nápověda v případě zapomenutí hesla“. A to nemluvím o požadavcích na změnu hesla co tři měsíce, a musí být jiné než všechna hesla, co jste do té doby použili, což tolik milují různí firemní IT, protože se to ve správě domény snadno nastaví a oni si připadají jako velcí bezpečnostní machři („Cože? Tys svým uživatelům nezapnul vynucenou změnu hesel? Co vlastně víš o bezpečnosti?!“) Tenhle přístup vede k čemu? No k tomu, že jsou uživatelé zpruzení a nakonec si svoje heslo pro toto čtvrtletí někam napíšou… Jo, dokonce už i Microsoft na to přišel – počtěte si třeba v jejich práci „Sbohem a nedík za externality: Racionální důvody odmítnutí bezpečnostních doporučení uživateli“ nebo třeba tady.
Gratuluju. Teď to všechno víte, takže jděte za vašimi firemními IT a řekněte jim to. A víte, co se dozvíte? Že ONI to takhle dělají a dělat budou a nezajímá je, co se děje, protože ve všech příručkách pro správce systémů (zejména v těch z let 1997-2003) se píše, že to tak je nejbezpečnější a basta fidli, neslyšíme na žádný argument, osm znaků a velká písmena co tři měsíce jiná!
Prožil jsem si to jak zevnitř, při jednání s interním IT, tak zvenčí, když se nějaký podředitel pro IT usmyslel vydat specifikaci bezpečnosti jejich partnerských webových aplikací. Netušil ani zbla o CSRF, o XSS, o hashování, to mu bylo úplně jedno, ale jediné, co striktně vyžadoval a na čem stála „bezpečnost aplikace“ (bez toho ji necertifikujeme!) bylo, že aplikace bude prudit uživatele s osmiznakovým heslem, velké + malé písmeno a jedna číslice!
A protože byl pán klasický korporátní inženýr, tak byla veškerá diskuse marná, a já si i za vás ulevuju aspoň tímhle článkem.
K tématu: XKCD a motto „Po dvaceti letech snažení jsme uživatele úspěšně naučili používat hesla, která si lidi těžko zapamatují, ale počítače je snadno uhodnou!“
PS, méně odlehčené a trochu vážnější ode mne a od Michala Špačka, protože jsou lidé, a v IT jsou spíš pravidlem, co berou všechno doslova: Berte tenhle text jako literární útvar, jako glosu, ne jako návod k implementaci bezpečnostních politik. Je určen pro uživatele, co bojují s nepružným IT oddělením, které po nich chce nesmysly. Při implementaci se řiďte něčím jiným, než jsou glosy na pochybných blozích a webové komiksy. Vážně: Rainbow tables profíci neužívají, umělé prodlužování hesel není v praxi moc dobrý nápad a vytvářet si hesla skládáním slov taky ne. Zcela vážně: Použijte password manager. Ten vytvoří heslo opravdu náhodné, na rozdíl od člověka, protože když člověku řeknete „Ne, v heslu musí být velké písmeno“, tak co udělá? No s největší pravděpodobností napíše velké to první písmeno! A tak dál. A z komiksu si prosím vezměte jen to motto, které je zatraceně pravdivé.