1001Ferramentas
🔐Geradores

Gerador de String Segura Personalizável

Gera strings aleatórias com classes específicas: alfa minúsculas, maiúsculas, dígitos, símbolos. Útil para senhas, tokens e códigos. Usa crypto.getRandomValues.


  

Strings aleatórias criptograficamente seguras

Uma string aleatória "segura" é aquela cujos bytes vêm de um CSPRNG (gerador pseudo-aleatório criptograficamente seguro), não de um PRNG estatístico como Math.random(). A diferença importa: o PRNG estatístico é rápido mas previsível a partir de poucas amostras observadas; o CSPRNG resiste a esse ataque. Em Node use crypto.randomBytes; no browser use crypto.getRandomValues; em Python use secrets.token_urlsafe; em PHP use random_bytes. Nunca implemente o seu.

Orçamento de entropia: qual tamanho usar?

Entropia em bits é log2(charset) × tamanho. Qualquer coisa usada em autenticação deve carregar pelo menos 128 bits de entropia — OWASP ASVS 2.6 e NIST SP 800-63B colocam 64 bits como piso mínimo. Referências rápidas:

  • Hex (0-9, a-f): 4 bits por caractere — 32 chars = 128 bits
  • Base64url (URL-safe, sem padding): ~6 bits por caractere — 22 chars = 132 bits
  • Base32 Crockford (sem confusão 0/O/I/L): 5 bits por caractere — 26 chars = 130 bits
  • Alfanumérico (A-Z, a-z, 0-9): ~5,95 bits por caractere — 22 chars ≈ 131 bits

Casos de uso típicos e formato

  • API key: 32 chars hex (128 bits) — opaca, fácil de copiar
  • Session token: 40+ chars base64url armazenado em cookie HttpOnly
  • Magic link / reset de senha: 128 bits em base64url com TTL curto (15-30 min) e uso único
  • CSRF token: valor de 128 bits por sessão, validado em toda requisição que muda estado
  • Códigos de backup 2FA: 16 chars agrupados 4-4-4-4 para legibilidade

Armazenamento e comparação

Nunca logue um token inteiro. Trate como senha: armazene um hash SHA-256 e compare com uma função de tempo constante — crypto.timingSafeEqual no Node, secrets.compare_digest em Python, hash_equals em PHP. Um a === b ingênuo vaza o tamanho do prefixo coincidente via timing, permitindo brute force caractere a caractere. Para tokens de vida longa, adicione coluna de expiração e lista de revogação para invalidar uma chave roubada imediatamente.

Perguntas frequentes

Posso usar um token mais curto, tipo 8 caracteres? Só para coisas não-críticas como códigos de compartilhamento que expiram em minutos. Oito chars alfanuméricos dão cerca de 47 bits — brute-forçável em segundos numa GPU moderna. Qualquer coisa ligada a conta de usuário ou fluxo de dinheiro precisa passar de 128 bits.

Hex ou base64url — qual escolher? Prefira base64url para tokens que vão em URL ou header porque é mais denso (um char base64url ≈ 1,5 char hex pela mesma entropia). Hex é mais amigável para humanos lendo logs e debugando, mas ironicamente tokens não deveriam aparecer em logs.

Posso validar um token com regex primeiro? Para checks de formato (tamanho, charset), sim — corta lixo logado e ataques óbvios. Para o match de autenticação propriamente dito, não — use sempre um comparador de tempo constante depois que a regex passar. Comparação char por char vaza timing.

Com que frequência rotacionar API keys? Boa prática é suportar rotação sem torná-la obrigatória: toda chave tem timestamp de emissão e último uso, e a app expõe um endpoint de revogação. Para automação não-assistida, rotacione ao menos anualmente; para chaves em mãos de humanos, a cada mudança de equipe.

Ferramentas Relacionadas