MD5 je veľmi často používaná funkcia na výpočet hashov.
Začiatočníci ho často používajú na heslovanie hesla, čo nie je dobrý nápad, pretože existuje mnoho spôsobov, ako získať pôvodné heslo.
V tomto článku sú opísané konkrétne metódy, ako to dosiahnuť.
Celé zabezpečenie je postavené na tom, že vyskúšanie všetkých hesiel trvá neúmerne dlho. No, malo by to tak byť. Problémom algoritmu md5()
je najmä to, že je to veľmi rýchla funkcia. Na bežnom počítači nie je problém vypočítať viac ako milión hashov za sekundu.
Ak heslo prelomíme postupným skúšaním kombinácií, ide o útok hrubou silou.
Existuje niekoľko stratégií:
Metód je oveľa viac, tento článok opisuje len tie najbežnejšie.
Všetky kombinácie písmen, číslic a iných znakov sa skúšajú postupne.
Vygenerované pokusy sa postupne hashujú a porovnávajú s pôvodným hashom.
Tak napríklad:
aaaaaaabaaacaaadaaaeaaaf...
Problém tohto útoku je v samotnom algoritme md5()
, ak by sme skúšali len malé písmená anglickej abecedy a čísla, vyskúšanie všetkých kombinácií na bežne dostupnom počítači by trvalo maximálne desiatky minút.
Preto je dôležité vyberať dlhé heslá, najlepšie náhodné a so špeciálnymi znakmi.
Ľudia si zvyčajne vyberajú slabé heslá, ktoré existujú v slovníku.
Ak využijeme túto skutočnosť, môžeme rýchlo vyradiť nepravdepodobné varianty ako 6w1SCq5cs
a namiesto toho hádať existujúce slová.
Okrem toho z predchádzajúcich únikov hesiel veľkých spoločností vieme, že používatelia si na začiatku hesla volia veľké písmeno a na konci číslo. Pozrime sa - má to aj vaše heslo? :)
Keďže jednému heslu vždy zodpovedá rovnaký hash, je ľahké prepočítať obrovskú databázu, v ktorej sa budú heslá hľadať ako prvé.
V skutočnosti je vyhľadávanie vždy rádovo rýchlejšie ako opakované prehľadávanie hashov.
Pri väčších únikoch údajov možno navyše heslá týmto spôsobom hashovať paralelne a rýchlo tak získať napríklad 10 % všetkých používateľských hesiel.
Dobrou databázou hesiel je napríklad Crack Station.
Mnohé jednoduché heslá sú známe priamo spoločnosti Google, pretože indexuje stránky, ktoré obsahujú heslá.
Ako prvú možnosť vždy používam Google. :)
Dirichletov princíp popisuje, že ak máme súbor hesiel, ktoré majú vždy 32 znakov, potom existujú aspoň 2 rôzne heslá s 33 znakmi (jedno dlhšie), ktoré generujú rovnaký hash.
V praxi nemá zmysel hľadať kolízie, ale niekedy si autor aplikácie sám uľahčí hádanie prepočítaním kolízií.
Napríklad:
$password = 'heslo';for ($i = 0; $i <= 1000; $i++) {$password = md5($password);}echo $password; // 1000x zahashované cez md5()
V tomto prípade má zmysel hádať skôr kolíziu ako pôvodný hash.
Na zdravie pri pečení!
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | sk