Generieren Sie ein sicheres Passwort
Zieht zeichenweise ein Passwort aus dem kryptografischen Zufallszahlengenerator des Browsers und meldet die Entropie des Generators, der es erzeugt hat, statt eine Vermutung über die Stärke der Zeichenfolge. Das Passwort wird niemals in die Adressleiste geschrieben, niemals gespeichert und niemals irgendwohin gesendet.
Die Ergebnisse werden ohne Gewähr für ihre Richtigkeit bereitgestellt. Die Methode und ihre Quellen stehen unten, damit Sie den Rechenweg prüfen können.
So funktioniert es
Was das bewirkt
Es entnimmt dem kryptografischen Zufallszahlengenerator des Browsers zeichenweise ein Passwort und teilt Ihnen dann mit, wie viel Zufälligkeit tatsächlich darin enthalten ist. Die zweite Hälfte ist der Teil, den die meisten Generatoren falsch machen, und es ist der einzige Teil, dem man vertrauen kann.
Die Stärke eines Passworts ist keine Eigenschaft der Zeichenfolge. Es ist eine Eigenschaft des Prozesses, der es erzeugt hat: wie viele gleichwahrscheinliche Passwörter stattdessen hätten herauskommen können. Tr0ub4dor&3 sieht stark aus, ist es aber nicht, denn der Prozess, der es hervorgebracht hat, bestand darin, dass eine Person in einem Wörterbuchwort Buchstaben durch Ziffern ersetzte. Zwanzig einheitlich zufällig gezogene Zeichen sind stark, selbst wenn einer von ihnen zufällig etwas buchstabiert, da ein Angreifer keine Möglichkeit hat, zu wissen, dass sie es buchstabieren.
Die Methode
Jedes Byte stammt von crypto.getRandomValues, definiert in der Web Cryptography-Spezifikation und unterstützt durch den kryptografischen Generator des Betriebssystems. Math.random wird nirgendwo verwendet, und es gibt einen Test, der fehlschlägt, falls dies jemals der Fall sein sollte. Math.random ist ein schneller, nicht kryptografischer Algorithmus, dessen gesamter interner Zustand aus einigen seiner eigenen Ausgaben wiederhergestellt werden kann, was bedeutet, dass ein Passwort ausreichen kann, um das nächste vorherzusagen.
Der zweite Fehler passiert normalerweise, wenn man ein zufälliges Byte in ein zufälliges Zeichen umwandelt. Ein Byte ist 0 bis 255 und das Alphabet besteht hier aus 90 Zeichen, und 256 ist kein Vielfaches von 90. Wenn man also den Rest direkt nimmt, werden die ersten 76 Zeichen des Alphabets dreimal pro 256 Bytes zurückgegeben und die restlichen 14 nur zweimal – eine 50-prozentige Tendenz zum Anfang des Alphabets. Stattdessen wird jedes Byte bei oder über 180, dem größten ganzzahligen Vielfachen von 90, verworfen und ein anderes gezogen. Die Kosten liegen deutlich unter einem zusätzlichen Byte pro Zeichen; Der Vorteil besteht darin, dass jeder Charakter genauso wahrscheinlich ist wie jeder andere.
„Mindestens eines von jeder Art“ wird durch Ablehnung und nicht durch Reparatur behandelt. Die übliche Abkürzung besteht darin, ein Zeichen jeder erforderlichen Klasse an einer festen Position zu platzieren und den Rest zu mischen, was zu einer Verteilung führt, die nicht gleichmäßig ist und deren Entropie niemand angeben kann. Dieses Tool zeichnet einen ganzen Kandidaten, überprüft ihn und wirft den Kandidaten weg, wenn eine Klasse fehlt, und zeichnet einen anderen. Dadurch wird der Satz gültiger Passwörter gleichmäßig abgetastet, was bedeutet, dass die Entropie des Ergebnisses genau dem Logarithmus zur Basis 2 der Anzahl der vorhandenen gültigen Passwörter entspricht.
Sie zu zählen ist Inklusion und Exklusion gegenüber den Klassen:
valid = SUM over subsets S of the classes of (-1)^|S| x (A - size(S))^L
A = alphabet size, L = length, size(S) = characters in the classes in S
bits = log2(valid)
= L x log2(A) + log2( SUM (-1)^|S| ((A - size(S)) / A)^L )
In der zweiten Zeile wird der Code ausgeführt. Direkt berechnet ist die erste eine Differenz zwischen Zahlen um zehn bis zweihundertfünfzig, die keine Gleitkommazahl aufnehmen kann; Wenn man zunächst durch A^L dividiert, stellt jeder Term ein Verhältnis zwischen Null und Eins dar, und die Summe bleibt bei jeder Länge genau.
Vor dem Weiterlesen
Zwanzig Zeichen aus einem 90-Zeichen-Alphabet sind 129,8371 Bit. Dann kreuzen Sie von jeder Art mindestens eins an. Was kostet diese Anforderung?
0,148 Bit, was 129,8371 auf 129,6891 reduziert. Es ist so klein, weil 90,25 % der zwanzigstelligen Zeichenfolgen zufällig bereits alle vier Arten enthalten, sodass die Regel weniger als ein Zehntel der Möglichkeiten verwirft. Wenn Sie es mit dem vergleichen, was ein einzelnes zusätzliches Zeichen kostet – 6,49 Bit, also vierzigmal so viel –, erweist sich die Komplexitätsrichtlinie, auf der Ihre Bank besteht, als Rundungsfehler, während die Längenbeschränkung, die sie zusätzlich auferlegt, die Sache ist, die Sie tatsächlich kostet. Das Tool ermittelt diese Zahl ehrlich, indem es ganze Kandidaten zieht und ungültige verwirft. Das Ergebnis ist also eine einheitliche Stichprobe des gültigen Satzes und seine Entropie ist genau log2 der Anzahl der vorhandenen gültigen Passwörter.
byte = 0 to 255, alphabet = 90Jedes Byte stammt von crypto.getRandomValues. Math.random wird nirgendwo verwendet und ein Test schlägt fehl, falls dies jemals der Fall sein sollte.
character = byte % 90 <- wrong256 ist kein Vielfaches von 90, daher werden die ersten 76 Zeichen dreimal pro 256 Bytes zurückgegeben und die anderen 14 nur zweimal. Eine 50-prozentige Ausrichtung auf den Anfang des Alphabets.
if (byte >= 180) draw another180 ist das größte ganze Vielfache von 90 unter 256. Das Wegwerfen des Rests macht den Rest gleichmäßig.
character = byte % 90Jetzt ist jeder Charakter genauso wahrscheinlich wie jeder andere. Die Kosten liegen deutlich unter einem zusätzlichen Byte pro Zeichen.
Ein gelungenes Beispiel
Zwanzig Charaktere, alle vier Arten eingeschaltet, Doppelgänger erlaubt, mindestens einer von jeder Art erforderlich.
| Alphabet | 26 + 26 + 10 + 28 = 90 |
| Unbeschränkte Entropie | 20 x log2(90) = 129,8371 Bit |
| Anteil der Saiten, die alle vier Arten enthalten | 90,25 % |
| Entropie wie erzeugt | 129,6891 Bit, angezeigt als 129,7 |
| Durchschnittliche Schätzungen erforderlich | 2 hoch 128,6891 |
| Bei 100 Milliarden Schätzungen pro Sekunde | 174 Trillionen Jahre |
Die Regel, die die Komplexitätsrichtlinie einer Website erfüllt, kostet also 0,148 Bit, was einen Rundungsfehler im Vergleich zu dem, was oft angenommen wird, und dem, was ein einzelnes zusätzliches Zeichen kostet, von 6,49 Bit darstellt.
Die gleichen Einstellungen in anderen Längen:
| Länge | Entropie | Durchschnittliche Zeit zum Erraten |
|---|---|---|
| 8 | 50,9 Bit | 3 Stunden |
| 12 | 77,4 Bit | 32,1 Tausend Jahre |
| 16 | 103,6 Bit | 2,46 Billionen Jahre |
| 20 | 129,7 Bit | 174 Trillionen Jahre |
| 128 | 831,0 Bit | 2,2 x 10^231 Jahre |
Dies sind die gleichen Zahlen, die in der Testdatei dieses Tools angegeben sind. Wenn sich also die Formel jemals ändert, ohne dass sich diese Seite mit ändert, schlägt der Build fehl.
Was es nicht tut
Es vergleicht das Passwort nicht mit einem Verstoßkorpus, und das ist auch nicht nötig: Ein zufällig aus 90 Zeichen gezogenes Passwort ist noch nie in einem solchen Korpus aufgetaucht. Es speichert nichts, daher gibt es keinen Verlauf und keine Möglichkeit, ein Passwort wiederherzustellen, wenn Sie den Tab schließen. Kopieren Sie es zuerst in einen Passwort-Manager. Es weiß nicht, wie das andere Ende das speichert, was Sie ihm geben, was die Annahme ist, die die Zeit zum Erraten am meisten verschiebt: 100 Milliarden Vermutungen pro Sekunde sind richtig für einen schnellen ungesalzenen Hash und äußerst pessimistisch für Argon2.
Und es kann auch nicht helfen, wenn Passwörter tatsächlich auf zwei Arten scheitern. Durch die Wiederverwendung werden aus einer Sicherheitsverletzung viele und beim Phishing wird ein 128-Bit-Geheimnis ebenso leicht preisgegeben wie ein vierstelliges. Die Entropie ist eine Untergrenze für den Aufwand beim Erraten und kein Maß dafür, wie sicher ein Konto ist.
So wird es gemacht
- Erstellen Sie das Alphabet, indem Sie die aktivierten Zeichenklassen zusammenfügen – 26 Kleinbuchstaben, 26 Großbuchstaben, 10 Ziffern und 28 ASCII-Satzzeichen, wobei die beiden Anführungszeichen, der Backtick und der Backslash weggelassen werden.
- Wenn ähnlich aussehende Zeichen ausgeschlossen sind, entfernen Sie das große i, das kleine L, die Eins, den senkrechten Strich, die Null und das große O aus diesem Alphabet, bevor etwas anderes passiert.
- Berechnen Sie die Ablehnungsgrenze – das größte ganze Vielfache der Alphabetgröße, das nicht größer als 256 ist. Bei einem Alphabet mit 90 beträgt diese Grenze 180.
- Zeichnen Sie ein Byte aus crypto.getRandomValues. Verwerfen Sie es, wenn es den Grenzwert erreicht oder überschreitet, da das Zusammenfügen mit einem Rest dazu führen würde, dass die ersten paar Zeichen des Alphabets wahrscheinlicher sind als der Rest. Andernfalls übernehmen Sie das Zeichen am Rest dieses Bytes.
- Wiederholen Sie diesen Vorgang, bis der Kandidat die gewünschte Länge hat.
- Wenn mindestens eine Sorte von jeder Art erforderlich ist und dem Kandidaten eine Sorte fehlt, werfen Sie den gesamten Kandidaten weg und zeichnen Sie eine neue. Reparieren Sie es nicht, indem Sie ein Zeichen ersetzen, denn dadurch entsteht eine Verteilung, deren Entropie niemand angeben kann.
- Zählen Sie die Passwörter, die die Einstellungen durch Ein- und Ausschluss über die Klassen erzeugen können, und geben Sie den Logarithmus zur Basis 2 dieser Zählung als Entropie in Bits an.
Wovon es ausgeht
- Die Entropiezahl beschreibt den Generator, nicht den String. Eine Folge von 20 Kleinbuchstaben ist genauso stark wie jede andere Darstellung mit den gleichen Einstellungen, da ein Angreifer keine Möglichkeit hat zu wissen, dass es so herausgekommen ist.
- Wenn von jeder Art mindestens eines erforderlich ist, verringert sich die Anzahl der Passwörter, die der Generator erzeugen kann, und somit die Entropie. Dieses Tool meldet den reduzierten Wert; Die meisten Generatoren melden den größeren.
- Die Zeit zum Erraten geht von 100 Milliarden Schätzungen pro Sekunde aus, was einem Offline-Angriff mit handelsüblicher Grafikhardware gegen einen schnellen, ungesalzenen Hash entspricht. Ein mit bcrypt oder Argon2 gespeichertes Passwort ist um viele Größenordnungen langsamer angreifbar, und eine ratenbegrenzte Anmeldung ist wiederum langsamer.
- Die angezeigte Zeit ist der Durchschnitt, nicht der schlimmste Fall – die Hälfte des Suchraums oder zwei hoch eins weniger als die Entropie.
- Zwei Anführungszeichen, der Backtick und der Backslash, werden im Symbolsatz weggelassen, da sie kaputt gehen, wenn ein Passwort in einen Shell-Befehl oder eine JSON-Datei eingefügt wird. Das kostet etwa 0,06 Bit pro Zeichen.
- Die Entropie sagt nichts über Wiederverwendung, Phishing oder einen Verstoß am anderen Ende aus. Ein perfektes Passwort, das an zwei Stellen verwendet wird, ist ein Passwort.
Fragen
Wird das Passwort irgendwohin gesendet oder gespeichert?
Nein. Es wird von Ihrem Browser generiert und existiert nur auf der Seite vor Ihnen. Es gibt keinen Server, an den es gesendet werden kann – die gesamte Site besteht aus statischen Dateien. Die Einstellungen wandern in der Adressleiste, sodass ein Link dieselben Optionen reproduziert, das Passwort selbst jedoch bewusst ausgelassen wird, sodass durch das Kopieren des Links das Rezept und nicht das Geheimnis weitergegeben wird.
Warum ist die Entropie hier geringer als auf anderen Passwortseiten?
Weil „mindestens eines von jeder Art“ aktiviert ist und diese Regel die Anzahl der Passwörter, die der Generator erzeugen kann, verringert. Bei 20 Zeichen wird etwa jede zehnte Zeichenfolge ausgeschlossen, was 0,15 Bit kostet. Die meisten Generatoren legen die Regel fest und geben dann den Wert für eine uneingeschränkte Ziehung an, der etwas zu hoch ist. Schalten Sie die Regel aus und die beiden Figuren stimmen überein.
Reichen acht Zeichen?
Nein. Acht Zeichen aus allen 90 ergeben 50,9 Bit, was etwa drei Stunden Raten bei 100 Milliarden Versuchen pro Sekunde entspricht. Zwölf Zeichen sind 77,4 Bit und bei gleicher Rate etwa 32.000 Jahre; sechzehn sind 103,6 Bit. Die Länge ist die einzige Einstellung, die die Antwort um Größenordnungen ändert.
Verwendet dies Math.random?
Niemals. Jedes Byte stammt von crypto.getRandomValues, dem kryptografischen Generator der Plattform. Math.random ist ein schneller, nicht kryptografischer Algorithmus mit einem kleinen internen Zustand, der aus einer Handvoll seiner eigenen Ausgaben wiederhergestellt werden kann, sodass ein daraus erstelltes Passwort von jedem reproduziert werden kann, der ein anderes sieht. In der Testdatei dieses Tools gibt es einen Test, der fehlschlägt, wenn Math.random jemals aufgerufen wird.
Sollte ich die Option „ähnliche Zeichen weglassen“ aktivieren?
Nur für ein Passwort muss eine Person es lesen und erneut eingeben – eine WLAN-Passphrase auf einem Router-Etikett, ein temporäres Passwort, das aus einer Telefonleitung gelesen wird. Es entfernt I, l, 1, die Pipe, 0 und O, wodurch das Alphabet von 90 auf 84 verkleinert wird und etwa 0,1 Bit pro Zeichen kostet. Für alles, was direkt in einen Passwort-Manager gelangt, ist es ein sinnloser Verlust.
Wie lang sollte ein Passwort eigentlich sein?
Lange genug, dass die Entropie für ein wichtiges Konto mehr als 80 Bit beträgt (in diesen Einstellungen 13 Zeichen) und für ein Hauptkennwort oder einen Verschlüsselungsschlüssel mehr als 128 Bit beträgt (20). Beide Schwellenwerte werden in der Testdatei dieses Tools festgelegt. Darüber hinaus ist das Passwort bei weitem nicht mehr der schwächste Teil des Systems.
Quellen
Methode verfasst und geprüft von Tessalor am 30.07.2026.