Typ hesla, které byste měli vytvořit, hodně souvisí s tím, jak je heslo uloženo.
Před lety byla osmimístná náhodná hesla složená z velkých a malých písmen, symbolů a čísel opravdu těžké prolomit. V některých případech trvalo prolomení takového hesla roky.
Díky dnešní měnící se technice a půjčovatelným strojům se tato doba zkrátila na hodiny. Ale jak jsou tato hesla vůbec uložena?
Jak jsou hesla uložena online
Systémy neukládají uživatelská hesla přímo do souborů nebo databází, protože útočníci mohou převzít databázi, kde systémy hesla uchovávají. Místo toho systémy šifrují uživatelská hesla a útočníci narazí na zašifrovanou verzi každého hesla.
Existují některé algoritmy, které systémy používají k šifrování hesel. Jedním z těchto algoritmů je symetrický algoritmus. Symetrický algoritmus je druh šifrování kde můžete použít stejný klíč pro šifrování i dešifrování. Klíč, který použijete k šifrování dat, je stejný pro šifrování i dešifrování. Bezpečnost symetrických algoritmů s sebou nese určitá rizika, protože pro dešifrování existuje pouze jeden klíč. Z tohoto důvodu systémy obecně nepoužívají symetrické algoritmy pro šifrování hesel.
Obecně je metodou, kterou systémy používají pro šifrování, hashovací algoritmy. Hashovací algoritmy slouží k ověřování a reprezentaci integrity dat, nikoli k šifrování dat. Hashovací algoritmy převádějí data na hash pevné velikosti. Tyto hash obvykle představují jedinečný hash dat.
Díky hashovacímu algoritmu, pokud útočník převezme databázi hesel, útočník se odtud zpětně nedostane k heslu. Zde je velmi důležitá nuance, které byste měli věnovat pozornost. Teoreticky může útočník, který kompromituje systém, který používá stejný hash algoritmus pro všechny kombinace hesel, porovnat získané výsledky. Pokud útočník v důsledku těchto srovnání vytvoří stejnou hodnotu, útočník zjistil, jaká je otevřená verze hesla. Tato metoda je celá o pokusu a omylu a tato forma útoku je obecně nazývaný útok hrubou silou.
Na začátku roku 2000 mohlo trvat stovky let, než jsme vyzkoušeli všechny kombinace pro 8znaková hesla zašifrovaná populárními hashovacími algoritmy. To samozřejmě nezahrnuje velmi jednoduché kombinace jako "123456" nebo "moje heslo" v této sadě. S rozvojem dnešních softwarových a hardwarových technologií se hodně změnil i způsob prolamování hesel.
Vliv vznikajících GPU
Možnosti paralelního zpracování dat grafických procesorů (GPU) se postupem času zlepšily. GPU nejsou schopny provádět všestranné operace jako univerzální CPU. Takže i když existují tolik jader a paralelní výpočetní výkon, nemá smysl je používat pro téměř každý problém, jako je PROCESOR.
Přesto je možné na GPU poměrně efektivně provádět některé hashovací algoritmy používané pro hesla. Vyčíslitelné hodnoty hash za sekundu, kterých můžete dosáhnout s tradičními CPU, se s novými platformami GPU ohromně rozrostly.
Chcete-li získat představu, prozkoumejte hashovací čísla za sekundu u hashovacích algoritmů, jako jsou NTLM, MD5 a SHA1 v tabulce níže. Prozatím stačí vědět, že tyto algoritmy jsou jen hashovací algoritmy. K vytvoření této tabulky jsem použil clusterový systém skládající se z 25 GPU AMD Radeon.
Algoritmus |
Hashování za sekundu |
NTLM |
350.000.000.000 |
MD5 |
180.000.000.000 |
SHA1 |
63.000.000.000 |
Krypta SHA512 |
364.000 |
Bcrypt |
71.000 |
Scrypt |
33.000 |
Jak vidíte, s takovým systémem můžete generovat NTLM hashe 350 miliardkrát za sekundu. To znamená, že můžete vyzkoušet všechny kombinace 8znakového hesla za méně než 6 hodin. Navíc hardware v tomto příkladu patří před lety. Představte si dnešní sílu prolomení hesel.
Co by měli vývojáři softwaru dělat?
Cesta, kterou by se programátoři měli ubírat, je poměrně jednoduchá: měli by upřednostňovat algoritmy, kterým při šifrování hesel trvá výpočet hash hodnot déle. Vývojáři se musí dozvědět nejen o výkonu algoritmu, který používají na CPU, ale také o tom, jak odolný je vůči světu GPU.
Pokud vývojáři pracují se softwarovým rámcem, který také řeší procesy šifrování hesel, jako je Django, Ruby on Rails a Spring Security by měli zkontrolovat, zda byla v rámci tohoto rámce učiněna správná rozhodnutí bezpečnostní.
Například, Vymyslet, jedna z nejpoužívanějších knihoven pro uživatelské operace v Ruby on Rails, používá Bcrypt jako výchozí hashovací algoritmus. Umožňuje také použít jinou metodu jako hashovací algoritmus. Algoritmus Bcrypt je spolehlivý, protože stále trvá velmi dlouho, než se GPU zlomí.
Stručně řečeno, čím déle výpočet hash hodnoty trvá, tím jste bezpečnější.
Kolik znaků by mělo mít vaše heslo?
Každý další znak, který použijete, geometricky zvýší počet pokusů a omylů potřebných k prolomení vašeho hesla a zvýší bezpečnost vašeho hesla.
Zvažme tuto situaci prostřednictvím dvou různých scénářů. Zvažte hodnoty v tabulce výše pro hashovací algoritmus NTLM a představte si, že se pokusíte prolomit heslo. Představte si, že cílíte na hesla s osmi nebo více znaky.
Počet znaků |
Velká/malá písmena a čísla |
Velká/malá písmena, čísla a speciální symboly |
8 |
méně než 1 minuta |
2 minuty |
9 |
2 minuty |
2 hodiny |
10 |
2 hodiny |
1 týden |
11 |
6 dní |
2 roky |
12 |
1 rok |
200 let |
13 |
více než 100 let |
více než 1000 let |
Když si prohlédnete tabulku, uvidíte, že použití minimálně 12místného hesla je bezpečné, když použijete všechny kombinace velkých/malých písmen, číslic a speciálních symbolů. Pokud nepoužíváte speciální symboly, ukázalo se, že jako bezpečnou délku hesla musíte použít 13 znaků. Pokud byste v tomto systému místo NTLM hash použili metodu Bcrypt hash, stačilo by 8 znaků. Nemáte však možnost vědět, jakou hashovací metodou systém, do kterého zadáte přes web, uchovává vaše heslo. Proto byste měli zvážit všechny možnosti.
Hlavním problémem pro vývojáře softwaru je, že je téměř nemožné přesvědčit uživatele, aby měli heslo o minimální délce 12 znaků. Dnes je možné říci, že míra používání hesla této délky je nízká. Podle scénáře použití vyvíjeného systému bude proto nutné najít střední cestu, která bude přijata uživateli zlepšit zabezpečení svých hesel.
posledním návrhem pro vývojáře je zkontrolovat nejen minimální délku, ale také maximální délku vstupů přicházejících přes formuláře, které jste uživateli předložili. Zvláště když povolíte použití pomalu vypočítatelného hashového algoritmu, jako je Bcrypt pro zabezpečení Pokud nezkontrolujete maximální délku zadaného hesla, můžete se setkat s určitými riziky uživatel. Útočníci mohou například provádět útoky tak, že zkoušejí desítky hesel o délce 100 tisíc znaků současně s některými speciálně připravenými požadavky. V takovém případě je vysoce pravděpodobné, že váš systém přestane reagovat na ostatní uživatele.
Rady pro koncové uživatele
Nastavte délku hesla na minimálně 12 znaků a ujistěte se, že obsahuje kombinace velkých a malých písmen, čísla a symboly. Nikdy nezapomeňte, že systémy, které uchovávají vaše heslo, mohou být hacknuty a vaše informace mohou být zneužity. Nemůžete vědět, které algoritmy systém používá k šifrování vašeho hesla, takže je zcela na vás, abyste přijali opatření a vytvořili silná hesla.