Die übliche Methode zum Speichern von Passwörtern ist die Verwendung einer Hash-Funktion für das Passwort, aber salt es vorher. Es ist wichtig, das Passwort zu "salzen", um sich gegen Rainbow Table zu wehren Angriffe.
Ihre Tabelle sollte also in etwa so aussehen
._______._________________.______________.
|user_id|hash |salt |
|-------|-----------------|--------------|
|12 |[email protected]|13%!#tQ!#3t...|
| |... |... |
Wenn Sie überprüfen, ob ein bestimmtes Passwort mit einem Benutzer übereinstimmt, sollten Sie das Salt mit dem angegebenen Passwort verketten und die Hash-Funktion der Ergebniszeichenfolge berechnen. Wenn die Ausgabe der Hash-Funktion mit dem hash
übereinstimmt Spalte - es ist das richtige Passwort.
Es ist jedoch wichtig zu verstehen, dass die Salt-Hash-Idee einen bestimmten Grund hat – um zu verhindern, dass jemand mit Zugriff auf die Datenbank ein Passwort kennt (es wird als schwieriges Problem angesehen, die Ausgabe einer Hash-Funktion umzukehren). So könnte sich beispielsweise der DBA der Bank nicht bei Ihrem Bankkonto anmelden, selbst wenn er Zugriff auf alle Spalten hat.
Sie sollten es auch in Betracht ziehen, wenn Sie glauben, dass Ihre Benutzer ein vertrauliches Passwort (z. B. ihr Passwort für ihr Gmail-Konto) als Passwort für Ihre Website verwenden werden.
IMHO ist es nicht immer eine Sicherheitsfunktion, die benötigt wird. Sie sollten also überlegen, ob Sie es wollen oder nicht.
Siehe dieser Artikel für eine gute Zusammenfassung dieses Mechanismus.
Aktualisierung: Es ist erwähnenswert, dass Sie für zusätzliche Sicherheit gegen gezielte Angriffe zum Umkehren des Hashs einzelner Passwörter bcrypt verwenden , die beliebig schwer zu berechnen sein kann. (Aber wenn Sie nicht wirklich Angst davor haben, dass ein mysteriöser Mann in Schwarz auf Ihre spezifische Datenbank abzielt, denke ich, dass sha1 gut genug ist. Ich würde für diese zusätzliche Sicherheit keine weitere Abhängigkeit für mein Projekt einführen. Das heißt, es gibt keinen Grund, sha1 nicht zu verwenden 100 Mal, was einen ähnlichen Effekt ergeben würde).