Ich obwohl ich Hashing und Salting Passwörter verstanden, aber es scheint, dass ich einige Missverständnisse habe. Ich erstelle ein Benutzeraccount-System für meine Website in nodejs.Wie funktioniert Passwort Hash + Salz Arbeit
Die Art, wie ich es verstand, war, dass, wenn ein Benutzer ein Passwort erstellt, wir eine zufällige Salz generieren, an das Passwort anhängen und dann diese Zeichenfolge Hash. Wir können auch einen Arbeitsfaktor hinzufügen, um den Hash langsam arbeiten zu lassen und gegen Brute-Force-Angriffe zu schützen. Wir speichern das Salz zusammen mit dem Hash in unserer Datenbank und um einen Login-Versuch zu validieren, wiederholen wir den obigen Prozess (auf dem Server) mit dem gespeicherten Salz und dem versuchten Passwort und prüfen, ob die Hashes übereinstimmen.
Es scheint, dass das Modul bcrypt
in Nodejs nicht mit meiner Interpretation von Hashing konsistent ist. Dies ist aus einem Beispiel bei http://codetheory.in/using-the-node-js-bcrypt-module-to-hash-and-safely-store-passwords/
var salt = bcrypt.genSaltSync(10);
var hash = bcrypt.hashSync("my password", salt);
Zunächst einmal, warum wird der Faktor auf das Salz aufgebrachte Arbeit eher als die Hash? Wenn jemand mit roher Gewalt angreift, würde er die Hash-Funktion korrekt ausführen? Ist das Hash nicht die Funktion, die wir brauchen, um langsam zu sein?
Ich bin auch durch die Validierung mit bcrypt verwechselt:
bcrypt.compareSync("my password", hash);
Wir brauchen die Hashes sogar einzigartig zu sein, wenn zwei Benutzer das gleiche Passwort wählen, dann ist dies der Punkt, Salz oder? Warum machen wir das nicht?
bcrypt.compareSync("my password"+salt, hash);
Das Hauptziel von Salzen ist Rainbow-Tabellenangriffe zu verhindern, d. H. Vorberechnete Zuordnungen von Salzen zu Passwörtern, die die Komplexität des Crackens auf "originalPassword = rainbowTable [hash]" reduzieren. Viele Salze sind noch besser, aber nicht alle Systeme verwenden mehr als ein Salz. – FakeRainBrigand