Gerador de TOTP Secret
Gera um secret Base32 aleatório (160 bits) para uso em TOTP/HOTP (Google Authenticator, Authy, 1Password). Cria também a URL otpauth:// pronta.
—
O que é um secret TOTP
Um secret TOTP é a chave simétrica compartilhada que um aplicativo autenticador (Google Authenticator, Authy, 1Password, Bitwarden, Microsoft Authenticator) e o seu servidor mantêm independentemente para calcular o mesmo código de seis dígitos a cada 30 segundos. O algoritmo está descrito na RFC 6238 (2011), que estende a antiga RFC 4226 (HOTP) trocando o contador por um fator móvel baseado em tempo. Cada código é o resultado de HMAC-SHA1(secret, floor(unix_time / 30)) truncado para seis dígitos — não há round-trip de rede no momento em que o usuário digita.
A RFC recomenda um secret de 160 bits (20 bytes), mesmo tamanho da saída do SHA-1; muitos serviços aceitam entre 80 e 160 bits, mas descer abaixo de 128 bits enfraquece o esquema contra busca exaustiva no espaço de chaves. Os bytes são codificados em Base32 (RFC 4648, sem padding, alfabeto A-Z2-7) justamente porque exclui os caracteres 0, 1, 8 e 9 — visualmente ambíguos quando o usuário precisa digitar a chave a partir de um screenshot ou de uma folha impressa.
A URI otpauth e o QR Code de enrollment
Para fazer o onboarding do usuário, o servidor normalmente emite uma URI otpauth:// renderizada como QR Code:
otpauth://totp/Acme:[email protected]?secret=JBSWY3DPEHPK3PXP&issuer=Acme&algorithm=SHA1&digits=6&period=30
A query string carrega o secret em Base32, o issuer legível, o algoritmo HMAC (SHA-1 é universal; SHA-256 e SHA-512 são permitidos pela RFC mas raramente suportados pelos apps mobile), o número de dígitos (6 por padrão, 8 ocasionalmente) e o passo em segundos (30 por padrão). No lado do servidor, o verificador aceita a janela atual mais uma janela antes e uma depois — essa tolerância de um passo absorve o inevitável drift de relógio entre celular e servidor.
Checklist de hardening
- Gere o secret com CSPRNG (
crypto.randomBytes(20)em Node,secrets.token_bytes(20)em Python). - Mostre o secret uma única vez durante o enrollment; nunca registre em log e nunca grave em texto puro — criptografe at-rest do mesmo jeito que uma chave de hashing de senhas.
- Rejeite um código já consumido na mesma janela de 30 segundos para neutralizar ataques de replay em um terminal comprometido.
- Emita códigos de recuperação únicos no enrollment para o caso de o usuário perder o celular.
- Aplique rate limit no endpoint de verificação — seis dígitos é apenas 1 em 1 milhão, brute force é realista sem throttling.
Viagem e drift de relógio
TOTP depende de relógio UTC sincronizado nas duas pontas; o fuso horário do usuário é irrelevante porque o algoritmo hasheia um contador de passos baseado em UTC. Na prática, problemas só aparecem quando o relógio do celular foi setado manualmente, quando o aparelho ficou offline por dias com cristal fraco ou quando o desktop pulou o sync NTP após o suspend. Se um usuário reporta "o código está sempre errado", verifique antes de qualquer coisa a hora do dispositivo — no servidor, logue o offset de step dos códigos aceitos por alguns dias para identificar dispositivos saindo da janela ±1.
Perguntas frequentes
O app autenticador precisa de internet para gerar os códigos? Não. TOTP é totalmente offline — os dois lados só precisam de relógio sincronizado e do secret compartilhado. Esse é o diferencial em relação a SMS ou e-mail, que dependem de um canal de entrega.
Perdi o celular — dá para recuperar a conta? Apenas com os códigos de recuperação emitidos no enrollment, um reset administrativo ou um canal alternativo. O secret em si não pode ser reconstruído a partir de um código; essa é exatamente a propriedade do HMAC.
TOTP é mesmo melhor que 2FA por SMS? Sim. SMS é vulnerável a SIM swap, interceptação SS7 e phishing do código entregue. TOTP mantém o secret no dispositivo e não transmite nada que possa ser interceptado.
Por que ainda SHA-1 em 2026? A construção HMAC não é afetada pelos ataques de colisão contra SHA-1 (que atingem a hash sem chave). Todos os apps autenticadores suportam SHA-1 universalmente; trocar para SHA-256 quebra a compatibilidade com a maioria dos apps de consumidor sem ganho de segurança mensurável.
O secret gerado aqui é enviado para algum servidor? Não. A geração acontece inteiramente no seu navegador usando crypto.getRandomValues() — nada trafega pela rede.
Ferramentas Relacionadas
Gerador de Chave Secreta JWT HS256
Gera uma chave secreta forte (256 bits) em Base64 ou Hex, pronta para usar como segredo HMAC-SHA256 em JWT.
Gerador de Código MP (Ministério Público)
Gera códigos fictícios de procedimento do MP (Ministério Público): PIC, NF (Notícia de Fato), procedimento investigatório criminal.
Prompt Resumir em Bullets
Prompt para resumir texto em N bullets.