Sicherheitsleitfaden
Clientseitige Passwortgenerierung mit Web Crypto und Rejection Sampling
Ein technisches Whitepaper, das das browserbasierte Passwortgenerierungsmodell von PwdGen, Entropiegrenzen, Rejection Sampling und Datenschutzgrenzen erläutert.
Zusammenfassung
PwdGen verwendet eine clientseitige Referenzgenerierungsmethode: Der Browser oder die Laufzeitumgebung Web Crypto liefert zufällige Bytes, Rejection Sampling bildet diese Bytes auf unverzerrte begrenzte Indizes ab, und ein Fisher-Yates-Shuffle verteilt die erforderlichen Zeichenklassen über das endgültige Passwort. Die Methode ist bewusst klein, auditierbar und reproduzierbar über die Web-App, den API-Adapter, die CLI und das vorbereitete pwdgen-core-Paket.
Dieses Dokument beschreibt das technische Modell. Es stellt keinen Anspruch auf ein neues kryptografisches Primitiv, einen formalen Standard oder ein unabhängiges Drittaudit dar.
Zufallsquelle
Der Generator fordert kryptografisch starke Zufallswerte über crypto.getRandomValues() an. Web-Crypto-Implementierungen sollten einen kryptografisch sicheren Pseudozufallszahlengenerator verwenden, der mit hochwertiger Entropie aus der Hostumgebung gespeist wird. In der Praxis delegieren Browser diese Aufgabe an Betriebssystemfunktionen und plattformspezifische Kryptografieanbieter.
PwdGen behauptet nicht, dass jeder Passwortgenerierungsaufruf direkt eine Hardware-Rauschquelle abtastet. Die sicherere und genauere Aussage ist, dass der Browser CSPRNG-Ausgabe über die Web Crypto API bereitstellt und PwdGen nicht-kryptografische Pseudozufallsschnittstellen vermeidet.
Warum nicht Math.random()
Math.random() ist nicht für sicherheitskritische Anwendungen spezifiziert. Es eignet sich für Simulationen, visuelle Effekte und gewöhnliches randomisiertes UI-Verhalten, bietet aber nicht die Garantien, die für Passwörter, Reset-Codes, Signierschlüssel oder andere Anmeldeinformationen erwartet werden.
PwdGen behandelt unsichere Pseudozufalls-Fallbacks als Fehlerzustand. Wenn Web Crypto nicht verfügbar ist, sollte der Generator einen Kompatibilitätsfehler anzeigen, anstatt stillschweigend schwache Anmeldeinformationen zu erzeugen.
Rejection Sampling
Zufällige Bytes und Ganzzahlen werden normalerweise aus einem Zweierpotenzbereich gezogen. Passwortalphabete haben selten eine Größe, die diesen Bereich genau teilt. Eine direkte Modulo-Operation kann einige Zeichen geringfügig wahrscheinlicher machen als andere.
PwdGen verwendet Rejection Sampling:
- Ziehen einer 32-Bit-unsigned Ganzzahl.
- Berechnen des größten Vielfachen der Alphabetgröße, das in den 32-Bit-Bereich passt.
- Verwerfen von Werten oberhalb dieser Grenze.
- Anwenden von Modulo nur auf den verbleibenden vollständigen Bereich.
Dies hält die begrenzte Zeichenauswahl gleichmäßig, ohne messbare Modulo-Verzerrung einzuführen.
Zeichenabdeckung und Entropie
Für konfigurierte Passwortrichtlinien wählt der Generator zunächst ein Zeichen aus jeder aktivierten Klasse aus, füllt den Rest aus dem kombinierten Alphabet und mischt dann das Ergebnis. Dies hilft, die Passwortregeln des Zielsystems zu erfüllen, ohne eine vorhersagbare Klasse an einer vorhersagbaren Position zu platzieren.
Die theoretische Entropieschätzung ist:
bits = length × log2(uniqueAlphabetSize)
Dieser Wert ist eine Obergrenze für gleichmäßig zufällige Auswahlen aus dem konfigurierten Alphabet. Er berücksichtigt keine Passwortwiederverwendung, benutzerbearbeitete Ausgaben, kompromittierte Geräte, durchgesickerte Passwörter oder schwache Speicherung durch den Zieldienst.
Datenschutzgrenze
In den Browser-Tools verbleiben generierte Werte im Seitenspeicher und in sichtbaren Ergebnisfeldern, bis der Benutzer sie kopiert oder exportiert. Die lokalen Generatoren senden generierte Passwörter nicht an PwdGen-Server, setzen sie nicht in URLs oder schreiben sie in Analyseereignisse.
Diese Grenze schützt nicht vor bösartigen Browsererweiterungen, Zwischenablage-Managern, Betriebssystemkompromittierung, Bildschirmaufnahmen, Phishing-Seiten oder einem Benutzer, der ein generiertes Passwort in ein unsicheres Ziel einfügt.
Reproduzierbare Implementierung
Das öffentliche pwdgen-cli-Paket und das vorbereitete pwdgen-core-Paket existieren, um das Generierungsmodell außerhalb der Webseite überprüfbar zu halten. Unit-Tests decken Zeichenklasseninklusion, ausgeschlossene Zeichen, ungültige Konfigurationen, Entropieformeln und das Fehlen unsicherer Pseudozufalls-Fallback-Codepfade ab.
Das Ziel ist nicht, PwdGen zu einem privaten Standard zu machen. Das Ziel ist, die Implementierung klein genug zu machen, dass Entwickler sie lesen, testen und ersetzen können, wenn ihre Umgebung eine andere Vertrauensgrenze erfordert.