Es gibt nur
2^32 − 1 = 4294967295
Möglichkeiten mit denen der Pseudo Random Number Generator (PRNG) von PHP geseedet werden kann [^1]. Kenne ich den Seed, kann ich damit jede Ausgabe vonrand
vorhersagen. Dann ist es egal, ob du nur ein Zufallsbit erzeugst oder einen terrabyte großen Zufallswert. Ich kann den Wert mit dem Seed exakt reproduzieren.
Der Indianerversteher hat nach nach dem konkreten Angriffszenario gefragt.
Ist es nicht so, dass du dafür den seed() setzen musst bevor die salts erzeugt werden? Also Zugriff auf den Server brauchst? Dann hätte der Betreiber aber ganz andere Probleme, die mit dem Skript nichts zu tun haben.
Als Probe kann man den Seed einfach mal manuell mit
srand(0)
setzen. Die ersten drei Aufrufe vonrand()
liefern dann die Pseudozufallszahlen:1178568022
1273124119
1535857466
.
-
Siehe oben
-
Müssten nicht, um die Salts zu vorherzusagen, alle salts nacheinander erzeugt worden sein- und zwar ohne dass PHP neu gestartet wurde? Ist das bei dem Passwortscript nicht völlig unwahrscheinlich? Wer tippt den so schnell?
-
Ist es nicht so, dass der seed auch wieder ergänzt wird
Du kommst mit
rand
nicht über2^32 - 1
Möglichkeiten hinaus einen Salt zu bilden.
Meinst du jetzt die größte Zahl, die mit rand erzeugt werden kann?
In seinem Skript hat der Indianerversteher doch gezeigt wie er es macht. Er verwendet rand() pro Stelle des hashes, also mehrfach.
Meinst du damit aber nochmals die "4294967295 Möglichkeiten mit denen der Pseudo Random Number Generator (PRNG) von PHP geseedet werden kann", dann gelten ja wieder sehr spezielle Voraussetzungen bei denen ich einen Zusammenhang mit dem eigentlichen Skript verneinen würde.
Ist es nicht so, dass bei einem Lauf unter PHP ab 5.3 statt der auf rand() zurückgreifenden die originalen PHP-Funktionen password_hash() und password_verify() benutzt werden, dass also deine Einwände nur dann gelten könnten, wenn das System ohnehin unsicher ist?
Ist es nicht auch so, dass ein Angreifer, der den Angriff gegen mehrere hashes führen will, um die Passwörter zu ermitteln, ohnehin den salt ohnehin kennt, weil der, und der Indianerversteher hat da mehrfach beschrieben, der salt direkt dort steht, wo auch der hash steht? Ist es also nicht so, dass der demnach bekannte salt gar nicht erraten werden muss?
Die Rainbowtables sind bei dem verwendeten Algorithmus zudem wahrscheinlich auch ein sehr akademisches Argument - oder hat der Indianerversteher md5() als Algorithmus verwendet und keine Runden gedreht? Wäre schön, man könnte ihn fragen.
Ich denke schon dass du "Beweise" für die angebliche Unsicherheit des Skriptes anbringst, die bei Hinsehen keine "Beweise" dafür sind.