Autor Zpráva
I am
Profil *
Ahoj, už mi to dlouho vrtá hlavou, ale jak fungujou hashovací funkce? Třeba MD5?

Někdo naprogramoval hashovací funkci, jaktože ale když je známa tato funce nejde udělat zpětné rozkódování hashe pomocí tohoto algoritmu? Prosím objasněte mi to někdo, četl sem info na wikipedii, ale moc moudrý z toho nejsem :)
nightfish
Profil
vesměs jde o to, že vstupem hashe je řetězec o libovolné délce, a výstup má vždy délku konstantní - 128 bitů
z toho plyne, že pro každý hash existuje více vstupních řetězců (nekonečně mnoho)
a z toho plyne, že není možné přesně říci, ze kterého řetězce hash pochází
Johnik
Profil
Před nedávnem se to tu řešilo.
Hash je pouze číslo, takže z toho nejde vrátit zpět slovo.
Příklad:
a=5
c=3;
mám heslo ca > provede se výpočet hashe a to třeba takto: 5*3 = 15. A teď mi z toho udělej zpět slovo. Je mnoho řesení, ať už ac nebo ca. Ale při použití md5 nebo sha1 je to mnohem složitejsí.
Alphard
Profil
jestli vás zajímají detaily, lze využít toho, že PHP je open source :-)
Bubák
Profil
http://cs.wikipedia.org/wiki/MD5
Pokud ti to nebude stačit, tak z če stránky vedou další odkazy.
Timy
Profil
Příklad nějaké hashovací funkce. Mějme dán nějaký vstupní řetězec. Na začátku uděláme to, že si vyjádříme znaky v číselné podobě, tato čísla umocníme na druhou a sečteme. Následně tento výsledek celočíselně vydělíme třeba tisícem a to co nám zbude je výsledný hash. Příklad:

Vstupní řetězec bude "ahoj". Podle ASCII tabulky platí:
a=97
h=104
o=111
j=106

97^2+104^2+111^2+106^2 = 43 782
43 782 mod 1000 = 782.

Výsledný hash je číslo 782, přičemž není možné jednoznačně zpětně dopočítat, z kterého řetězce tento hash vznikl. Samozřejmě, že si můžeme vymyslet daleko sofistikovanější hashovací funkce, tohle je jen ilustrace.

Tato hashovací funkce je navíc velice kolizní: řetězce "ahoj" a "ahjo" budou mít stejný hash. Toho se můžeme zbavit například tak, že nebudeme umocňovat staticky na druhou, ale dynamicky na index právě aktuálního znaku:

97^1+104^2+111^3+106^4

A až aplikuješ tisícé vylepšení, máš třeba MD5 :-).

V tomhle skriptu je i jedna kapitola o hashovacích funkcích, můžeš si ji přečíst. Nejsou tam žádné hardcore věci, brali jsme to jen jednu přednáška, takže látka ve skriptu tomu odpovídá :-).
armin
Profil
I am: Pokud alespoň trochu holdujete programování / máte všeobecný přehled, přijde mi jako ideální ukázka počítání MD5 v javascriptu:
http://pajhome.org.uk/crypt/md5/md5src.html
I am
Profil *
Timy
Tohle je to co sem chtěl vědět :) Díky moc!
TomášK
Profil
Ještě bych vypíchl informaci, že u hashů jako md5 není možné (efektivně) určit žádný z řetězců, ze kterých mohl vzniknout. Uváděný Johnikuv příklad tuto vlastnost postrádá - naleznu několik řetězců, ale nevím, který z nich to je. Pokud by to bylo možné i u md5, mohl bych se ze znalosti hashe hesla dostat na systémy, kde uživatel používá stejné heslo a systém stejnou hashovací funkci (md5), což je nežádoucí.
Joker
Profil
TomášK
Ještě bych vypíchl informaci, že u hashů jako md5 není možné (efektivně) určit žádný z řetězců, ze kterých mohl vzniknout.
Zrovna MD5 teda není dobrý příklad pro takovýhle výrok :-)
Ano, nemělo by to být možné, ale jak známo, u MD5 byla objevena zranitelnost, kvůli které je možné z hashe relativně rychle vypočítat kolizní řetězec.

Proto je vhodné například hesla hashovat bezpečnější funkcí, nebo alespoň tak, aby nešlo jako heslo použít jakýkoliv kolizní řetězec k hashi z databáze (tzn. například solený hash)
suky
Profil
I am
Krome toho je spousta webovych nastroju, ktere v realnem case tvori databazi koliznich retezcu. Pomoci techto nastroju je celkem jednoduche dohledat kolizni retezec k zadanemu hashi.

MD5 Decrypter COM
MD5 Decrypter & Encrypter ORG
MD5-Decrypter COM
petrr
Profil *
suky
jezis, to si tu radeji uvadet nemel, uz ted vidim ty nadpisy na blogiskach: kiddies hacking

Vaše odpověď

Mohlo by se hodit

Příspěvky nesouvisející s webem budou odstraněny.

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: