Hallo,
Nämlich einfachen also verständlichen Code, bei dem nicht jeder die Dokumentation und reichlich Drittquellen bemühen muss.
Einfacher Code ist nicht notwendig produktionsreifer Code und schon gar nicht kryptographisch sicherer Code.
Habe ich dargestellt, dass es darum geht, WIE (sic!) man Passwörter zum Zweck des Speicherns salzt und mehrfach hashed?
- Meine Ansicht: Das genau habe ich sehr wohl getan!
Ein grundlegendes Verfahren in Pseudocode zu beschreiben ist natürlich in Ordnung. Das hat der von dir verlinkte Heise-Artikel ja auch getan, das tut auch jeder Grundlagenartikel zu bcrypt, PBKDF2 oder Key Stretching im Allgemeinen.
Ich schrieb über dem Code: "Das was heise vorschlug, läuft übrigens auf etwas wie das hier heraus:"
Noch mal: "ETWAS WIE DAS HIER"
Wenn hier Code gepostet wird, muss man damit rechnen, dass ihn jemand kopiert. Er ist für die »Ewigkeit« konserviert und in Suchmaschinen auffindbar. Was meinst du, warum ich hier die Sicherheitslücken im Ausgangsposting moniert habe. Nicht, um irgendwen zu ärgern, vorzuführen oder weil ich zuverlässig weiß, dass die Lücken in der Anwendung des Fragenden exploitbar sind. Sondern ganz allein weil der Code hier gepostet wurde und hier viele Leute voneinander lernen.
Habe ich damit irgend jemanden gesagt, er soll es so und nicht anders machen?
Die Vehemenz, mit der du deine selbstgebaute Funktion verteidigt hast und gültige Kritik heruntergespielt hast, ist schon erstaunlich.
Habe ich was falsch gemacht, also ich funktionierenden PHP-Code präsentierte?
- Meine Ansicht: Nein. Die Menschen lernen am besten an praktischen Beispielen.
Ein sinnvolles *praktisches* Beispiel wäre Code, der nach aktuellen Stand sicher, produktionsreif und direkt kopierbar ist.
Habe ich was falsch gemacht, also ich auf sehr spezielle und bei vielen noch nicht einmal verfügbaren Funktionen verzichtete?
- Meine Ansicht: Nein. Ich wollte ja zeigen, WIE es PRINZIPIELL geht.
Es geht sowohl prinzipiell als auch praktisch mit password_hash() + password_compat ab der PHP-Version 5.3.7. Warum nicht das zeigen?
Einem so schlechten Zufallsgenerator, der hier binnen etlicher Billionen Versuche einen salt zweimal erzeugt, den gibt es auch in PHP - jenseits auf die Version beschränkter Bugs - nicht.
Es geht nicht um das mehrmalige Erzeugen von Salts. rand() nutzt einen Kongruenzgenerator, um aus einem gegebenen Seed deterministisch Folgezahlen zu erzeugen. Ist der Seed bekannt, sind sämtliche folgenden Zahlen herleitbar. Das ist etwas anderes als ein nicht-deterministischer, kryptografisch sicherer Zufallsgenerator, der z.B. im Linux-Kernel hinter /dev/(u)random steckt.
Du hast hier schon ein Posting eines Linux-Kernel-Maintainers verlinkt, indem er sich glücklich schätzt, dass der Linux-Kernel verschiedene Entropiequellen nutzt, nicht nur einen Hardware-Pseudozufallszahlen-Generator, der nicht unabhängig untersucht werden kann. Das ist schön, jetzt sollte man /dev/random auch nutzen. Am besten über plattformübergreifende und ausgereifte Bibliotheken bzw. Funktionen im PHP-Kern.
Mathias