Warum SHA-256 nicht ausreicht, um Passwörter zu speichern
Hash-Datei und das Speichern des Passworts auf dem Server haben unterschiedliche Anforderungen. Für Passwörter werden auch die Kosten für jeden Versuch, zu erraten, gezählt.
In diesem Ratgeber
Hashination ist keine Verschlüsselung. Die Chiffre kann mit dem richtigen Schlüssel entschlüsselt werden. Die Verknüpfungsfunktion bietet keine analoge Reverse-Operation. Dies bedeutet jedoch nicht, dass das als Verknüpfung gespeicherte Passwort außerhalb der Reichweite des Angreifers bleibt.
Nach dem Leck kann der Angreifer die Passwörter lokal erraten: Er berechnet das Ergebnis für jeden Vorschlag und vergleicht es mit dem gestohlenen Datensatz. Gleichzeitig muss er nicht die Grenze Ihrer Anwendungs-Login-Versuche durchlaufen.
SHA Geschwindigkeit wird zu einem Fehler
SHA-256 eignet sich perfekt für viele kryptographische Anwendungen, einschließlich Integritätsprüfung. Es ist für die schnelle Verarbeitung von Daten konzipiert. Für die Speicherung von Passwörtern möchten wir jedoch, dass jeder Versuch den Angreifer spürbare Ressourcen kostet.
Hinzufügen von Salz zu SHA256(sól + hasło) Das Problem der Geschwindigkeit wird nicht gelöst. Salz und Berechnungskosten spielen unterschiedliche Rollen. Ersetzen Sie die spezialisierte Funktion nicht durch Ihre eigene Abkürzungsschleife oder entwerfen Sie Ihr eigenes Format von Zertifizierungen.
Verwenden Sie die Bibliothek zum Hashen von Passwörtern
Für die neue Lösung gibt OWASP Argon2id als bevorzugte Wahl an. Scrypt ist eine Alternative, wenn Argon2id nicht verfügbar ist. PBKDF2 gilt unter anderem in Umgebungen mit spezifischen Compliance-Anforderungen. BCrypt wird in älteren Systemen benötigt, hat jedoch Einschränkungen, einschließlich der Eingabelänge.
Wählen Sie die gepflegte Bibliothek mit den Erstellungs- und Schreibverifizierungsfunktionen aus, sie sollte die Salzerzeugung und -speicherung von Parametern unterstützen, und wählen Sie Kostenparameter entsprechend den aktuellen Empfehlungen und Messungen auf dem Zielserver unter Berücksichtigung paralleler Logins und Ressourcenlimits.
Die hohen Kosten einer Operation dürfen keine leichte Überlastung des Dienstes ermöglichen, der Online-Schutz erfordert jedoch eine Reduzierung der Tests und der Laststeuerung.
Salz, Parameter und Pfeffer
Salz Es ist ein Zufallswert für jeden Datensatz. Er muss nicht geheim sein. Dank ihm geben die gleichen Passwörter keine identischen Einträge, und die Arbeit, die für einen Datensatz ausgeführt wird, bewegt sich nicht direkt zu allen anderen.
In der Datenbank behalten Sie auch die Algorithmus-Kennung und die Parameter, die für die Verifizierung benötigt werden. Bibliotheken legen sie oft in einem codierten String zusammen.
Pfeffer Dies ist ein optionales zusätzliches Geheimnis, das außerhalb der Passwort-Datenbank gespeichert ist. Es kann in bestimmten Verschüttungsszenarien helfen, aber es macht Schlüsselmanagement und -rotation schwierig. Es ist kein Ersatz für Salz oder eine richtige Hash-Funktion.
Wie erhöhen Sie die Kosten, ohne Passwörter zu kennen?
Beim erfolgreichen Einloggen hat die Anwendung ein vom Benutzer angegebenes Passwort, das sie zunächst nach dem alten Datensatz überprüft und dann, wenn die Parameter veraltet sind, einen neuen Datensatz mit den aktuellen Einstellungen erstellt. Dies ist ein typischer Moment für Rehash.
Sie werden das ursprüngliche Passwort nicht aus der aktuellen Verknüpfung wiederherstellen, um die gesamte Datenbank neu zu berechnen.Für Konten, die nicht zum Dienst zurückkehren, ist eine separate Migrations- oder Reset-Richtlinie erforderlich.
Überprüfen Sie vor der Implementierung die Ablehnung des falschen Passworts, die Migration des alten Datensatzes, Längenbegrenzungen und das Ladeverhalten.