Jak si vytvořit bezpečné heslo

Nedávno někdo postoval na Twitter screenshot z nějakého bankovnictví, který zachycoval doporučení toho, jak si vytvořit bezpečné heslo. Byly tam pochopitelně takové ty věci jako minimálně 8 znaků, velká/malá písmena, že musí obsahovat číslice, speciální znaky, nesmí být podobné předchozím heslům, musí obsahovat hieroglyfy, krev panen, odvar z mandragory, název všech hudebních alb Queen a tak dále. Tweet zde:

Reagoval jsem na to retweetem, kde jsem podotkl, že tyhle rady jsou outdated. Prostě je to staré, už to v dnešní době neplatí a bylo to relevant tak možná dvacet let zpátky. Někteří na můj tweet reagovali údivem, překvapením, ptali se, jak se tady tvoří heslo a co mají dělat. Vznikla tam i malá diskuze, kde si někteří začali dávat rady, které ovšem byly také malinko outdated.

Mně připadá, že spoustu lidí má pořád tak trochu guláš v tom jak hesla fungují a jakou metodou by si je měli vytvořit. A protože mě to frustruje, rozhodl jsem se o tom něco málo napsat. Plus, už je na čase, abych na svým blogu psal i nějaký užitečnější texty, ne jen nadávání na všechno kolem.

Pozor! Outdated!

Pojďme si ale vysvětlit, proč některé rady, jak si vytvořit bezpečné heslo už dnes neplatí. Takže… Dejme tomu, že chcete, aby vaše heslo bylo “mandragora”, neboť se vám tohle slovo líbí. Ale protože chcete, aby tohle heslo bylo bezpečné, je nutné střídat velká/malá písmena, čísla a speciální znaky. Co tedy uděláte? Hmm, nejspíše něco jako:

Mandragora1*

Je tohle heslo bezpečnější, než “mandragora”? Protože je tam jedno velké písmeno a číslo a speciální znak v podobě hvězdičky? Pravda je taková, že VŮBEC. Je to heslo úplně na hovno. A proč?

Jak prolomit heslo

Představte si situaci. Zaregistrujete se na nějakým českým e-shopu, abyste si něco koupili. A pár měsíců na to vám e-shop pošle email, že si máte změnit heslo. A to z toho důvodu, že jim unikla databáze účtů včetně hesel.

To znamená, že nějaký hacker se jim naboural do severu a stáhl si hesla uživatelů. Znamená to ale, že ta hesla má v normální textové podobě (tzv. plaintext)? Naštěstí ne, protože v dnešní době je běžné mít ta hesla zašifrovaná (v našem případě tzv. zahashovaná).

Hacker má teda zahashovanou databázi hesel. On je však může rozhashovat a získat jejich textovou podobu. Jak na to?

Bruteforce metoda…?

Možná jste někdy slyšeli o bruteforce metodě. To je metoda, kdy prostě zkoušíte zadávat různé věci tak dlouho, dokud heslo neuhádnete. Tj. postupně zadáte třeba čísla (0, 1, 2, 3, 4, 5, 6, 7, 8, 9), pak písmena (a, b, c, d…) pak jejich různé kombinace (aa, bb, cc, 00, 11, 22), a tak dále.

Jak dlouho trvá rozšifrovat heslo bruteforce metodou? Inu, to záleží na mnoho faktorech (jak složité je heslo, jak výkonný je počítač, který se ho snaží prolomit, jak složitý je hash a tak dále), ale obvykle takové prolomení trvá miliony let.

Počkat, miliony let? Vážně? Tak v tom případě je moje heslo bezpečné, ne? Kde je problém?

Probléme je v tom, že bruteforce nikdo nepoužívá. Alespoň ne absolutní bruteforce, kdy necháte program zadávat úplně všechno možné i nemožné.

Můžete však omezit věci, které budete dosazovat. Například vy víte, že heslo je 7 znaků dlouhé, takže nemusíte zkoušet všechny kombinace, ale jen ty sedmiznakové. Nebo víte, že heslo může být vlastní jméno, čili můžete nastavit, že chcete zadávat jen vlastní jména.

Na základě takové úvahy vznikla tak trochu vylepšená bruteforce metoda. Jaká? No, přece…

Slovníkový útok (dictionary attack)

Dejme tedy tomu, že hacker má zahashovanou databázi hesel a chce ji převést do textové podoby, ale zároveň nechce jen tak nechat frčet bruteforce. První věc, kterou udělá je, že si pořídí nějaký hodně výkonný počítač, který je schopný dosazovat různá hesla extrémně rychle. Ideálně nějakou stanici, kde bude řada grafických karet (GPU), třeba něco takového:

Stanice s hromadou GPU

Do téhle stanice hodí onu ukradenou zahashovanou databázi a rozhodne se, že tam spustí třeba prográmek jménem Hashcat. Ale co dál?

Dobrý způsob je slovníkový útok. To znamená, že nenecháte frčet bruteforce na prázdno, ale omezíte hledání jen na nějaký konkrétní seznam slov. Můžete si tedy stáhnout nějaký libovolný wordlist (wordlist anglických slov, českých slov, běžných osobních jmen, měst a tak dále).

Budete mít teda wordlist s českými jmény. A tak algoritmus bude zkoušet jména (Anička, Petr, Tomáš, Jiří, atd…) a to není všechno. Pochopitelně bude zkoušet jejich různé kombinace a formy. Čili bude zkoušet třeba “anička” a taky “Anička” a taky “Anicka” bez háčku. Možná i s čísly (Anička1, Anička11, 1Anička) a možná i se speciálními znaky (Anička*, Anička+). Těch kombinací je tolik, že je to na dost dlouho, ale je to výrazně menší voser, než zkoušet prostě úplně všechno. A navíc to přeskočí kombinace, které jsou vysoce nepravděpodobné, že by je někdo použil jako heslo, např. “111111111” apod.

A tady je přesně ten bod, kdy heslo jako “Mandragora1*” nemá moc šanci. Do pár hodin, možná do pár dní, možná do týdne… bude prolomeno. Smůla!

Mimochodem, hodně lidí pořád sdílí tenhle obrázek:

Obrázek tvrdí, jak heslo “correcthorsebatterystable” je dostatečně bezpečné a také jednoduše zapamatovatelné.

zdroj: https://xkcd.com/936/

Proč i tahle rada je malinko outdated už je z toho, co jsem psal celkem jasný. Slovníkový útok s wordlistem běžných anglických slov se dřív nebo později k takové kombinaci může dostat. Znám případy, kdy se kupříkladu podařilo rozšifrovat heslo “kobylamámalýbok”. Je to sice dlouhý heslo, ale z pohledu wordlistů běžných českých slov je celkem jednoduché. Čtyři anglická nebo česká slova je prostě málo. Možná tak šest a více slov.

Mimochodem, wordlist může obsahovat také přímo hesla. No fakt! Pokud v minulosti už někdo rozšifroval nějakou databázi hesel, není důvod z těch hesel nevytvořit další wordlist pro budoucí prolamování Hashcat. Je velmi pravděpodobné, že to, co lidi jako hesla používají dnes, budou používat i zítra.

No, a když ten hacker nakonec moje heslo získá, co s tím udělá?

Možná vás zajímá, co se stane, když hacker získá vaše heslo. Co s tím vlastně udělá? Inu, on nebude zkoušet postupně, jestli funguje na Gmailu a na Yahoo a na Amazonu ručně, ale bude mít nějaký script, který ho rychle prožene nějakou velkou databází webů a vyplivne mu ty, kde bude mít shodu.

Podobně třeba funguje prográmek jménem Sherlock:

https://github.com/sherlock-project/sherlock

Kupříkladu mé mamince se stalo, že jí došel email, který obsahovat její celé jméno, příjmení, domovní adresu a telefonní číslo. Email tvrdil, že dluží peníze a musí zadat číslo karty, plus odkaz na nějaký formulář, kde se to číslo karty má vypsat.

Sice je to laciný phisingový útok a moje maminka si uvědomila, že je to kokotina, ale pro celou řadu lidí to může být celkem legit vypadající email. Vaše babička by jim tam třeba číslo karty i s CVV vyplnila.

Ale i bez vyplnění je to průser. Znamená to, že naše osobní data už visí někde v nějaké databázi na darkwebu, kde si ji může kdokoliv koupit. A už to nejde vzít zpátky. Z více takových databází se dá vytvořit nějaká velká combo databáze, která je velmi cenná.

Tak jako tak, způsobů, jak se dá zneužít vaše heslo je hodně. Aby ho někdo měl je něco, co rozhodně nechcete.

Je dost možný, že už nějaké vaše heslo někde v nějaké databázi uniklých hesel je. Můžete si to ověřit na známém webu:

https://haveibeenpwned.com/

Tak tedy ještě jednou… Jak si vytvořit bezpečné heslo?

Inu, prvním krokem je… nevymýšlet žádná hesla. Spoustu lidí pořád žije v představě, že si musí heslo vymýšlet oni. Nikoliv! Cokoliv člověk vymyslí je blbý, předvídatelný a na nic. Lidský mozek neumí pracovat s reálnou entropií.

Je nutné, aby vaše heslo vygeneroval počítač.

Jak moc je heslo bezpečné záleží na tom, jakou velkou má entropii a ta se měří v bitech.

Takže heslo “ahoj” má 13 bitů. Nuda. Heslo “12345” má 6 bitů. Heslo “Mandragora1*” má 61 bitů (hele, nakonec to není tak špatný), no a pak je tu třeba heslo: “nf852f[}84ral16e6ixg”, který má 104 bitů. Prostě čím víc bitů, tím menší šance ho prolomit.

Simple!

Správce hesel

Dobré je použít správce hesel. Nejenže si tam můžete heslo nechat vygenerovat, ale také rovnou uložit a celkově vytvořit něco jako velkou databázi hesel, kde si je přehledně roztřídíte do složek a můžete v nich vyhledávat a tak dále… Šikovná věcička.

Bohužel se často setkávám s tím, že hodně lidí má ke správcům hesel nedůvěru. Říkají: „počkej a není to extrémně nebezpečné mít všechna hesla na jednom místě?“ a „Stejně si budu muset vymyslet nějaký heslo pro správce hesel!“ a také „Je dobré svěřovat svoje hesla nějaké firmě jako je LastPass?“

Netřeba se bát. Za prvé, je určitě bezpečnější mít hesla ve správci hesel, než používat po celém internetu jen jedno heslo.

Za druhé, správci hesel mají obvykle řadu různých bezpečnostních mechanismů. Ať už je to třeba 2FA, biometrie, notifikace v případě, že se někdo přihlásí z nového zařízení, log posledních přístupů, včetně IP adres a tak dále.

Pokud nevěříte společnostem jako LastPass, můžete použít nějaký offline správce hesel, jako je KeePass, kde vaše databáze hesel bude ve formě malinkého souboru. Ten můžete mít v PC a zálohovat si ho třeba na flashku a externí harddisk. Navíc těch databází lze vytvořit kolik potřebujete, takže není problém mít dabatázi důležitých loginů, méně důležitých loginů a tak dále.

Pak je tu třeba zajímavý správce hesel Bitwarden, který je open-source, čili je o něm známo, že nesbírá vaše data a nedělá nic podezřelého (kromě toho si každý rok Bitwarden nechává zaplatit nezávislý audit svých zdrojových kódů). Pokud mu ale i tak nedůvěřujete, můžete si ho rozjet na vlastním serveru (tzv. self-hosted), kde ho budete mít stoprocentně pod kontrolou.

Dobré je, že Bitwarden umožňuje synchronizaci mezi zařízeními, čili k heslům se dostanete ze všech vašich počítačů a z mobilu a tak dále. Možná si říkáte, že takové synchronizace není úplně bezpečná, protože to posílá data sem a tam…

Upřímně, i ten off-line KeePass soubor si pak budete muset nahrát třeba do mobilu, abyste se dostali k vašim emailům a do banky a tak dále. Nakonec stejně budete nějakou synchronizaci potřebovat.

Pochopitelně kdybych byl třeba celosvětově hledaný terorista, asi bych Bitwarden nepoužíval a raději měl offline KeePass soubor, ideálně v počítači, který by byl rovněž naprosto offline, ale protože terorista nejsem, je pro mě pohodlné používat Bitwarden a synchronizovat si ho mezi mobilem a PC. Stejně je to všechno šifrované.

Jak si vytvořit Master-password

Díky správci hesel si nemusíte pamatovat tisíce hesel, ale stačí jen jedno, které vám chrání ta všechna ostatní. Ale protože je tohle hlavní heslo (tzv. master-password) hodně důležité si vymyslet nějaké hodně složité, ale zároveň takové, abyste ho nezapomněli, protože pak budete navždy v prdeli.

Prvním krokem je nepoužívat password, tedy heslo, ale spíše několik slov (tzv. pass phrase). Jak doporučoval obrázek výše použít heslo “correcthorsebatterystable”, tak takový heslo je spíše passphrase, než heslo.

A ano, tady jsme na dobré cestě. Vím, že jsem před tím psal, že to není dobrý heslo, ale má k tomu blízko.

Existuje metoda tvorby passphrases za pomocí tzv. diceware. Diceware je obrovská databáze slov a každé slovo má svoje číslo. Stačí vzít do ruky kostku a hodit s ní pětkrát. Padne vám jednička, šestka, šestka, šestka a zase jednička. V databázi najdete, že číslo 16661 odpovídá slovo clay (anglicky “hlína”)

16661 clay

Super, máte první slovo clay. Tak to můžete zopakovat třeba ještě sedmkrát a dostanete třeba frázi:

ClayFlameAmbianceDistractRemovalDemiseSimilarly

A hle, to může být vaše passprase. K tomu ještě přidejte nějaký číslo a máte super heslo, které neprolomí ani slovníková metoda (možná za milion let, protože je to hodně slov).

(Tak jako tak je malá šance, že by se někomu podařilo ukrást hesla Bitwardenu. A pokud jo, tak jsou stejně zahashovaná přes bcrypt, který ještě obsahuje tzv. salt a navíc uměle prodlužuje dobu zadávání dotazů. Tj. Hashcat zadá třeba heslo “12345” a pak chce zkusit “12346” ale mezi dotazy musí udělat menší pauzu, což ve výsledku vede k tomu, že hesla budete dešifrovat miliony let.)

A pokud se vám s nechce blbnout s kostkou, i passphrase s diceware metodou jde pochopitelně vygenerovat počítačem. Třeba zase ve správci hesel.

Zpět ale k vaší passphrase, kterou jste si vytvořili…

Jak si tuhle passphrase zapamatuji?

No to je snadný, stačí si ho někam napsat na papír. He he, já vím, já vím… Vždycky vám říkali, že si hesla nemáte psát na papír. Říkali vám, že je to hrozně hloupé a nezodpovědné. A ano, pokud budete mít na monitoru přilepený lísteček z vaším heslem třeba v open-space kanceláři, tak to úplně dobrý nápad není.

Ale rozhodně není na škodu si poznamenat vaše master-password někam do sešitu. Hacker se vám bude snažit nabourat účty spíše přes net, než že by se vám pokoušel vloupat do domu. Pokud se ale bojíte, není problém to heslo nějak zašifrovat (např. si napsat někam jednu část hesla a někam jinam tu druhou). Případně si můžete tenhle sešitek zamknou do trezoru…

Samozřejmě hodně záleží na tom, jaký je váš threat-model.

Takže, doufám, že jste se dozvěděli něco zajímavého a to je pro dnešek všechno. Možná jsem některý věci řekl blbě nebo nepřesně, tak mi klidně dejte vědět, pokud jste větší odborníci, než já.

Leave a Reply

Your email address will not be published.