Passwörter und Datenbank
Übertragung vom Formular zum Server mit Post-Methode und TLS
Die Übertragung von Passwörtern über ein Formular mittels Transport Layer Security📖 (TLS) ist eine gängige Methode, um die Sicherheit bei der Datenübertragung im Internet zu gewährleisten. Hier sind die wesentlichen Punkte:
Wie funktioniert die Passwortübertragung mit TLS?
- TLS-Verbindung aufbauen: Wenn ein Benutzer ein Formular ausfüllt und absendet, wird die Verbindung zwischen dem Client (z. B. Browser) und dem Server durch TLS verschlüsselt. Dies schützt die Daten während der Übertragung vor Abhören oder Manipulation durch Dritte.
- Datenverschlüsselung: TLS verwendet asymmetrische Kryptografie für den Handshake, um einen gemeinsamen Sitzungsschlüssel sicher auszutauschen. Danach wird dieser Schlüssel für die symmetrische Verschlüsselung der übertragenen Daten genutzt, einschließlich Passwörtern.
- HTTPS-Protokoll: Die Nutzung von HTTPS (HTTP über TLS) stellt sicher, dass Formulardaten wie Passwörter sicher übertragen werden. Der Server präsentiert dabei ein Zertifikat, das vom Client geprüft wird, um die Identität des Servers zu bestätigen.
Sicherheitsaspekte
- Transportverschlüsselung: TLS schützt nur den Übertragungskanal. Sobald das Passwort den Server erreicht, liegt es dort in der Regel unverschlüsselt vor, es sei denn, zusätzliche Maßnahmen wie Hashing oder Verschlüsselung werden angewandt.
- Passwortschutz auf dem Server: Es ist wichtig, dass Passwörter auf dem Server nicht im Klartext gespeichert werden. Stattdessen sollten sie mit sicheren Hash-Algorithmen wie bcrypt verarbeitet werden.
Best Practices
- Verwenden Sie immer HTTPS für Webseiten mit Login-Formularen.
- Implementieren Sie zusätzliche Sicherheitsmaßnahmen wie OPAQUE oder ähnliche Protokolle, die auch nach dem TLS-Handshake eine sichere Authentifizierung ermöglichen.
- Achten Sie darauf, dass TLS korrekt konfiguriert ist und aktuelle Versionen verwendet werden (z. B. TLS 1.3), um bekannte Schwachstellen zu vermeiden.
Durch diese Maßnahmen wird sichergestellt, dass Passwörter sicher übertragen und verarbeitet werden.
Passwörter in Datenbank speichern mit Salt und Pepper
Um Passwörter sicher in einer Datenbank zu speichern, wird empfohlen, eine Kombination aus Salt und Pepper zu verwenden. Diese Methoden erhöhen die Sicherheit erheblich und erschweren Angriffe wie Rainbow-Table-Attacken, Brute-Force oder Wörterbuchangriffe. Hier ist eine Übersicht der Funktionsweise und Best Practices:
Salt
- Definition: Ein Salt ist ein zufällig generierter Wert, der für jedes Passwort individuell erstellt wird.
- Funktion: Der Salt-Wert wird zusammen mit dem Passwort gehasht. Dadurch erzeugen gleiche Passwörter unterschiedliche Hashes, was Rainbow-Table-Angriffe verhindert.
- Speicherung: Der Salt-Wert wird in der Datenbank zusammen mit dem Hash gespeichert.
Pepper
- Definition: Ein Pepper ist eine geheime Zeichenfolge, die zusätzlich zum Salt verwendet wird.
- Funktion: Der Pepper wird vor dem Hashing dem Passwort hinzugefügt. Er schützt vor Angriffen, wenn ein Angreifer Zugriff auf die Datenbank erhält, da der Pepper nicht in der Datenbank gespeichert wird.
- Speicherung: Anders als der Salt wird der Pepper an einem sicheren Ort außerhalb der Datenbank gespeichert, z. B. in der Serverkonfiguration oder einem Secrets-Management-System.
- Best Practices:
- Den Pepper regelmäßig aktualisieren, um langfristige Sicherheit zu gewährleisten.
- Niemals den Pepper im Quellcode oder direkt in der Hardware speichern.
Implementierungsschritte
1. Passwort und Salt kombinieren:
import bcrypt
salt = bcrypt.gensalt()
hashed_password = bcrypt.hashpw(password.encode(), salt)
Speichere den hashed_password
und den salt
in der Datenbank.
2. Pepper hinzufügen:
pepper = "geheimerWert123" # Sicher speichern!
combined_password = password + pepper
hashed_password_with_pepper = bcrypt.hashpw(combined_password.encode(), salt)
Der pepper
sollte sicher außerhalb der Datenbank gespeichert werden.
3. Validierung beim Login:
- Hole den Salt aus der Datenbank.
- Kombiniere das eingegebene Passwort mit dem geheimen Pepper.
- Vergleiche den neu berechneten Hash mit dem gespeicherten Hash.
Zusätzliche Hinweise
- Verwende sichere Hashing-Algorithmen wie Argon2, bcrypt oder PBKDF2, da diese speziell für die Passwortsicherheit entwickelt wurden.
- Bei Änderungen des Peppers müssen alle gespeicherten Passwörter neu gehasht werden.
- Vermeide es, Salt und Pepper an denselben Speicherort zu legen, um das Risiko einer Kompromittierung zu minimieren.
Durch die Kombination von Salt und Pepper wird die Sicherheit von Passwörtern erheblich gesteigert, selbst wenn ein Angreifer Zugriff auf die Datenbank erhält.