Erzeugen Sie kryptografisch starke Zufalls-Tokens, API-Schlüssel, Geheimnisse und Nonces in Ihrem Browser. Wählen Sie Länge, Zeichensatz und wie viele erzeugt werden sollen.
Zufällige, unberechenbare Tokens. Der gesamte Zufall stammt aus crypto.getRandomValues des Browsers, derselben Quelle, die Browser für TLS-Schlüssel verwenden. Nichts verlässt Ihr Gerät.
Was einen Token sicher macht
Zufällig ist nicht dasselbe wie unberechenbar
Die meisten Sprachen liefern zwei sehr verschiedene Zufallszahlengeneratoren. Math.random(), rand() und Kollegen sind schnelle Pseudozufallsgeneratoren, die aus etwas Billigem wie der Uhr gesät werden. Sie sind in Ordnung, um eine Playlist zu mischen, und desaströs für einen Token, weil ein Angreifer, der ein paar Ausgaben beobachtet, oft den internen Zustand wiederherstellen und jeden Wert reproduzieren kann, den der Generator jemals ausspucken wird.
Ein kryptografisch sicherer Generator ist so gebaut, dass das Sehen vergangener Ausgabe nichts über zukünftige Ausgabe verrät. Im Browser ist das crypto.getRandomValues(), das aus dem Entropie-Pool des Betriebssystems zieht. Dieses Werkzeug verwendet ausschließlich ihn. Wenn Sie in Ihrem eigenen Code Tokens erzeugen, sind die Entsprechungen secrets in Python, crypto/rand in Go und java.security.SecureRandom in Java — niemals das einfache random-Modul oder Math.random().
Modulo-Bias vermeiden
Gute Zufallsbytes zu haben ist nur die halbe Arbeit. Die naive Art, ein Zeichen zu wählen, ist bytes[i] % alphabet.length, was das Ergebnis leise verzerrt, sobald die Alphabetgröße 256 nicht sauber teilt. Bei einem 62-Zeichen-Alphabet kommen die ersten 8 Zeichen etwas häufiger vor als der Rest — ein kleiner Bias, aber er verringert echte Entropie und ist vollständig vermeidbar.
Die Lösung ist Rückweisungs-Stichproben (Rejection Sampling): verwerfen Sie jedes Byte, das in den unvollständigen letzten Block fällt, und ziehen Sie neu. Dieses Werkzeug tut das, sodass jedes Zeichen im gewählten Alphabet gleichermaßen wahrscheinlich ist.
Länge wählen
Die Entropie ist log2(alphabet_größe) * länge Bit. Ein 62-Zeichen-Alphabet liefert etwa 5,95 Bit pro Zeichen, sodass ein 22-stelliger Token etwa 131 Bit trägt — bequem jenseits von Brute-Force. Für alles, was echten Zugriff schützt, ist 128 Bit die übliche Untergrenze; unter etwa 64 Bit wird ein entschlossener Angreifer mit einem schnellen Endpunkt zu einem echten Problem.
Die Alphabetwahl geht meist darum, wo der Token reist. Base64url und Hex überleben URLs, Dateinamen und Header unverändert. Das eindeutige Alphabet lässt Zeichen wie 0/O und 1/l/I weg und lohnt sich für alles, was ein Mensch laut vorliest oder vom Bildschirm abtippt.
FAQ
Wird der Token auf meinem Gerät erzeugt?
Ja, vollständig im Browser mit crypto.getRandomValues(). Nichts wird an einen Server gesendet und nichts protokolliert, sodass der Wert, den Sie sehen, nur Ihnen bekannt ist.
Wie lang sollte ein Token sein?
Für alles, was Zugriff schützt, zielen Sie auf mindestens 128 Bit Entropie: 22 Zeichen bei einem 62-Zeichen-Alphabet oder 32 Hex-Zeichen. Kürzere Werte sind für nicht-sicherheitsrelevante Kennungen in Ordnung.
Warum nicht Math.random() dafür verwenden?
Es ist ein schneller Pseudozufallsgenerator, der aus etwas Billigem wie der Uhr gesät wird. Das Beobachten einer Handvoll Ausgaben kann ausreichen, um seinen Zustand wiederherzustellen und jeden zukünftigen Wert vorherzusagen.
Wofür ist die Option ohne mehrdeutige Zeichen?
Sie entfernt 0/O und 1/l/I, sodass der Token das laute Vorlesen, das Aufschreiben auf Papier oder das Abtippen vom Bildschirm ohne Übertragungsfehler übersteht.
Kann ich das für Passwort-Reset-Links verwenden?
Ja, sofern Sie nur einen Hash des Tokens speichern, eine kurze Ablaufzeit setzen und ihn nach einmaliger Verwendung ungültig machen. Der Zufall hier ist geeignet; der Lebenszyklus ist Aufgabe Ihrer Anwendung.
Könnte derselbe Token jemals zurückkehren?
Bei 128 Bit Entropie ist eine Wiederholung astronomisch unwahrscheinlich, aber das Werkzeug hält keinen Verlauf, sodass es die Eindeutigkeit über Erzeugungen hinweg nicht für Sie verifizieren kann.