eamelink schreef op donderdag 05 januari 2006 @ 18:01:
[...]
Ik denk dat pas voor passwords vanaf een karaktertje of 30 gaat gelden dat je een aanzienlijke kans hebt dat er een kortere plaintext met dezelfde hash bestaat, dus zó toevallig is het ook niet dat je het password vond

Dat is een wilde gok, waarvan ik vermoed dat je flink te hoog zit.
Even een klein uitstapje, omdat het toch al een beetje over kansen gaat: Ik denk dat je te hoog zit en dat je verbaasd zal zijn over The Birthday Paradox. Deze stelt dat als je een groep van 23 mensen bij elkaar hebt de kans groter dan 50% is (een 'aanzienlijke kans dus') dat er een 'collision' is qua verjaardag. 23 is voor veel mensen een verrassend klein getal tov de 365 dagen in een jaar.
Illustratie Birthday Paradox (we zitten toch in /P&W

):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| <?
function different_birthdays($n) {
if ($n == 1) return 1.0;
$x = different_birthdays($n-1) * (365.0-($n-1))/365.0;
echo $n.' : '.(1-$x)."\r\n<br/>";
return $x;
}
function different_birthdays2($n) {
if ($n == 1) return 1.0;
$x = different_birthdays2($n-1) * (65536.0-($n-1))/65536.0;
echo $n.' : '.(1-$x)."\r\n<br/>";
return $x;
}
echo "Birtday, 365 days\r\n<br/>";
different_birthdays(32);
echo "---\r\n<br/>";
echo "Birtday, 65536 outputs\r\n<br/>";
different_birthdays2(512);
?> |
different_birthdays(32); zal printen wat de kans is (kans van 1 = 100%) en dat geeft oa deze regels output:
... 22 : 0.475695307663
23 : 0.507297234324
24 : 0.538344257915 ...
Dit is het exacte resultaat zoals dat bij elke uitleg van de paradox staat. Dus ik hoop dat je de werkwijze vertrouwt als ik nu de functie aanpas, voor de kans op een collision bij 2
16 (=65.536) waarden. De aanroep van deze aangepaste functie geeft al de kans van 50% op een collision bij:
... 301 : 0.498418779388
302 : 0.500722489523
303 : 0.503023237328 ...
302 elementen. En getal welke 200x kleiner is dan die 65.536. Verassend klein huh?
Bovenstaande code kostte overigens slechts 1 seconde servertijd. De liefhebber mag hem aanpassen naar 2
128. Ik had er geen zin om, kost waarschijnlijk flink meer cpu tijd (geen idee of het nog in de categorie 'feasible' is) en er moet bij een getal als dit op overflows gelet gaan worden, wel denk ik dat de kans van 0.5 al ver voor het aantal mogelijkheden met 30 bytes (256^30), of desnoods 30 alfanumerieke karakters gevonden gaat worden.

Note: Dit gaat wel om
een willekeurige collision, maar dat geldt ook voor eamilinks post ('er bestaan een').
Voor zover het uitstapje.
Dan nog is het een behoorlijke klus om die collision daadwerkelijk te vinden. Elk element hashen is véél duurder dan de kans op een collision bij x elementen uit te rekenen.
En dat laatste is weer ontopic voor de sterkte van een encryptie/hashing algoritme. Een berekening met 1 bit meer is minder erg voor de legitieme gebruiker dan het groter worden van de exhaustive search (of desnoods hopen op die 50% kans) op 2x zoveel elementen door de aanvaller. Voor encryptie het aantal bits verdubbelen verhoogt de performance eisen in orde O, maar voor de aanvaller in een exponentiele orde.
[
Voor 38% gewijzigd door
Voutloos op 05-01-2006 23:44
]