Hash, Salt und Ihre Sicherheit: Warum ist das 2025 so wichtig?
\n\nStellen Sie sich vor: Sie haben eine tolle Website gebaut, alles läuft, Benutzer registrieren sich. Doch eines Tages gelangt die Datenbank ins Netz. Was sehen Angreifer? Wenn Sie Passwörter im Klartext speichern, ist das eine Katastrophe. Wenn Sie altes md5 verwenden, ist das fast dasselbe. Wenn Sie jedoch Secure Hash and Salt einsetzen, sehen Angreifer nur eine sinnlose Zeichenfolge. Im Jahr 2025 ist das nicht nur eine Empfehlung, sondern ein Sicherheitsstandard.
\n\nIn diesem Artikel erfahren Sie, wie Sie Passwörter in PHP mit modernen Algorithmen, Salt und Best Practices korrekt hashen. Sie lernen, warum alte Methoden gefährlich sind und wie Sie in 10 Minuten auf eine sichere Passwortspeicherung umsteigen.
\n\nWarum sind md5 und sha1 gefährlich?
\n\nViele Anfänger machen denselben Fehler: Sie verwenden md5($password) oder sha1($password). Im Jahr 2025 ist das nicht nur eine schlechte Praxis, sondern ein direkter Weg zur Verwundbarkeit. Warum?
- \n
- Berechnungsgeschwindigkeit. MD5 und SHA1 wurden für Geschwindigkeit entwickelt, nicht für Sicherheit. Moderne GPUs können Milliarden von Hashes pro Sekunde durchprobieren. \n
- Fehlendes Salt. Wenn zwei Benutzer dasselbe Passwort wählen, sind ihre Hashes identisch. Das ermöglicht den Einsatz von Regenbogentabellen. \n
- Kollisionen. Für MD5 wurden praktische Kollisionen gefunden – zwei verschiedene Eingaben erzeugen denselben Hash. \n
Zum Glück bietet PHP integrierte Funktionen, die all diese Probleme lösen. Und das ohne Installation externer Bibliotheken.
\n\npassword_hash und password_verify: Ihre Geheimwaffen
\n\nSeit PHP 5.5.0 gibt es zwei magische Funktionen: password_hash() und password_verify(). Sie generieren automatisch ein Salt, verwenden kryptografisch sichere Algorithmen und schützen vor Timing-Angriffen.
Beispiel für die einfache Anwendung:
\n\n// Passwort hashen\n$password = "MeinSuperSicheresP@sswort!";\n$hash = password_hash($password, PASSWORD_DEFAULT);\necho $hash; // $2y$10$...\n\n\nWas ist hier passiert? Die Funktion password_hash:
- \n
- Hat ein zufälliges Salt generiert \n
- Hat den optimalen Algorithmus gewählt (standardmäßig bcrypt) \n
- Hat den Hash berechnet \n
- Gibt einen String zurück, der Hash, Salt und Algorithmus-Informationen enthält \n
Die Passwortprüfung ist genauso einfach:
\n\n// Passwort überprüfen\n$inputPassword = "MeinSuperSicheresP@sswort!";\nif (password_verify($inputPassword, $hash)) {\n echo "Passwort korrekt!";\n} else {\n echo "Passwort falsch.";\n}\n\n\nBeachten Sie: Sie müssen das Salt nicht separat speichern. Es ist bereits im Hash enthalten. Das ist Secure Hash and Salt in Aktion.
\n\nWelchen Algorithmus sollten Sie 2025 wählen?
\n\nStandardmäßig verwendet password_hash bcrypt. Das ist eine ausgezeichnete Wahl für die meisten Projekte. Aber es gibt auch andere Optionen:
| Algorithmus | \nKonstante | \nEmpfehlung | \n
|---|---|---|
| Bcrypt | \nPASSWORD_BCRYPT | \n Hervorragende Wahl, überall unterstützt | \n
| Argon2i | \nPASSWORD_ARGON2I | \n Resistent gegen Seitenkanalangriffe | \n
| Argon2id | \nPASSWORD_ARGON2ID | \n Beste Wahl im Jahr 2025 | \n
Argon2id ist der Gewinner des PHC-Wettbewerbs (Password Hashing Competition). Er ist sowohl gegen GPU-Angriffe als auch gegen Timing-Angriffe resistent. Wenn Ihr PHP mit Argon2-Unterstützung kompiliert wurde (in PHP 8.x ist das bereits Standard), verwenden Sie ihn.
\n\nEinstellung der Hashing-Kosten
\n\nEine der Kernideen von Secure Hash and Salt ist es, die Berechnung