Heim  >  Artikel  >  Backend-Entwicklung  >  So speichern Sie Benutzerkennwörter sicher

So speichern Sie Benutzerkennwörter sicher

炎欲天舞
炎欲天舞Original
2017-08-04 17:55:091574Durchsuche

1: Grundwissen: Hashing mit Salt

Wir wissen bereits, wie einfach es für böswillige Angreifer ist, Lookup-Tabellen und Rainbow-Tabellen zu verwenden, um gewöhnliche Hash-Verschlüsselung schnell zu knacken. Wir haben auch

gelernt, dass die Verwendung von zufällig gesalzenen Hashes dieses Problem lösen kann. Aber welche Art von Salz verwenden wir und wie mischen wir es in ein Passwort?

Der Salt-Wert sollte mithilfe eines kryptografisch sicheren Pseudozufallszahlengenerators, CSPRNG, generiert werden. CSPRNG unterscheidet sich stark von gewöhnlichen Pseudozufallszahlengeneratoren,

wie der rand()-Funktion der Sprache „C“. Wie der Name schon sagt, ist CSPRNG kryptografisch sicher konzipiert, was bedeutet, dass es hochgradig zufällige, völlig unvorhersehbare Zufallszahlen liefern kann. Wir möchten nicht, dass der Salzwert vorhersehbar ist, daher muss CSPRNG verwendet werden.

In der folgenden Tabelle sind die CSPRNG-Methoden einiger aktueller Mainstream-Programmierplattformen aufgeführt.

Verwenden Sie für jedes Passwort jedes Benutzers einen eindeutigen Salt-Wert. Jedes Mal, wenn ein Benutzer ein Konto erstellt oder sein Passwort ändert, sollte das Passwort einen neuen zufälligen Salt-Wert haben.

Niemals einen Salzwert wiederverwenden. Der Salt-Wert sollte außerdem lang genug sein, damit genügend Salt-Wert vorhanden ist, der für die Hash-Verschlüsselung verwendet werden kann. Als Faustregel gilt, dass der Salt

-Wert mindestens so lang sein sollte wie die Ausgabe der Hash-Funktion. Dieses Salt sollte zusammen mit dem Passwort-Hash in der Benutzerkontentabelle gespeichert werden.
Platform CSPRNG
PHP mcrypt_create_iv, openssl_random_pseudo_bytes
Java java.security.SecureRandom
Dot NET (C#, VB) System.Security.Cryptography.RNGCryptoServiceProvider
Ruby SecureRandom
Python os.urandom
Perl Math::Random::Secure
C/C++ (Windows API) CryptGenRandom
Any language on GNU/Linux or Unix Read from /dev/random or /dev/urandom

Schritte zum Speichern des Passworts:

Verwenden Sie CSPRNG, um lange genug einen zufälligen Salt-Wert zu generieren.

    Mischen Sie das Salz in das Passwort und verschlüsseln Sie es mit einer Standard-Passwort-Hashing-Funktion wie Argon2, bcrypt, scrypt oder PBKDF2.
  1. Speichern Sie den Salt-Wert und den entsprechenden Hash-Wert gemeinsam in der Benutzerdatenbank.
  2. Schritte zum Überprüfen des Passworts:

Rufen Sie den Salt-Wert des Benutzers aus der Datenbank ab und den entsprechenden Hashwert.

    Mischt den Salt-Wert in das vom Benutzer eingegebene Passwort und verschlüsselt es mithilfe einer gemeinsamen Hash-Funktion.
  1. Vergleichen Sie das Ergebnis des vorherigen Schritts, um zu sehen, ob es mit dem in der Datenbank gespeicherten Hash-Wert übereinstimmt. Wenn sie gleich sind, ist das Passwort korrekt; andernfalls ist das Passwort falsch.

Das obige ist der detaillierte Inhalt vonSo speichern Sie Benutzerkennwörter sicher. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn