Zwei-Faktor-Authentifizierung und Passwortsicherheit
Sie haben eine Webanwendung erstellt und Benutzer registrieren sich. Aber sind ihre Konten wirklich sicher? Schwache Passwörter und fehlende Zwei-Faktor-Authentifizierung (2FA) gehören zu den einfachsten Wegen für Angreifer, einzudringen. In diesem Leitfaden gehen wir praktische, zeitlose Best Practices für Passwortsicherheit und 2FA durch, die Sie heute umsetzen können.
Warum Passwortsicherheit immer noch wichtig ist
Trotz jahrelanger Warnungen bleiben Passwörter die primäre Authentifizierungsmethode für die meisten Webanwendungen. Angreifer wissen das und zielen durch Phishing, Credential Stuffing und Brute Force auf Passwörter ab. Ein einziges kompromittiertes Passwort kann zur Kontoübernahme, Datendiebstahl und Reputationsschäden führen.
Starke Passwortrichtlinien und 2FA erhöhen die Hürde für Angreifer erheblich. Sehen wir uns an, wie man beides richtig macht.
Passwortspeicherung: Hashing richtig gemacht
Speichern Sie Passwörter niemals im Klartext. Hashen Sie sie immer mit einem starken, langsamen Algorithmus, der für Passwörter entwickelt wurde. Schnelle Hashes wie SHA-256 sind ungeeignet, da sie schnelle Brute-Force-Angriffe ermöglichen.
Empfohlene Algorithmen:
- Argon2id – Gewinner des Password Hashing Competition, widerstandsfähig gegen GPU- und Seitenkanalangriffe.
- bcrypt – Weit verbreitet, bewährt und von Natur aus langsam.
- scrypt – Speicherhart, gut zur Verhinderung hardwarebeschleunigter Angriffe.
Beispiel mit bcrypt in Node.js:
const bcrypt = require('bcrypt');
const saltRounds = 12;
async function hashPassword(password) {
return await bcrypt.hash(password, saltRounds);
}
async function verifyPassword(password, hash) {
return await bcrypt.compare(password, hash);
}
Verwenden Sie immer ein eindeutiges Salt pro Passwort (die meisten Bibliotheken erledigen dies automatisch). Passen Sie den Kostenfaktor so an, dass das Hashing auf Ihrem Server ~100-500ms dauert.
Passwortrichtlinien, die wirklich helfen
Vergessen Sie komplexe Regeln wie „muss ein Symbol und eine Zahl enthalten“. Moderne Empfehlungen (NIST SP 800-63B) raten zu:
- Mindestlänge von 8 Zeichen, aber fördern Sie Passphrasen (z. B. 4+ zufällige Wörter).
- Abgleich mit Listen kompromittierter Passwörter (z. B. Have I Been Pwned API).
- Kein erzwungener periodischer Ablauf, es sei denn, eine Kompromittierung wird vermutet.
- Erlauben Sie alle druckbaren ASCII-Zeichen und Leerzeichen.
- Begrenzen Sie die Anmeldeversuche, um Brute Force zu verhindern.
Implementieren Sie einen einfachen Stärkeindikator, der Feedback gibt, ohne legitime Passwörter zu blockieren.
Methoden der Zwei-Faktor-Authentifizierung (2FA)
2FA fügt einen zweiten Faktor hinzu: etwas, das Sie haben (Telefon, Hardware-Schlüssel) oder etwas, das Sie sind (Biometrie). Hier sind gängige Methoden, geordnet nach Sicherheit:
| Methode | Sicherheit | Benutzerfreundlichkeit |
|---|---|---|
| Hardware-Sicherheitsschlüssel (WebAuthn/FIDO2) | Hoch | Mittel |
| Authenticator-Apps (TOTP) | Hoch | Hoch |
| Push-Benachrichtigungen | Mittel | Hoch |
| SMS-Codes | Niedrig | Hoch |
SMS ist anfällig für SIM-Swapping und Abfangen. Bevorzugen Sie TOTP oder WebAuthn, wenn möglich.
TOTP-basierte 2FA implementieren
TOTP (Time-based One-Time Password) ist ein guter Kompromiss aus Sicherheit und Benutzerfreundlichkeit. Hier ist ein grober Workflow:
- Generieren Sie einen geheimen Schlüssel für den Benutzer (z. B. 32 zufällige Bytes, base32-kodiert).
- Erstellen Sie eine otpauth://-URI und zeigen Sie einen QR-Code an, den der Benutzer mit einer Authenticator-App scannen kann.
- Überprüfen Sie, ob der Benutzer einen gültigen Code generieren kann, bevor Sie 2FA aktivieren.
- Speichern Sie das Geheimnis sicher (verschlüsselt at rest).
- Stellen Sie Backup-Codes für die Kontowiederherstellung bereit.
Fordern Sie beim Login nach der Passwortüberprüfung den TOTP-Code an. Verifizieren Sie ihn mit einer Bibliothek wie otplib oder speakeasy.
const { authenticator } = require('otplib');
// Generate secret
const secret = authenticator.generateSecret();
// Verify token
const isValid = authenticator.verify({ token: userToken, secret });
Erlauben Sie ein kleines Zeitfenster (z. B. ±1 Intervall), um Uhrenabweichungen auszugleichen.
WebAuthn: Die Zukunft der Authentifizierung
WebAuthn (Teil von FIDO2) ermöglicht passwortlose und Zwei-Faktor-Authentifizierung mit Hardware-Schlüsseln oder Plattform-Authenticatoren (Touch ID, Windows Hello). Es ist phishing-resistent, da die Anmeldeinformationen an den Ursprung gebunden sind.
Die Implementierung von WebAuthn erfordert:
- Serverseitige Challenge-Generierung und -Verifizierung.
- Clientseitiges JavaScript unter Verwendung der WebAuthn-API.
- Speichern von öffentlichen Schlüsseln und Credential-IDs für jeden Benutzer.
Bibliotheken wie SimpleWebAuthn erleichtern dies. Obwohl komplexer als TOTP, bietet WebAuthn den stärksten Schutz.
Rate Limiting und Kontosperrung
Auch mit 2FA müssen Sie Brute-Force-Angriffe auf Passwörter verhindern. Implementieren Sie:
- Rate Limiting pro IP und pro Konto (z. B. 5 Versuche pro Minute).
- Exponentielles Backoff nach fehlgeschlagenen Versuchen.
- Kontosperrung nach wiederholten Fehlern, mit einem sicheren Entsperrprozess (z. B. E-Mail-Verifizierung).
- CAPTCHA nach einigen Fehlversuchen.
Achten Sie darauf, legitime Benutzer nicht dauerhaft auszusperren; verwenden Sie temporäre Sperren und benachrichtigen Sie den Benutzer.
Sicherer Passwort-Reset
Passwort-Reset-Abläufe sind ein häufiger Angriffsvektor. Befolgen Sie diese Regeln:
- Verwenden Sie ein einmaliges, zeitlich begrenztes Token, das per E-Mail gesendet wird.
- Verraten Sie nicht, ob eine E-Mail im System existiert.
- Fordern Sie den Benutzer zur erneuten Authentifizierung auf, wenn er bereits angemeldet ist.
- Invalidieren Sie alle Sitzungen nach einem Passwort-Reset.
Benutzer schulen, ohne sie zu beschuldigen
Sicherheit ist eine gemeinsame Verantwortung. Geben Sie klare Anleitungen:
- Verwenden Sie einen Passwort-Manager, um einzigartige Passwörter zu generieren und zu speichern.
- Aktivieren Sie 2FA, wo immer möglich.
- Seien Sie wachsam gegenüber Phishing-Versuchen.
In-App-Tipps und eine dedizierte Sicherheitsseite können helfen.
FAQ
Ist SMS-basierte 2FA besser als keine 2FA?
Ja, SMS-2FA ist besser als nichts, aber sie ist anfällig für SIM-Swapping und Abfangen. Bevorzugen Sie TOTP oder WebAuthn für stärkere Sicherheit.
Wie oft sollte ich Passwort-Hashing-Algorithmen rotieren?
Sie müssen nicht rotieren, es sei denn, eine Schwachstelle wird gefunden. Sie können Passwörter jedoch bei erfolgreicher Anmeldung neu hashen, wenn Sie Parameter aktualisieren (z. B. Erhöhung der bcrypt-Kosten).
Kann ich 2FA mit OAuth oder Social Login verwenden?
Ja, aber 2FA wird normalerweise vom Identitätsanbieter verwaltet. Wenn Sie Social Login verwenden, stellen Sie sicher, dass Ihr eigener Kontowiederherstellungsprozess sicher ist.
Bereit, die Sicherheit Ihrer Anwendung zu verbessern? Beginnen Sie noch heute mit der Implementierung von starkem Passwort-Hashing und TOTP-basierter 2FA. Weitere Entwickler-Tools finden Sie in unserem JSON Formatter, um API-Antworten schnell zu debuggen.