Tach!
Warum man dezidierte Quellen für Pseudozufallszahlen wie /dev/urandom ignorieren sollte.
weil bei einem
$salt=
dd if=/dev/urandom/ bs=32 count=1;
der dedlfix geschrieben hätte, man solle doch bitte, um Windows-Hoster nicht zu verärgern, in PHP bleiben statt Systemaufrufe zu tätigen?
Der Hoster ist mir egal. Es geht nur darum, PHP-Funktionen zu verwenden, wenn diese vorhanden sind, und nicht aufgrund von deren Unkenntnis Shellprozesse zu starten. Der Aufwand ist nur gerechtfertigt, wenn es begründet ist. Das wäre hier der Fall, wenn openssl_random_pseudo_bytes() nicht zur Verfügung steht.
Warum man ignorieren sollte, was in der PHP-Doku steht.
Weil da auch rand(), dann srand() mal als toller Zufallsgenerator gepriesen wurde? Es gibt, wenn er so besch... ist, wie Du behauptest, für die Macher von PHP keinen Grund den nicht zu reparieren.
srand() ist kein Zufallsgenerator. rand() muss nicht repariert werden, weil es nicht kaputt ist. Es ist nur nicht für kryptografische Zwecke vorgesehen. Für weniger wichtige Zufälle ist er weiterhin geeignet.
Soso. Du hast was übersehen. Ich verwende rand() nicht einmal, sondern 32 mal nacheinander und baue dann an einem String herum. Dazwischen passiert viel "Entropie". Und zwar andere "Entropie" als beim vorherigen und nächsten 32-maligen verwenden von rand().
Für diese Entropie interessiert sich rand() nicht. Wenn man mit srand() seedet, erzeugt rand() immer die gleiche Zufallszahlenreihenfolge. Und das ist auch nicht verkehrt, wenn man nachvollziehbaren Zufall braucht. mt_(s)rand() ist in der Hinsicht auch nicht anders. Beide sind deshalb nicht für den hier vorligenden Zweck geeignet.
Nochmal: Wichtig ist nur, in den 10 Mio (die Zahl ist nur ein Beispiel) Salts möglichst viele verschiedene sind. Auch 99.999.999 (und noch einer, der schon mal da war) reicht wohl um einem, der sich an das Ermitteln der Klartextpasswörter macht, das Leben sauer zu machen, denn er müsste für jeden Salt gigantische Rainbow-Tables errechnen- weisst Du was das kostet?
Das neue NSA-Rechenzentrum kostet sicher auch eine ganze Menge. Aber wer sagt denn, dass man Rainbow-Tabellen erzeugen muss, wenn man durch unsicheren Zufall das Brute-Force einfacher haben kann?
dedlfix.