Hlavní navigace

Hash kódy bez tajností, nejen LinkedIn a ti další

Pavel Čepský

Hashovací funkce se poslední dobou staly populárním tématem, především kvůli ochraně hesel na serverech. Jaké jsou jejich úskalí a na co si dát pozor?

V minulých bezpečnostních komentářích jsme se věnovali kauze LinkedIn a heslům, která z ní byla odcizena. Připomeňme, že hackeři získali miliony hesel, samozřejmě však nikoliv přímo v otevřené podobě, ale jen formou odpovídajících otisků v podobě hash kódů. LinkedIn potvrdil, že se jedná o hashe korespondující s hesly uživatelských účtů v rámci této služby, postupně se útočníkům daří prolamovat jednotlivé hash kódy, které jsou součástí této databáze. Ještě doplňme, že útočníci si databázi s potenciálními hesly nenechali pro sebe, ale lze ji na webu získat.

Právě hash kódy i jejich použití v síťovém světě nacházejí velice široké uplatnění, a ačkoliv se ve velké míře uplatňují hlavně při kontrole integrity dat, jejich možnosti jsou mnohem širší. Jelikož se ne všichni uživatelé dostatečně orientují v hash kódech, jejich významu a silných či slabých stránkách, zaměří se dnešní pokračování pravidelných komentářů trochu atypicky právě na tuto oblast. I méně zkušeným uživatelům tak po jejich přečtení bude jasnější, proč jsou hash kódy skloňovány v různých pádech při rozmanitých příležitostech.

Při internetové komunikaci prostřednictvím různých cest může často dojít ke změně obsahu přenášených dat, ať už vinou zásahu třetí osoby nebo technickou chybou na trase. Aby si přijímající strana mohla zkontrolovat, zda data dorazila v pořádku, využívá se kromě jiného právě i hashovacích funkcí, díky nimž lze snadno vypočítat otisk dat (tedy hash kód). Hashovací funkce pro vstup libovolné délky vytvoří otisk pevné délky, takže nesejde na tom, jestli původní soubor má 1 kB nebo 100 MB, otisk bude v obou případech mít délku například 160 bitů. V praxi pak odesilatel kromě vlastního souboru vypočítá ještě odpovídající hash kód a příjemce porovná otisk obdrženého souboru s původním hash kódem. Jsou-li oba kódy shodné, soubor se přenesl v pořádku.

Podobně lze také hash kódů využít při porovnávání hesel. Pokud se uživatel přihlašuje, vypočítá se z jím zadaného hesla odpovídající otisk a ten se porovná s otiskem uloženým v databázi. V právě uvedeném případě by ale mohla nastat situace, kdy si dva uživatelé zvolí stejné heslo, a tedy také výsledné hashe budou stejné. Tomu se dá snadno zabránit takzvaným solením, při němž se otisky počítají z hesel doplněných o nějakou další hodnotu (sůl), takže i když dva uživatelé budou mít stejné heslo, odpovídající otisky budou odlišné. Kauza LinkedIn vyvolala diskuze také kvůli tomuto přístupu – hesla byla v databázi uložena pouze formou klasických hash kódů, tedy bez přidané soli.

Jedna z důležitých vlastností hashovacích funkcí již byla nepřímo představena, a sice malá velikost výsledného otisku, pohybující se v řádech desítek a stovek bitů (často používanými délkami jsou 128, 160 a 190 bitů). Další požadovanou vlastností je takzvaná jednosměrnost, což neznamená nic jiného, než že pro každý vstup musí jít odpovídající hash kód snadno spočítat, ale naopak z výsledného otisku nesmí být možné odvodit původní data. Zbývá ještě zmínit bezkoliznost, která zajišťuje, že pro různé vstupy budou vypočítány různé otisky (i drobné změně vstupu by měly odpovídat velké změny výsledného otisku).


Hashovací funkce mohou výborně posloužit při kontrole integrity dat

SHA po MD5

Pro vytvoření hash kódů v databázi hesle LinkedIn byl použit algoritmus SHA-1, tedy zástupce skupiny algoritmů pocházejících z dílen NSA (National Security Agency). První verze byla navržena roku 1993 a oficiálně nesla právě označení SHA. Později se však pro ni vžilo spíše označení SHA-0, aby nedošlo k záměně právě s jejím následníkem SHA-1. Rodina algoritmů SHA, tedy včetně SHA-1 využitého v rámci LinkedIn, patří mezi populární hashovací schémata, setkat se s nimi lze například i protokolech SSL, TLS, SSH apod.

Pro úplnost rámcové představy o funkcích SHA je dobré zmínit, že je považována za nástupce stařičkého MD5, který se stal oblíbeným terčem pokusů o útok. Právě na tento původní algoritmus byl nejprve zveřejněn například takzvaný čínský útok, poté následovaly další a nakonec se kryptologové shodli na tom, že v oblasti bezpečnosti není dobré MD5 v současné formě dále používat pro bezpečnostní aplikace.

Právě to je jedním z důvodů, proč již MD5 při silnějších požadavcích na bezpečnost nenachází uplatnění, naopak se stále výborně hodí pro vytváření kontrolních součtů v rámci ověření integrity dat. S vytlačením otisku MD5 z bezpečnostní scény přišlo větší rozšíření algoritmu SHA. LinkedIn tak nelze považovat za exotiku v podobě použití této funkce pro ukládání otisků hesel jednotlivých uživatelů, i když o tom některé příspěvky v tomto duchu hovoří.

Webová aplikace pro lámání LM hash kódů vám nabídne výsledek během pár okamžiků, postačí jen prohlížeč
Webová služba nabízející prolomení hesla do Windows XP na základě daného hash kódu

Paradoxní kolize

Jak se vlastně na hashovací funkce nejčastěji útočí, resp. prověřuje se jejich kvalita? Jedním z měřítek je schopnost současného vytvoření dvou rozdílných vstupních dat (hesel, souborů, …) se stejným hash kódem. V tomto případě se jedná o takzvané kolize prvního řádu. Daným postupem však nelze k libovolnému souboru vytvořit jiný se stejným hash kódem – v tomto případě by se jednalo o kolizi druhého řádu.

Samostatnou pozornost pak zasluhuje takzvaný narozeninový paradox, jehož detailní popis přesahuje tento článek, podrobnosti můžete v širokém kontextu najít například v anglické Wikipedii. Prozraďme však, že narozeninový paradox využívá zajímavého výsledku elementární matematiky. Představte si, že je v jedné místnosti, nebo spíš sále n lidí, pak pravděpodobnost, že některý z nich má narozeniny ve stejný den jako vy, je 1-(364 / 365)^n.

To znamená, že pro dosažení alespoň padesátiprocentní pravděpodobnosti by bylo zapotřebí 254 osob. Tato situace přesně koresponduje s tím, kdy známe výsledný hash jednoho řetězce a chceme najít druhý řetězec, který má stejný hash. Uvážíme-li naproti tomu situaci, kdy hledáme libovolné dva řetězce takové, že jsou různé, avšak mají stejný hash kód, tak ta odpovídá tomu, že z n lidí v sále mají alespoň dva narozeniny ve stejný den. Pro alespoň padesátiprocentní pravděpodobnost stačí pouze 23 lidí.

Našli jste v článku chybu?

22. 6. 2012 10:29

Ondřej Bouda (neregistrovaný)

Vtip je v tom, že když hledám někoho, kdo má narozeniny ve stejný den jako já, tak mám jasně dané datum. Pravděpodobnost, že někdo narodil v konkrétně daném dni, je 1:365.

V tom druhém případě ale nemám datum fixnuté, a proto je pravděpodobnost úspěchu mnohem vyšší. Je to stejný rozdíl, jako když budete snažit hodit kostkou dvakrát za sebou šestku (fixní výsledek) versus hodit dvakrát za sebou "stejné číslo".

Ty situace má smysl rozlišovat např. proto, že hash se často používá k ověření pravos…

23. 6. 2012 15:21

A kvůli podobným myšlenkám je ročně kdovíkolik služeb kompromitováno únikem už. dat. Existuje spousta způsobů, jak útočníky velmi znepříjemnit práci, ale vyžaduje to ve firmách programátory a ne bastlení zakázek pomocí studentů za pár korun. Eshop u kterého po zadání apostrofu do login formuláře vyskočí SQL chyba .. to by mělo být trestné, nakládají totiž nečekaně s osobními údaji.

Vitalia.cz: Pravda o přibírání na zimu

Pravda o přibírání na zimu

Podnikatel.cz: V restauraci bez cigaret? Sněmovna kývla

V restauraci bez cigaret? Sněmovna kývla

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Vitalia.cz: Analýza letáků: Na co lákají do prodejen?

Analýza letáků: Na co lákají do prodejen?

120na80.cz: 5 nejčastějších mýtů o kondomech

5 nejčastějších mýtů o kondomech

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Root.cz: Nová třída SD karet A1 s vysokým výkonem

Nová třída SD karet A1 s vysokým výkonem

Root.cz: 250 Mbit/s po telefonní lince, když máte štěstí

250 Mbit/s po telefonní lince, když máte štěstí

Root.cz: Mirai má nový cíl 5 milionů routerů

Mirai má nový cíl 5 milionů routerů

Měšec.cz: Za palivo zaplatíte mobilem (TEST)

Za palivo zaplatíte mobilem (TEST)

Vitalia.cz: Nahradí sluch, ale zvuk je zcela jiný

Nahradí sluch, ale zvuk je zcela jiný

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

DigiZone.cz: Perspektivy TV v roce 1939 podle časopisu Life

Perspektivy TV v roce 1939 podle časopisu Life

Podnikatel.cz: 3, 2, 1..EET startuje. Na co nezapomenout?

3, 2, 1..EET startuje. Na co nezapomenout?

Root.cz: Kamery Sony se dají ovládnout na dálku

Kamery Sony se dají ovládnout na dálku

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Podnikatel.cz: Alza.cz má StreetShop. Mall.cz více výdejních míst

Alza.cz má StreetShop. Mall.cz více výdejních míst

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy