Gerador de chaves de API

Gere chaves de API aleatórias em base62, hexadecimal ou base64url, com prefixo opcional e o hash SHA-256 para guardar no seu servidor.

O formulário interativo fica disponível quando o JavaScript está ativo.

Como usar

Escolha um formato e uma força, adicione um prefixo se quiser e “Gerar” cria a chave com crypto.getRandomValues(), o gerador aleatório criptográfico do navegador. “Copiar”, ao lado de cada chave, copia aquela chave; “Copiar todas” coloca todas na área de transferência, uma por linha. Até 20 chaves de uma vez, cada uma sorteada de forma independente.

A força é o número de bits aleatórios, e o tamanho depende do alfabeto. Com 256 bits, uma chave hexadecimal tem 64 caracteres, enquanto base62 (a–z, A–Z, 0–9) e base64url (que acrescenta - e _) precisam de 43. Cada caractere base62 vem de um byte aleatório, e os bytes a partir de 248 são descartados, então os 62 caracteres têm exatamente a mesma chance; a linha acima das chaves mostra o número real de bits.

Um prefixo como sk_live_ é escrito do jeito que está na frente da parte aleatória. Ele não é secreto e não deixa a chave mais forte, mas mostra para uma pessoa para que serve a chave e permite que scanners de segredos encontrem uma chave vazada no código: as chaves da Stripe começam com sk_, pk_ ou rk_ seguidos de test_ ou live_, e os tokens do GitHub com ghp_, gho_ e parecidos. O sublinhado também faz um clique duplo selecionar a chave inteira.

Com a opção SHA-256, cada chave vem com o hash dela, calculado sobre a chave inteira, prefixo incluído. Guarde no servidor só esse hash: quando chegar uma requisição, calcule o hash da chave recebida e compare. Como a chave é longa e aleatória, um hash rápido basta aqui, ao contrário das senhas, que precisam de um lento. Nada é enviado: as chaves só existem nesta página até você copiá-las.

Exemplo

Gera uma chave base62 de 256 bits com o prefixo sk_test_. Cada execução produz uma chave diferente.

  • 256 bits em base6243 letras e números: 43 × 5,95 bits ≈ 256 bits.
  • 256 bits em hexadecimal64 caracteres de 0–9 e a–f: 4 bits cada.
  • 128 bits em base64url22 caracteres, 132 bits: o base64url só arredonda para cima, em caracteres inteiros de 6 bits.
  • Prefixo sk_test_sk_test_ seguido da parte aleatória; o prefixo acrescenta 8 caracteres e nenhuma força.

Perguntas frequentes

Quantos bits uma chave de API precisa ter?

128 bits aleatórios já estão muito além de qualquer tentativa de adivinhar: mesmo com um bilhão de tentativas por segundo, percorrer uma fração relevante levaria mais que a idade do universo. Aqui o padrão é 256 bits porque uma chave mais longa custa só alguns caracteres. O GitHub passou seus tokens para 178 bits em 2021.

Qual formato escolher?

Base62 é o mais prático para copiar: não tem símbolos que uma URL, um terminal ou um arquivo de configuração tratem de forma especial. O hexadecimal é mais longo, mas funciona onde só 0–9 e a–f são aceitos. O base64url é o mais curto e é seguro em URLs, mas o - pode cortar a seleção com clique duplo e alguns validadores o recusam.

Por que guardar só o hash?

Se o banco de dados vazar, os hashes não servem para chamar sua API e não dá para recuperar as chaves a partir deles. É a mesma ideia das senhas; a diferença é que uma chave aleatória de 256 bits não pode ser adivinhada, então SHA-256 basta e não é preciso um hash lento como o Argon2.

Um UUID serve como chave de API?

Um UUID versão 4 tem só 122 bits aleatórios e um formato fixo e reconhecível, e foi criado como identificador, não como segredo. Para chaves que dão acesso, use uma chave aleatória própria como estas, com prefixo se quiser que ela seja reconhecível.

Quando preciso de 384 ou 512 bits?

Para segredos que assinam JSON Web Tokens com HMAC. O RFC 7518 exige uma chave pelo menos do tamanho da saída do hash: 256 bits para HS256, 384 para HS384 e 512 para HS512. Para uma chave de API comum, 256 bits já é mais que suficiente.

Ferramentas relacionadas