Was ist Hashing?
Beim Hashing werden Klartextdaten wie ein Passwort per Einwegtransformation in einen String fester Länge überführt. Aus dem gleichen Input entsteht immer der gleiche Hash-Wert, aber der Klartext lässt sich aus dem Hash nicht wiederherstellen. Die FacadeHash von Laravel unterstützt zur sicheren Ablage von Passwörtern die Algorithmen bcrypt und Argon2.
Vergleich der Algorithmen
Der Arbeitsfaktor (Work Factor) von bcrypt steuert, wie lange die Hash-Berechnung dauert. Je langsamer der Hash, desto resistenter ist das System gegen Brute-Force-Angriffe. Wenn Hardware schneller wird, sollten Sie den Arbeitsfaktor erhöhen, um das Sicherheitsniveau zu halten.
Ablauf von Hashing und Prüfung
Konfiguration
Standardmäßig verwendet Laravel den Treiberbcrypt. Über die Umgebungsvariable HASH_DRIVER können Sie ihn ändern.
config:publish.
config/hashing.php etwa Standard-Arbeitsfaktoren anpassen.
Grundlegende Verwendung
Passwort hashen
Übergeben SieHash::make() das Klartext-Passwort, um den Hash zu erhalten. Speichern Sie diesen Hash in der Datenbank.
Arbeitsfaktor von bcrypt anpassen
Über die Optionrounds regeln Sie den Rechenaufwand des Hashings. Höhere Werte sind sicherer, benötigen aber mehr Zeit.
Der Standard (12) ist für die meisten Anwendungen angemessen.
Arbeitsfaktor von Argon2 anpassen
Bei Argon2 passen Sie den Rechenaufwand über die Optionenmemory, time und threads an.
Passwörter prüfen
MitHash::check() prüfen Sie, ob ein Klartext-Passwort dem gespeicherten Hash entspricht.
Ein typisches Einsatzgebiet ist die Login-Logik.
Auth::attempt(), wird diese Prüfung automatisch durchgeführt – ein direkter Aufruf ist dann nicht nötig.
Hash::check() ist praktisch, wenn Sie das aktuelle Passwort manuell verifizieren möchten.
Neubestimmung des Hashes
MitHash::needsRehash() prüfen Sie, ob ein bestehender Hash mit einem anderen Arbeitsfaktor erzeugt wurde als aktuell konfiguriert.
Nützlich, um nach einer Änderung des Arbeitsfaktors bestehende Hashes auf die neue Konfiguration umzustellen.
Algorithmusverifikation
Standardmäßig prüftHash::check(), ob der Hash mit dem aktuell konfigurierten Algorithmus erzeugt wurde.
Bei einem abweichenden Algorithmus wird eine RuntimeException ausgelöst.
Damit lassen sich Angriffe durch das Vertauschen des Hash-Algorithmus verhindern.
Wenn Sie – etwa während einer Migration – mehrere Algorithmen gleichzeitig unterstützen müssen, können Sie diese Prüfung mit HASH_VERIFY=false deaktivieren.
Zusammenfassung
Nächste Schritte
Einführung in die Authentifizierung
Verstehen Sie den gesamten Ablauf der Authentifizierung, inklusive des Logins mit
Hash::check().