Christoph Zurnieden: Zufallsystem - Wieso microtime?

Beitrag lesen

Hi,

ich zitiere mal aus dem Manual:

[...]

"Die PHP rand() Funktion benutzt den in der jeweiligen libc enthaltenen Zufallsgenerator. Gerade in älteren libc-Versionen ist dieser aber oft langsam und die Qualität der erzeugten Pseudozufalls-Sequenzen ist unbefriedigend bis unbekannt.

Diese Vorgehensweise vestehe ich bis heute nicht. Wenn das Manual den tatäschlichen Code wirklich wiederspiegelt (ich habe ihn leider nicht auf Platte und bin zu faul, mir das Paket einzuspielen) ist diese Vorgehensweise zu mißbilligen. Entweder holt man sich die Zufallszahlen aus dem OS (/dev/random o.ä. bei Unices) oder, wenn nicht vorhanden oder zu schlecht, implementiert man sich das selber. Wir haben 2003, es gibt sehr viele Algorithmen, die das gut und schnell und vor allem kryptograhisch ausreichend machen können (Der "Mersenne Twister" ist hier kein gutes Beipiel).

Die funktion rand() ist in den aktuellen GLibcs gut dokumentiert, vielleicht lohnt sich einmal reinschauen? $GLIBC_SRC_ROOT/stdlib/random.c (hier glibc-2.3.2)
Und als Gegensatz dazu die rand() Funktion von OpenSLL $OPENSSL_SRC_ROOT/crypto/rand/md_rand.c.
Auch die rand() Funtkionen von FreeBSD sind gut kommentiert BSD/lib/libc/stdlib/rand.c

Naja, mit neueren PHP-Versionen(>= 4.2) ist das wohl automatisiert worden - warum auch nicht, vermutlich haben es eh (fast ;-)) alle so gemacht wie im Manual-Beispiel.

So richtig ordentlich ist das auch nicht, da man auch hier normalerweise ein Stück der erzeugten Zufallszahl als Seed behalten und vor allem nutzen sollte.
Für normale Ansprüche reicht es, Verschlüsselung würde ich damit aber nicht betreiben wollen.

so short

Christoph Zurnieden