Originariamente inviato da daniele_dll
trovare delle chiavi che collidono con un dato hash md5 (e se non erro anche sha1) è diventata cosa abbastanza semplice
Nel 2005, alla conferenza EuroCrypt, due ricercatori hanno mostrato com'è possibile trovare chiavi che collidono con l'hash in tempi estremamente ridotti
Si, certo, puoi trovare una chiave che collide con l'MD5 indicato nella form, MA se non conosci il valore di $secret, NON potrai utilizzarla per passare il controllo. Per pace di tutti, ecco il codice che dimostra la teoria:
Codice PHP:
<?php
$secret = '123'; // password segreta, stile [url]http://api.wordpress.org/secret-key/1.0/[/url]
$captcha = 'pippo'; // stringa visualizzata nel captcha
$md5 = md5($captcha . $secret); // stringa inserita nel campo hidden della form
echo($md5); // f7b2993185f755d2212840328001bb2f
?>
Ammesso di trovare una stringa il cui MD5 collide con f7b2993185f755d2212840328001bb2f (il valore passato nella form), se lo utilizzi nel codice di verifica, non funzionerà:
Codice PHP:
<pre>
<?php
$secret = '123';
$md5 = 'f7b2993185f755d2212840328001bb2f'; // valore proveniente dal campo hidden della form
$input = 'pippo123'; // valore il cui MD5 collide con f7b2993185f755d2212840328001bb2f
$check_md5 = md5($input . $secret);
if ($md5 == $check_md5) {
echo("OK");
} else {
echo("KO");
}
echo("\r\n");
$secret = '123';
$md5 = 'f7b2993185f755d2212840328001bb2f'; // valore proveniente dal campo hidden della form
$input = 'pippo'; // valore originale del capctha
$check_md5 = md5($input . $secret);
if ($md5 == $check_md5) {
echo("OK");
} else {
echo("KO");
}
?>
</pre>