Autor Zpráva
Paja222
Profil
Ahoj,

na každém fóru nebo v každé diskusi vidím, že pokud někdo v ukázce kódu použije sha1(sha1($string)) nebo md5(md5($string)), tak mu ostatní "nadávají" že to snižuje bezpečnost, ale nikde nemohu vůbec nic najít o tom, proč tomu tak je.

Díky za objasnění :-)
Joker
Profil
Paja222:
Je to prosté: Mnoho způsobů prolomení hesla je tím náročnější, čím víc je všech možných hesel (nejjednodušší příklad klasický útok hrubou silou, kdy budu postupně zkoušet všechna možná hesla. V průměru čím víc těch možných hesel bude, tím déle potrvá najít to správné).
Dvojité volání hashe může dát stejný nebo menší počet různých výstupů než jedno volání hashe, takže je méně bezpečné.

Proč dá stejný nebo menší počet různých výstupů?
Když dám příklad s MD5 (SHA-1 bude to samé, jen jiná čísla): MD5 hash lze udělat z jakéhokoliv řetězce a výsledný hash má vždycky 32 bajtů (= 128 bitů).
Čili md5($string) teoreticky může mít nekonečně mnoho vstupů a 2^128 výstupů.
Jenže protože vstupem do druhé md5 je už md5 hash, není už těch vstupů teoreticky nekonečně mnoho, ale jen maximálně 2^128.
A výsledkem celého toho výrazu pak není hash z teoreticky nekonečného množství různých vstupů, ale hash z maximálně 2^128 možných MD5 hashů. Navíc v případě, že existují 32-bajtové kolize (řetězce generující stejný hash), což je docela pravděpodobné, bude těch možných výsledků ještě méně.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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