Co je silné heslo rubrika: Programování: Jiné
Rád bych možná znovu na tomto místě rozproudil diskusi o síle hesla.
Proč i tento web má naprosto nesmyslně zavednou povinnost na "hnusné" znaky v hesle? Čeho se tím dosáhne? Nikdy jsem tenhle nesmysl nechápal, vždyť přeci přidání pár znaků do sady zvedne složitost hesla jen minimálně. A navíc kdo by se snažil brute-forcem prolomit heslo na web? Copak už někdy někdo takový úrok dělal? A pokud bude dělat brute-force útok tak spíše na od-hashování ukradených hashů a tam je celkem fuk jaká byla sada znaků spíš jde o délku hesla ne?
Opravdu by mě zajímalo jestli mi něco uniká a tato ptákovina má nějaký reálný důvod.
Silné heslo je takové, které člověk nevymyslí hlavou a ani si ho hlavou nedokáže zapamatovat :-) Hlava totiž není na vymýšlení ani na pamatování hesel dobrý nástroj.
K odpovědi na otázku, co je vlastně silné heslo, budu potřebovat zajít trochu do detailů, ale klidně přeskočte na poslední odstavec.
Dnes se crackují i dlouhá hesla i věty ("passphrase"), některé i během pár desítek vteřin. Jsou to většinou offline útoky, tedy když někdo zkouší crackovat databázi hashovaných hesel, kterou nějak získal. O výsledcích online útoků, když se někdo snaží hesla opravdu zadávat do formuláře, se moc často bohužel nedozvídáme, z pochopitelných důvodů - je to tak trochu za hranicí. Kromě toho online útoky se dají více či méně úspěšně blokovat, ať už umělým prodloužením času po X pokusech o přihlášení, captchou nebo zablokováním (ani jedno není dobré dělat po 3 špatných pokusech, třikrát špatně napsat kvalitní heslo se povede celkem často, lépe to dělat po desítkách pokusů, to je pořád dostatečně málo na online útok).
Podívejte se, jaká cracknutá hesla a "passphrase" postují Twitter účty CrackTheHash a UNIQPASS. Crackeři mají ve slovnících všechno. Jak již bylo zmíněno, bylo crackuto i heslo "Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn", někdo ho měl ve slovníku, protože je uvedeno v tomhle článku na Wikipedii. Jsou crackeři, kteří stahují IMDB a dělají z toho slovník, který má po zabalení 190 MB v .7z. Hmm, IMDB a co takhle slovník postavený z Wikipedie (po zabalení 700 MB .7z)? Nebo snad geografické názvy (po zabalení přes 700MB .7z)? Nebo chcete slovník, ve kterým je toho fakt hodně (po zabalení gzipem to má 4.2G)? Co není ve slovníku, tak se dopočítá hybridním útokem, tedy takovým, který bere základ ze slovníku, ale hrubou silou k němu přidává různé další kombinace znaků apod. Takže i kdyby heslo opravdu nebylo v žádném slovníku, tak o něm nelze říct, že je silné. Pokud chcete vědět jak a proč vytvářet silná hesla, podívejte se na moji přednášku o zapomínání hesel :-)
Na počtu kombinací pro brute-force útok už taky tolik nezáleží, díky únikům milionů hesel v plaintextu víme, jak uživatelé hesla vytvářejí. Když pravidla pro tvorbu hesla zní: "Min. 6 znaků, musí obsahovat jedno velké písmeno a číslici", uživatelé většinou vytvoří heslo s prvním písmenem velkým a číslicí na konci, např. Heslo2. Pro získání většiny hashů není třeba procházet všechny kombinace a lze použít hybridní útoky, o kterých píšu v předchozím odstavci.
Crackují se všechny algoritmy, jen u některých to jde rychleji, u některých pomaleji, koukněte třeba na benchmark stroje s 8x R9 290X GPU (PDF). Některé algoritmy se crackují i na něčem jiném, než jsou GPU, viz Energy-efficient bcrypt cracking (PDF).
Hesla v l33t sp34ku taky nejsou problém, crackují se. Jsou nástroje, jako třeba hashcat, kterým jde říct, že se A zapisuje jako A nebo @ nebo 4, takové konverzní tabulky jsou pak přímo v distribučním balíku hashcatu.
Správně zvolený algoritmus pro ukládání hesel je základ, ale útoky hrubou silou, slovníkové i hybridní útoky se dají dělat proti jakémukoliv algoritmu použitému k ukládání hesel. Jen v případě použití některých algoritmů to trvá příliš dlouho. Dá se to "pojistit" např. tak. že výsledné hashe zašifrujeme symetrickou šifrou (šifrujeme hashe, ne hesla), útočník pak kromě samotné databáze musí získat i šifrovací klíč a to nebývá tak obvyklé. A když se mu to podaří a hashe rozšifruje, tak pořád má před sebou správně zahashovaná hesla, třeba bcryptem. Takto jsme to vyřešili na Slevomatu, moje heslo tak, jak je uloženo v produkční databázi Slevomatu najdete na jednom z mých slajdů z přednášky Jak jsme zlepšili zabezpečení Slevomatu.
Sorry, už je toho textu hodně, ale chtěl jsem napsat všechno, co mě přivede k odpovědi na otázku, co je vlastně silné heslo. Je to tedy heslo, které je dostatečně dlouhé (12 a více znaků), má všechny možné znaky včetně mezer, není napsáno nikde na webu, ani v žádné knížce a není použito ani v žádném filmu, není ani podobné takovým heslům a není z něj ani odvozeno, není použito k žádnému jinému uživatelskému účtu a je správně uloženo v databázi aplikace a uživatel ho nevymyslel hlavou ani si ho nepamatuje (a to vlastně plyne z předchozích požadavků). Napsat validátor pro hesla podle takových pravidel je nemožné, takže se to autoři aplikací snaží aspoň trochu suplovat nějakými pravidly, ta se ale mohou otočit proti nim. Počítat samotnou entropii hesla také nestačí, do ní se nepočítají všechny uvedené faktory, které dělají silné heslo silným. Heslo "H3sl0" je tedy silnější, než "heslo", a slabší, než "omni-directional antenna", ale všechna stojí za stejně silný prd.
Komentáře
- pepa.lobotka : whoa! díky Spazi ;) — 12.7.2014
- Anonym : Jen k GPU po úpravě biosu a vylazení taktů (ne přetaktování ale poměru mezi core x mem) jde získat zrychlení i kolem 20% (otestováno pro scrypt). Samozřejmě to záleží na algoritmu a vylazené biosy se objevují s určitým odstupem od vydání gpu ale je to v řádů měsíců :). — 18.7.2014
- spazef0rze : mishak: Pěkné! Měl bys pro mě link na nějaký info, prosím? Dík! — 19.7.2014
Pro zobrazení všech 7 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře