Precisa gerar um token aleatório de 32 caracteres para uma chave de API, um link de redefinição de senha ou um ID de sessão? Este gerador de tokens resolve em um clique, com aleatoriedade criptográfica do próprio navegador. Um exemplo bem brasileiro: na API Pix do Banco Central, o identificador de uma cobrança imediata (o txid) precisa ter de 26 a 35 caracteres alfanuméricos. Escolha "Alphanumeric", ajuste o tamanho para 32 e pronto. Um aviso: este não é o "token" do aplicativo do banco, aquele código de seis dígitos que muda a cada 30 segundos. Para isso, veja o Gerador de OTP no fim da página.
O que é um gerador de tokens, em um parágrafo
Um token é uma sequência impossível de adivinhar que um sistema usa para identificar algo: uma requisição de API, uma sessão, um link mágico de login, uma redefinição de senha. O Gerador de Tokens cria essas sequências com entropia criptograficamente segura: cada caractere é sorteado com crypto.getRandomValues, a mesma fonte que a OWASP recomenda para IDs de sessão. Você escolhe o tamanho, o conjunto de caracteres e um prefixo opcional, no estilo dos grandes fornecedores de API; a ferramenta gera um token ou um lote de até cinquenta.
Ele não substitui o Gerador de Senhas (que é pensado para senhas digitadas por pessoas). Ele substitui abrir um terminal do Node e digitar require('crypto').randomBytes(32).toString('hex').
Como funciona o Gerador de Tokens da Microapp
Arraste o controle para definir o tamanho (de 8 a 128 caracteres). Escolha o conjunto de caracteres: alfanumérico é o padrão universal, hex minúsculo serve para nomes de arquivo e identificadores simples, base64-url é o alfabeto que JWTs e tokens OAuth usam, numérico serve para códigos de verificação por SMS, e hex maiúsculo é para quando você precisa de HEX legível por máquina. Adicione, se quiser, um prefixo como tk_, sk_live_ ou pk_ (até 16 caracteres): a Stripe popularizou esse hábito, e APIs modernas o adotam porque o prefixo diz de cara que tipo de token é aquele. Defina a quantidade se precisar de vários tokens de uma vez. Clique em Gerar; copie os tokens um a um ou o lote inteiro.
Cada byte de aleatoriedade vem de crypto.getRandomValues. Não há Math.random em nenhum ponto do caminho; ele seria previsível o bastante para ser quebrado. Nada sai do seu navegador: os tokens que você vê são a única cópia que existe.
sk_test_, tamanho 24, alfanumérico. Cada resultado tem o formato sk_test_ seguido de 24 caracteres sorteados, algo como sk_test_Qm7Xr2LpVa9cTn4WbZe8KsYd, e os 20 saem diferentes entre si. Jogue-os na tabela de fixtures: com 6224 combinações possíveis (cerca de 1043), a chance de dois coincidirem é desprezível.
O que o tamanho do token significa de verdade
A segurança de um token não está no tamanho em si, e sim na entropia. Um token alfanumérico de 32 caracteres tem 6232 valores possíveis, cerca de 1057, o que equivale a uns 190 bits de entropia. Mesmo testando um trilhão de tokens por segundo, um atacante levaria mais de 1037 anos para percorrer todos, um tempo que faz a idade do universo parecer um piscar de olhos.
Para a maioria dos usos, 32 caracteres alfanuméricos é o ponto ideal: longo o bastante para ser impossível de adivinhar, curto o bastante para caber numa linha de log e fácil de copiar com um clique triplo. Ir para 64 não acrescenta segurança real; acrescenta armazenamento e poluição visual. Abaixo de 16 caracteres a margem encolhe, e códigos curtos (como os numéricos de SMS) só são seguros com expiração rápida e limite de tentativas.
Qual conjunto de caracteres escolher
| Conjunto de caracteres | Melhor para | Por quê |
|---|---|---|
| Alfanumérico | Chaves de API, IDs de sessão | Padrão universal: funciona em qualquer lugar, sem precisar de escape |
| Hex (minúsculo) | URLs, nomes de arquivo | Seguro em URL, sem confusão entre maiúsculas e minúsculas |
| Base64-url | JWTs, tokens OAuth | Alfabeto maior = mais entropia por caractere |
| Numérico | Códigos de verificação por SMS | Fácil de digitar no teclado numérico do celular |
| Hex maiúsculo | Logs de máquina, IDs de banco de dados | Legível em fonte monoespaçada; padrão em muitos sistemas |
Para que serve o prefixo
Um prefixo de token como tk_, sk_live_ ou ghp_ diz a quem encontrar o token num log, num repositório ou numa mensagem de chat que tipo de segredo é aquele. A Stripe popularizou a prática: sk_ quer dizer chave secreta, pk_ quer dizer publicável, e _live_ ou _test_ indica o ambiente. O GitHub adotou (ghp_, gho_, ghs_). O Slack também usa (xoxb-, xoxp-).
É um detalhe pequeno que evita uma confusão enorme na hora de responder a um incidente: quando alguém da equipe sobe sem querer um token para um repositório público, o prefixo diz ao time de segurança em segundos se é preciso trocar uma chave de pagamento de produção ou só um token de sandbox. Vale os quatro caracteres a mais.
Erros comuns
Usar Math.random. Tentador porque é mais curto de digitar. Desastroso porque o Math.random é um gerador pseudoaleatório determinístico: com amostras suficientes, um atacante consegue prever o próximo valor. Nunca gere tokens com Math.random. O Gerador de Tokens usa exclusivamente crypto.getRandomValues por esse motivo.
Guardar tokens em texto puro. Tokens funcionam como senhas: dão acesso. Guarde no servidor apenas o hash do token (um SHA-256 basta para tokens longos e aleatórios; bcrypt ou Argon2 também servem), entregue o valor ao cliente uma única vez, na criação, e deixe que o cliente o guarde. Se o seu banco de dados vazar, os hashes não servem para nada ao atacante.
Não ter expiração. Token que nunca expira vira risco permanente. Defina sempre uma validade (o campo exp nos JWTs, ou um TTL na linha do banco de dados) e force a reemissão de tempos em tempos.
Usar o mesmo segredo em todos os ambientes. Tokens de produção devem ser diferentes dos de homologação, que devem ser diferentes dos de desenvolvimento. A convenção do prefixo ajuda: se o seu ambiente de desenvolvimento gerar sem querer um token sk_live_, é um alerta vermelho gritante.
Ferramentas relacionadas
Para senhas digitadas por pessoas, use o Gerador de Senhas. Para IDs únicos (UUIDs) usados como chave primária em bancos de dados, o Gerador de UUID é a escolha certa. Para gerar o hash de um token antes de guardá-lo, o Gerador de SHA-256 cobre a maioria dos casos. Para códigos de uso único (TOTP / 2FA, como o token do banco), veja o Gerador de OTP. Para tokens assinados com conteúdo (JWTs), use o Gerador de Token JWT.