API-Schlüssel-Generator
Zufällige API-Schlüssel in base62, Hex oder base64url erzeugen, mit optionalem Präfix und dem SHA-256-Hash für Ihren Server.
So funktioniert es
Wählen Sie Format und Stärke, fügen Sie bei Bedarf ein Präfix hinzu, und „Erzeugen“ erstellt den Schlüssel mit crypto.getRandomValues(), dem kryptografischen Zufallsgenerator des Browsers. „Kopieren“ neben einem Schlüssel kopiert diesen Schlüssel; „Alle kopieren“ legt alle Schlüssel in die Zwischenablage, einen pro Zeile. Bis zu 20 Schlüssel auf einmal, jeder unabhängig gezogen.
Die Stärke ist die Anzahl zufälliger Bits, die Länge ergibt sich aus dem Alphabet. Bei 256 Bit hat ein hexadezimaler Schlüssel 64 Zeichen, base62 (a–z, A–Z, 0–9) und base64url (zusätzlich - und _) brauchen 43. Jedes base62-Zeichen stammt aus einem Zufallsbyte, Bytes ab 248 werden verworfen, sodass alle 62 Zeichen exakt gleich wahrscheinlich sind; die Zeile über den Schlüsseln zeigt die tatsächliche Bitzahl.
Ein Präfix wie sk_live_ wird unverändert vor den zufälligen Teil geschrieben. Es ist nicht geheim und macht den Schlüssel nicht stärker, zeigt aber einem Menschen, wofür der Schlüssel ist, und lässt Secret-Scanner einen geleakten Schlüssel im Code erkennen: Stripe-Schlüssel beginnen mit sk_, pk_ oder rk_, gefolgt von test_ oder live_, GitHub-Tokens mit ghp_, gho_ und ähnlich. Der Unterstrich sorgt außerdem dafür, dass ein Doppelklick den ganzen Schlüssel markiert.
Mit der SHA-256-Option erhält jeder Schlüssel seinen Hash, berechnet über den ganzen Schlüssel einschließlich Präfix. Speichern Sie auf dem Server nur diesen Hash: Kommt eine Anfrage, hashen Sie den mitgeschickten Schlüssel und vergleichen. Weil der Schlüssel lang und zufällig ist, genügt hier ein schneller Hash, anders als bei Passwörtern, die einen langsamen brauchen. Nichts wird gesendet; die Schlüssel existieren nur auf dieser Seite, bis Sie sie kopieren.
Beispiel
Erzeugt einen base62-Schlüssel mit 256 Bit und dem Präfix sk_test_. Jeder Durchlauf ergibt einen anderen Schlüssel.
256 Bit in base6243 Buchstaben und Ziffern: 43 × 5,95 Bit ≈ 256 Bit.256 Bit hexadezimal64 Zeichen aus 0–9 und a–f: je 4 Bit.128 Bit in base64url22 Zeichen, 132 Bit: base64url kann nur auf ganze Zeichen zu 6 Bit aufrunden.Präfix sk_test_sk_test_ gefolgt vom zufälligen Teil; das Präfix fügt 8 Zeichen hinzu, aber keine Stärke.
Häufige Fragen
Wie viele Bits braucht ein API-Schlüssel?
128 zufällige Bits sind schon weit jenseits des Erratbaren: Selbst mit einer Milliarde Versuchen pro Sekunde würde es länger als das Alter des Universums dauern, einen nennenswerten Teil durchzuprobieren. 256 Bit sind hier voreingestellt, weil ein längerer Schlüssel nur ein paar Zeichen kostet. GitHub hat seine Tokens 2021 auf 178 Bit umgestellt.
Welches Format soll ich wählen?
base62 lässt sich am bequemsten kopieren: keine Sonderzeichen, die eine URL, eine Shell oder eine Konfigurationsdatei besonders behandeln. Hexadezimal ist länger, funktioniert aber dort, wo nur 0–9 und a–f erlaubt sind. base64url ist am kürzesten und URL-sicher, aber das - kann die Doppelklick-Markierung unterbrechen, und manche Validatoren lehnen es ab.
Warum nur den Hash speichern?
Gelangt die Datenbank nach außen, lassen sich mit den Hashes weder Ihre API aufrufen noch die Schlüssel zurückgewinnen. Das ist dieselbe Idee wie bei Passwörtern; der Unterschied ist, dass ein zufälliger 256-Bit-Schlüssel nicht zu erraten ist, daher genügt SHA-256 und ein langsamer Hash wie Argon2 ist nicht nötig.
Taugt eine UUID als API-Schlüssel?
Eine UUID der Version 4 hat nur 122 zufällige Bits und eine feste, erkennbare Form, und sie wurde als Kennung entworfen, nicht als Geheimnis. Für Schlüssel, die Zugriff gewähren, nehmen Sie einen eigenen Zufallsschlüssel wie diese, mit Präfix, wenn er erkennbar sein soll.
Wann brauche ich 384 oder 512 Bit?
Für Geheimnisse, die JSON Web Tokens mit HMAC signieren. RFC 7518 verlangt einen Schlüssel, der mindestens so lang ist wie die Hash-Ausgabe: 256 Bit für HS256, 384 für HS384 und 512 für HS512. Für einen gewöhnlichen API-Schlüssel sind 256 Bit schon mehr als genug.