© 2013 All rights reserved.
0

MHASH_SHA1

SHA-1 je součástí několika funkcí pro kódování a dekódování dat SHA (Secure Hash Algorithm). Konkrétně SHA-1 má velké využití v různých populárních aplikacích a protokolech, jako je například: TLS, SSL, SSH, IPSEC, .. a je považována za následníka MD5. Všechny SHA algoritmy byli navrženy státní bezpečností agenturou NSA a publikovány jako US státní normy.

První z velké rodiny SHA byla funkce SHA-0, publikovaná v roce 1993. Funkce nebyla bezpečná. Proto vznikla funkce SHA-1, která je její opravenou verzí.

Jak SHA-1 pracuje?

Vstupem funkce je zase řetězec, ze kterého chceme dostat hash (otisk). Jedná se o bitový řetězec, který musíme zase upravit na požadovanou délku, stejně jako u MD5. Na konec řetězce se v tomto případě přidá jedna jednička a tolik nul, aby výsledek dával po vydělení číslem 512 zbytek 448. Poté je na konec přidána ještě délka původní zprávy ve formě 64 bitového čísla.

Po všech těchto operacích můžeme výsledný řetězec rozdělit na bloky o velikosti 512 bitů. Bloky si označíme M1, M2, …Mn.

Nyní, když máme vše připraveno, nadefinujeme si 80 pomocných funkcí Fj pro j = 0 až j = 79, které budeme později aplikovat. Každá funkce má tři vstupní parametry a používá standartní bitové operace: AND, OR, NOT, XOR.

Funkce vypadají následně:

Další věc, kterou potřebujeme jsou konstanty. Tyto si musíme taky vygenerovat a jsou to 32 – bitová čísla. Poslední věc, kterou potřebujeme je pomocná funkce, která způsobuje rotaci:

Pro samotný výpočet potřebujeme další pomocné proměnné (všechno jsou to 32 – bitová čísla). U každého bloku potom provedeme samostatně výpočet.

Výsledkem celého algoritmu je 160-ti bitový řetězec.

Bohužel i tato funkce byla prolomena (byla nalezena kolize). Čínský tým odborníků na bezpečnost nalezl algoritmus pro nalezení takového kolizního řetězce. K nalezení řetězce stačí bohužel jenom 2^80 operací.

Pokud bychom chtěli porovnat MD5 a SHA-1, je SHA-1 je asi o 25% náročnější na výpočet než MD5 a jejich porovnání rychlosti si můžete provést i samy. Můžeme je porovnat skriptem, ve kterém provedeme v cyklu několik měření a budeme stopovat čas, který bude celá operace trvat:

Takové měření není sice moc objektivní, ale pro naše porovnání bude stačit.

Měříme dobu, za kterou zvládne server vytvořit Hash Value pro 20 000 různých řetězců. Tuto dobu vždy stopujeme a celou operaci provedeme zase 200 krát za sebou a jako výsledek zobrazíme průměrnou hodnotu všech měření, aby bylo měření přeci jenom objektivnější.

Pokud skript tedy spustíte pod localhostem, dostaneme na výstup hodnotu v podobě výsledných sekund. V případě měření pro hash MD5 jsem dostal výsledek 0.199800729752 sekundy.

Pro měření SHA-1 jsme nuceni změnit řádek s hashovací funkcí a nahradit funkcí MD5 za SHA-1:

Jako výsledek jsem dostal v tomto případě 0.234947919846 sekund, což je o 0.035 sekundy více.

Pro objektivnější měření by bylo potřeba udělat více měření po sobě a tyto výsledky navzájem zprůměrovat. Pro náš účel, abychom dokázali, že je SHA-1 pomalejší to ovšem stačí.

Louskání hesla

Pokud chce prolomit hash hesla vytvořeného funkcí SHA-1 máte v podstatě stejné možnosti jako u MD5, tedy použití programu Cain&Abel (nebo jiného podobného programu) za použití Brute Force Attacku. Nevýhoda ale spočívá hlavně ve výpočetním výkonu, který bude muset být oproti MD5 vyšší.

Toto můžeme třeba porovnat s příkladem, který jsme si uváděli u hashovací funkce MD5.
Zkoušeli jsme pomocí Caina cracknout slovo „heslo“, z nějž byl vytvořený hash právě pomocí MD5. Odhadovaná doba byla v tomto případě 13 minut a rychlost rychlostí 2 748 622 hesel za sekundu.

Pokud bychom namísto toho vytvořili hash slova „heslo“ pomocí hashovací funkce SHA-1 a zkoušeli jej na stejném stroji se stejným nastavením pomocí Caina cracknout, dostaneme zaručeně vyšší čísla.

Odhadovaná doba, než projde všechny kombinace zadaných znaků se zvedla z 13 minut na téměř 25 minut a rychlost testovaní klesla z rychlostí 2 748 622 na 1 441 011 hesel za sekundu – tedy téměř polovinu.

cain abel sha

Určitě dospějete k názoru, že tento nárůst je hodně velký a u delšího hesla není tato možnost už vůbec použitelná.

Naštěstí máme zase několik dalších možností: ať už použití Dictionary-Attace (testujeme hesla z předem vytvořeného Wordlistu) nebo použití Rainbow Tables.

Ano, právě Rainbow Tables (předvypočtené tabulky) jsou k prolomení hesel SHA-1 ideální. Na tento útok zase můžete využít program Cain&Abel, který zvládá i tento druh útoku, nebo si můžeme pomocí vlastní tabulky heslo najít.

Bohužel sehnat použitelnou tabulku není zase až tak jednoduché, jak by se mohlo zdát, naštěstí nám nic nebrání si takovou tabulku vytvořit. Na internetu můžeme o tomto druhu útoku sehnat spoustu informací pod označením Project RaibowCrack, který se tímto druhem útoku zabývá. Na internetových stránkách tohoto projektu (http://rainbowcrack.com/) je k dispozici ke stažení několik verzí aplikace RainbowCrack, která nám umožní si vytvořit takovou tabulku (http://rainbowcrack.com/download).

V současné době je nejaktuálnější verze pro platformu win32 – rainbowcrack-1.2a-win, která má podporu pro spoustu algoritmů: LM, NTLM, MD2, MD4, MD5, SHA1, RIPEMD-160, MySQL v.3.23, MySQL SHA1, Cisco PIX.

Bohužel generování tabulek není takté otázka na pár okamžiků, ale většinou několik hodin, nebo dní. Výsledek se naštěstí projeví potom při lámání hashe hesla, které zabere třeba několik vteřin. Další výhoda je podpora tabulek v řadě aplikací, takže jednou vytvořenou tabulku budete moci používat v různých programech.

V příštím článku se podíváme na MHASH_CRC32.

Comments are closed for this page

About
Hi, i am programmer from the Czech Republic. I love web development (Ruby, Ruby on Rails, PHP, Nette) and iOS development (Objective-C, Cocoa).
To cooperate, here is my phone:
+420 608 836