Générateur de clés API

Générez des clés API aléatoires en base62, hexadécimal ou base64url, avec un préfixe facultatif et l’empreinte SHA-256 à stocker sur votre serveur.

Le formulaire interactif est prêt lorsque JavaScript est activé.

Mode d’emploi

Choisissez un format et une robustesse, ajoutez un préfixe si vous le souhaitez, et « Générer » crée la clé avec crypto.getRandomValues(), le générateur aléatoire cryptographique du navigateur. « Copier », à côté de chaque clé, copie cette clé ; « Tout copier » met toutes les clés dans le presse-papiers, une par ligne. Jusqu’à 20 clés à la fois, chacune tirée indépendamment.

La robustesse est le nombre de bits aléatoires, et la longueur découle de l’alphabet. À 256 bits, une clé hexadécimale compte 64 caractères, tandis que base62 (a–z, A–Z, 0–9) et base64url (qui ajoute - et _) en demandent 43. Chaque caractère base62 provient d’un octet aléatoire, et les octets à partir de 248 sont écartés : les 62 caractères sont donc exactement équiprobables. La ligne au-dessus des clés indique le nombre réel de bits.

Un préfixe comme sk_live_ est écrit tel quel devant la partie aléatoire. Il n’est pas secret et n’ajoute aucune robustesse, mais il indique à une personne à quoi sert la clé et permet aux outils de détection de secrets de repérer une clé divulguée dans du code : les clés Stripe commencent par sk_, pk_ ou rk_ suivis de test_ ou live_, et les jetons GitHub par ghp_, gho_ et similaires. Le tiret bas garde aussi toute la clé sélectionnée lors d’un double-clic.

Avec l’option SHA-256, chaque clé est accompagnée de son empreinte, calculée sur la clé entière, préfixe compris. N’enregistrez que cette empreinte sur le serveur : quand une requête arrive, calculez l’empreinte de la clé reçue et comparez. Comme la clé est longue et aléatoire, un hachage rapide suffit ici, contrairement aux mots de passe, qui demandent un hachage lent. Rien n’est envoyé : les clés n’existent que sur cette page jusqu’à ce que vous les copiiez.

Exemple

Génère une clé base62 de 256 bits avec le préfixe sk_test_. Chaque essai donne une clé différente.

  • 256 bits en base6243 lettres et chiffres : 43 × 5,95 bits ≈ 256 bits.
  • 256 bits en hexadécimal64 caractères de 0–9 et a–f : 4 bits chacun.
  • 128 bits en base64url22 caractères, 132 bits : base64url ne peut qu’arrondir au caractère entier de 6 bits supérieur.
  • Préfixe sk_test_sk_test_ suivi de la partie aléatoire ; le préfixe ajoute 8 caractères et aucune robustesse.

Questions fréquentes

De combien de bits une clé API a-t-elle besoin ?

128 bits aléatoires sont déjà hors de portée : même à un milliard d’essais par seconde, en parcourir une fraction notable prendrait plus que l’âge de l’univers. 256 bits est la valeur par défaut ici, car une clé plus longue ne coûte que quelques caractères. GitHub a porté ses jetons à 178 bits en 2021.

Quel format choisir ?

Base62 est le plus pratique à copier : aucun symbole qu’une URL, un terminal ou un fichier de configuration traiterait à part. L’hexadécimal est plus long mais passe partout où seuls 0–9 et a–f sont acceptés. base64url est le plus court et sûr dans les URL, mais le - peut interrompre la sélection au double-clic et certains validateurs le refusent.

Pourquoi n’enregistrer que l’empreinte ?

Si la base de données fuit, les empreintes ne permettent pas d’appeler votre API et on ne peut pas en retrouver les clés. C’est la même idée que pour les mots de passe ; la différence est qu’une clé aléatoire de 256 bits ne se devine pas, donc SHA-256 suffit et un hachage lent comme Argon2 n’est pas nécessaire.

Un UUID peut-il servir de clé API ?

Un UUID version 4 n’a que 122 bits aléatoires et une forme fixe et reconnaissable, et il a été conçu comme identifiant, pas comme secret. Pour des clés qui donnent un accès, utilisez une clé aléatoire dédiée comme celles-ci, avec un préfixe si vous voulez qu’elle soit reconnaissable.

Quand faut-il 384 ou 512 bits ?

Pour les secrets qui signent des JSON Web Tokens avec HMAC. Le RFC 7518 exige une clé au moins aussi longue que la sortie du hachage : 256 bits pour HS256, 384 pour HS384 et 512 pour HS512. Pour une clé API ordinaire, 256 bits suffisent largement.

Outils associés