Générez des jetons aléatoires cryptographiquement forts, des clés API, des secrets et des nonce dans votre navigateur. Choisissez la longueur, le jeu de caractères et le nombre à produire.
Jetons aléatoires et imprévisibles. Toute l'aléatoire provient de crypto.getRandomValues du navigateur, la même source utilisée par les navigateurs pour les clés TLS. Rien ne quitte votre appareil.
Ce qui rend un jeton sûr à utiliser
Aléatoire n'est pas synonyme d'imprévisible
La plupart des langages fournissent deux générateurs de nombres aléatoires très différents. Math.random(), rand() et compagnie sont des générateurs pseudo-aléatoires rapides amorcés par quelque chose d'économique comme l'horloge. Ils conviennent pour mélanger une playlist et sont désastreux pour un jeton, car un attaquant qui observe quelques sorties peut souvent récupérer l'état interne et reproduire chaque valeur que le générateur émettra.
Un générateur cryptographiquement sûr est conçu pour qu'observer une sortie passée ne dise rien d'une sortie future. Dans le navigateur, c'est crypto.getRandomValues(), qui puise dans la réserve d'entropie du système d'exploitation. Cet outil l'utilise exclusivement. Si vous générez des jetons dans votre propre code, les équivalents sont secrets en Python, crypto/rand en Go et java.security.SecureRandom en Java — jamais le module random simple ou Math.random().
Éviter le biais du modulo
Avoir de bons octets aléatoires n'est que la moitié du travail. La façon naïve de choisir un caractère est bytes[i] % alphabet.length, qui fausse silencieusement le résultat dès que la taille de l'alphabet ne divise pas 256 uniformément. Avec un alphabet de 62 caractères, les 8 premiers caractères apparaissent légèrement plus souvent que les autres — un petit biais, mais qui réduit l'entropie réelle et qu'on peut totalement éviter.
Le correctif est l'échantillonnage par rejet : on rejette tout octet tombant dans le bloc final incomplet et on en tire un autre. Cet outil le fait, donc chaque caractère de l'alphabet choisi est également probable.
Choisir une longueur
L'entropie est de log2(taille_alphabet) * longueur bits. Un alphabet de 62 caractères donne environ 5,95 bits par caractère, donc un jeton de 22 caractères porte environ 131 bits — largement au-delà de la force brute. Pour tout ce qui protège un accès réel, 128 bits est généralement le plancher ; en dessous d'environ 64 bits, un attaquant déterminé avec un point d'accès rapide devient une préoccupation réelle.
Le choix de l'alphabet dépend surtout de l'endroit où le jeton voyage. Base64url et hex survivent aux URL, noms de fichiers et en-têtes sans modification. L'alphabet sans ambiguïté retire des caractères comme 0/O et 1/l/I et vaut la peine d'être utilisé pour tout ce qu'un humain lira à voix haute ou saisira depuis un écran.
FAQ
Le jeton est-il généré sur mon appareil ?
Oui, entièrement dans votre navigateur via crypto.getRandomValues(). Rien n'est envoyé à un serveur et rien n'est journalisé, donc la valeur que vous voyez n'est connue que de vous.
Quelle longueur doit avoir un jeton ?
Pour tout ce qui protège un accès, visez au moins 128 bits d'entropie : 22 caractères sur un alphabet de 62, ou 32 caractères hexadécimaux. Les valeurs plus courtes conviennent aux identifiants non sécurisés.
Pourquoi ne pas utiliser Math.random() pour cela ?
C'est un générateur pseudo-aléatoire rapide amorcé par quelque chose d'économique comme l'horloge. Observer quelques sorties peut suffire à récupérer son état et prédire chaque valeur future.
À quoi sert l'option sans caractères ambigus ?
Elle retire 0/O et 1/l/I pour que le jeton survive à une lecture à voix haute, une écriture sur papier ou une ressaisie depuis un écran sans erreur de transcription.
Puis-je utiliser cela pour les liens de réinitialisation de mot de passe ?
Oui, à condition de stocker uniquement un hash du jeton, de définir une courte expiration et de l'invalider après un usage unique. L'aléatoire ici convient ; le cycle de vie est le rôle de votre application.
Le même jeton pourrait-il revenir un jour ?
Avec 128 bits d'entropie, une répétition est astronomiquement improbable, mais l'outil ne conserve aucun historique, il ne peut donc pas vérifier l'unicité entre les générations pour vous.