Christoph Zurnieden: Sicherheit von MD5

Beitrag lesen

Hallo,

Das ist nicht ganz korrekt. Die MD5Sum ist wirklich eine Summe, also eine Zahl (128 Bit lang) keine Zeichenkette.

Jepp, aber wo du keine 128 Bit Entropie reinsteckst, kannst du auch keine 128 Bit Entropie rauskriegen. rand() spuckt einen integer aus, der in der Regel 32 Bit hat. Wenn also der andere Teil, über den die MD5-Summe berechnet wird, bekannt ist, brauchst du 'nur' noch 2^32 also 4294967296 Werte probieren.

PHPs md5() funktioniert nicht, oder wie soll ich das verstehen?

Du möchtest also: a) mindestens 4 Zufallszahlen zusammenlegen (bitte nicht addieren, das würde eine Gaussche Verteilung geben und die ist Zufallsmäßig noch schlimmer),

Autsch.
Möchtest Du das da oben noch einmal korrigieren?

b) mt_rand() benutzen,

Da kenne ich den Code nicht, kann ich also nichts zu sagen.

c) falls deine Plattform es unterstützt /dev/random benutzen,

Sollte man nicht direkt benutzen. Aus Gründen, die Du selber unten aufführst.

d) dir evt. http://www.developers-resources.com/stories.php?story=01/12/03/3988084 ansehen.

Nett. Aber mit deren Erzeugung einer uniqid bin ich ganz und gar nicht einverstanden. Fehlt nicht auch die Erwähnung von RFC 1750?

Sehr schön ist übrigens die Möglichkeit, das thermische Rauschen der Soundkarte zu nutzen. Das bringt echte Zufallszahlen und auch eine ziemliche Menge/t. Ich selber habe mal etwas versucht mit ein paar OPAMPS und einem Wiederstand auf dem Paralellport. Hatte aber zu große CPU-Last verursacht, lohnte sich nicht (Kann auch mein Fehler gewesen sein ;-). Muß schon zumindest auf dem PCI Bus o.ä. sitzen.

Zu c): /dev/random blockiert, wenn es keine weitere Entropie mehr hat, bis es wieder welche zur Verfügung hat (die kommt von Usereingaben oder Festplattenaktivitäten, das kann also besonders auf einem Server ohne User davor länger dauern),

Na, das funktioniert zumindest unter Linux schon etwas geschickter mittlerweile ;-)
Siehe auch (in 2.2 zumindest an der Stelle, keinen 2.4er zur Hand gerade) den Kommentar in $KERNELSRC/drivers/char/random.c oben sowie im Code selber.

du kannst also auch /dev/urandom benutzen, das schmeisst einen PRNG an, wenn ihm die Entropie ausgeht.

Ja, reicht für die meisten Fälle.

so short

Christoph Zurnieden