Wenn Sie Passwörter im Klartext speichern, sind in dem Moment, in dem die Datenbank abfließt, alle Konten offengelegt. Deshalb werden Passwörter als Hash gespeichert und beim Anmelden mit dem Hash der Eingabe verglichen. Da der Originaltext nicht gespeichert wird, lässt sich das Passwort auch bei einem Leck nicht unmittelbar erkennen.
Ein einfacher SHA-256-Hash allein genügt jedoch nicht. Da dasselbe Passwort stets denselben Hash ergibt, kann ein Angreifer die Hashes gängiger Passwörter vorab berechnen und sie mit einer Rainbow-Table massenhaft abgleichen. Um das zu verhindern, muss man jedem Konto einen zufälligen Wert, das Salt (salt), hinzufügen und erst dann hashen.
Auch die Geschwindigkeit ist ein Problem. SHA-256 ist so schnell, dass ein Angreifer Milliarden Versuche pro Sekunde durchführen kann. Deshalb setzt man für Passwörter absichtlich langsame Spezial-Hashes wie bcrypt, scrypt oder Argon2 ein. Diese lassen sich über Iterationszahl und Speicherkosten so einstellen, dass Brute-Force-Angriffe erheblich verlangsamt werden.
Zusammengefasst lauten die drei Grundsätze der Passwortspeicherung: Salt + langsamer Spezial-Hash + ausreichende Kostenparameter. Gewöhnliche SHA-256/512 eignen sich für Dateiintegrität und Signaturen, verwenden Sie für die Passwortspeicherung jedoch einen spezialisierten Algorithmus wie Argon2.