Heim >Backend-Entwicklung >PHP-Tutorial >Wie sollten Passwörter sicher gespeichert werden?

Wie sollten Passwörter sicher gespeichert werden?

零下一度
零下一度Original
2017-06-23 14:45:042106Durchsuche

1: Grundwissen: Hashing mit Salt

Wir wissen bereits, dass böswillige Angreifer Lookup-Tabellen und Rainbow-Tabellen verwenden, um gewöhnliche Hashes zu knacken. Wie schnell die Verschlüsselung ist. 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.

Tabelle>

Für jedes Passwort jedes Benutzers muss ein eindeutiger Salt-Wert verwendet werden. 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-Werte für die Hash-Verschlüsselung verwendet werden können. Als Faustregel gilt, dass der Salt

Plattform CSPRNG
PHP mcrypt_create_iv , openssl_random_pseudo_bytes
Java java.security.SecureRandom
Dot NET (C#, VB) System.Security.Cryptography.RNGCryptoServiceProvider
Ruby SecureRandom
Python Betriebssysteme .urandom
Perl Math::Random::Secure
C/C++ (Windows API) CryptGenRandom
Beliebig Sprache unter GNU/Linux oder Unix Lesen aus /dev/random oder /dev/urandom

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

-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.

Schritte zum Speichern des Passworts:

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

  1. Mischen Sie das Salz in das Passwort und verschlüsseln Sie es mit einer Standard-Passwort-Hashing-Funktion wie Argon2, bcrypt, scrypt oder PBKDF2.

  2. Speichern Sie den Salt-Wert und den entsprechenden Hash-Wert gemeinsam in der Benutzerdatenbank.

  3. Schritte zum Überprüfen des Passworts:

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

  1. Mischt den Salt-Wert in das vom Benutzer eingegebene Passwort und verschlüsselt es mithilfe einer gemeinsamen Hash-Funktion.

  2. 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 vonWie sollten Passwörter sicher gespeichert werden?. 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