Gerador de Código TOTP / 2FA

Gerador online grátis de códigos TOTP / 2FA (RFC 6238). Cole um secret Base32 para ver o código atual e o próximo, escaneie o QR com Google Authenticator e valide seu 2FA.

000 000
--s
Próximo código:
Conta e Algoritmo
Cole um secret codificado em Base32. Letras A–Z e dígitos 2–7, padding opcional. Clique no dado para gerar um secret aleatório de 20 bytes.
Escaneie com Authenticator

Gerador de Código TOTP / 2FA (RFC 6238)

Gere senhas de uso único baseadas em tempo (TOTP) totalmente no seu navegador. Cole qualquer secret Base32 — o que Google Authenticator, Authy, Microsoft Authenticator e 1Password importam — e veja em tempo real o código de 6 dígitos, o próximo, um anel de contagem regressiva, a URI otpauth:// e um QR para escanear em qualquer app authenticator. Implementa RFC 6238 com precisão, verificado nos seis vetores oficiais de teste. Útil para depurar configurações de 2FA, validar a geração no servidor ou rodar um authenticator totalmente offline.

O que é TOTP e como difere de HOTP?

TOTP (Time-based One-Time Password, RFC 6238) gera um código de 6 a 8 dígitos que muda a cada 30 segundos. É o algoritmo por trás do Google Authenticator, Microsoft Authenticator, Authy, OTP integrado do 1Password, FreeOTP e dezenas de outros apps.

Ele se baseia em HOTP (HMAC-based One-Time Password, RFC 4226):
- HOTP usa um contador que aumenta em 1 a cada uso ou pressão de botão.
- TOTP usa o tempo Unix atual dividido por um período (30 s por padrão) como contador. Em T = floor(time / 30), o valor do código é idêntico para quem compartilha o mesmo secret.

Ambos produzem o código calculando HMAC(secret, contador) e truncando. TOTP é mais prático porque não exige sincronização entre cliente e servidor além de relógios razoavelmente precisos (nível NTP basta).

O que esta ferramenta realmente calcula?

Exatamente o que a RFC 6238 especifica — verificado contra os vetores oficiais do Apêndice B:

1. Decodifica o secret Base32 em bytes.
2. Calcula contador = floor(unix_time / period) e empacota em 8 bytes big-endian.
3. Calcula HMAC sobre esses 8 bytes com o algoritmo escolhido (SHA-1, SHA-256 ou SHA-512) e o secret.
4. Truncamento dinâmico: pega os 4 bits finais do HMAC como offset, lê 4 bytes a partir daí, mascara o bit alto.
5. Devolve (bin % 10^digits), preenchido com zeros até a largura escolhida.

O passo HMAC usa o Web Crypto SubtleCrypto do navegador — criptografia nativa e auditada; a ferramenta só liga o protocolo em volta. Os seis vetores RFC (T = 59, 1111111109, 1111111111, 1234567890, 2000000000, 20000000000) batem com a saída esperada.

Como adicionar uma conta nova ao Google Authenticator com esta ferramenta?

Dois caminhos, dependendo de qual lado você controla:

1. Você tem um serviço que produziu o secret (string ou QR). Cole o secret Base32 no campo Secret, opcionalmente preencha 'Rótulo da conta' (ex. [email protected]) e 'Emissor' (nome do site) para o authenticator mostrar um nome legível. A ferramenta mostra o código atual para você comparar com a etapa de verificação do serviço.

2. Você está construindo um serviço e precisa enrolar usuário. Clique no dado para gerar um secret aleatório Base32 de 20 bytes, preencha 'Rótulo da conta' e 'Emissor'. O QR codifica uma URI otpauth:// padrão — o usuário escaneia no app e começa a produzir códigos correspondentes na hora. Copie a URI otpauth:// para embutir no seu próprio QR, ou baixe o PNG renderizado.

Nos dois fluxos os códigos são gerados localmente — nunca transmitidos — então é seguro mesmo com secrets de produção.

É seguro colar aqui meu secret 2FA real?

Tecnicamente sim — tudo roda no navegador — mas um secret TOTP Base32 é a credencial mestra do seu 2FA. Quem o souber produz os mesmos códigos que você. Trate como senha:

- Não cole em navegadores em que você não confia (quiosques, máquinas compartilhadas, navegadores com extensões duvidosas).
- Verifique DevTools → Rede para confirmar que o secret nunca é enviado via POST. Não é — mas a confirmação está a um clique.
- Não deixe a página aberta onde outros possam ler o valor.
- Para a maioria, o uso correto é testar ou recuperar a partir de backup (você guardou o secret na tela de configuração e perdeu o app); não como substituto diário de uma chave de hardware.

Um secret gerado pelo dado é seguro para compartilhar — mas qualquer secret vinculado a uma conta real merece proteção como senha.

Qual o formato da URI otpauth://?

URI estilo RFC usada por todos os apps authenticator populares:

otpauth://totp/Emissor:[email protected]?secret=BASE32SECRET&issuer=Emissor&algorithm=SHA1&digits=6&period=30

Campos:
- O 'path' depois de totp/ é o rótulo, geralmente 'Emissor:Conta'. O prefixo Emissor é opcional, mas recomendado; ambas as ocorrências devem casar com o parâmetro issuer.
- secret: Base32, sem padding, maiúsculas preferidas.
- issuer: nome legível do serviço (URL-encoded).
- algorithm: SHA1 (padrão), SHA256 ou SHA512. Muitos apps só suportam SHA1.
- digits: 6 (padrão), 7 ou 8. Muitos apps só suportam 6.
- period: 30 (padrão) segundos. Alguns apps aceitam 60.

A ferramenta só adiciona parâmetros diferentes do padrão para manter a URI enxuta. Authenticators toleram parâmetros extra, mas a forma com defaults omitidos é a mais portátil.

Por que o código do app authenticator às vezes está um passo defasado?

TOTP depende de relógios suficientemente próximos nos dois lados. Se o relógio do seu aparelho se desvia mais que poucos segundos, o código gerado calcula um time-step diferente do servidor.

Como serviços e clientes lidam:

- Servidores costumam aceitar o código anterior e o próximo além do atual. Isso cria janela de ~±30 s.
- Clientes devem usar NTP. No Android, ligue 'Hora fornecida pela rede'; no iOS, 'Definir automaticamente' em Data e hora; no Linux/macOS, systemd-timesyncd ou chrony mantêm precisão de milissegundos.
- Authy e Google Authenticator oferecem botão 'sincronizar hora' que pega o horário da rede sem mexer no relógio do sistema.

A ferramenta usa o relógio local (Date.now() do navegador). Se ambos estiverem corretos, os códigos batem; se um se desviar mais de 60 s, você verá descasamento.

Que algoritmo e quantos dígitos escolher?

Padrões: SHA-1, 6 dígitos, período 30 s. Motivos para mudar:

- SHA-1: o padrão universal. Todo app suporta. Recomendado, salvo razão específica.
- SHA-256 / SHA-512: HMAC mais forte. Útil quando tanto o servidor emissor quanto o app cliente suportam (Authy e 1Password suportam; algumas versões antigas do Google Authenticator não renderizam SHA-256+ corretamente).
- 6 dígitos: suporte universal, probabilidade ~1 em um milhão por tentativa.
- 7 / 8 dígitos: mais forte; Yubico OATH suporta; muitos apps só exibem 6.
- Período 30 s: padrão. 60 s reduz a frequência de novos códigos e facilita anti-replay; 15 s é raro e quebra alguns apps.

Para compatibilidade: SHA-1 / 6 / 30. Para ferramentas internas onde você controla os dois lados, SHA-256 / 6 / 30 é uma evolução razoável.

Para onde vão os dados? Funciona offline?

Seu secret nunca sai do navegador. O gerador roda totalmente no cliente:

- HMAC é calculado via window.crypto.subtle, as mesmas primitivas usadas pelo HTTPS. Não há implementação JS de SHA-1 embutida.
- O QR usa a biblioteca qrcode carregada uma vez de um CDN público (cdn.jsdelivr.net). Depois disso, a página funciona offline — incluindo geração de código. Desconecte o Wi-Fi e veja funcionando.
- Nenhuma analítica é feita sobre o que você digita. Confirme abrindo DevTools → Rede enquanto digita; só aparecem recursos estáticos.
- 'Copiar código' e 'Copiar URI' escrevem na área de transferência local. 'Baixar QR' cria um PNG em memória e abre o diálogo local de salvar.

Para uso offline máximo, carregue a página uma vez em uma máquina confiável e desconecte a rede. HMAC, decode base32, render do QR e clipboard seguem funcionando — útil para servidores isolados ou cenários de recuperação.

Principais Recursos

  • Compatível com RFC 6238, verificado nos seis vetores oficiais
  • HMAC via Web Crypto API nativo (sem crypto JS embutido)
  • Suporta SHA-1, SHA-256 e SHA-512
  • Dígitos configuráveis (6 / 7 / 8) e período (15 / 30 / 60 segundos)
  • Exibição em tempo real do código atual e do próximo
  • Anel de contagem regressiva animado mostrando os segundos restantes
  • Gerador de secret Base32 aleatório de 20 bytes com crypto.getRandomValues
  • URI otpauth:// compatível com Google Authenticator, Authy, 1Password, Microsoft Authenticator e mais
  • QR escaneável em todos os apps authenticator principais
  • Botão mostrar/ocultar para o campo secret
  • Copiar código ou URI otpauth em um clique
  • Baixar o QR como imagem PNG
  • Campos de rótulo de conta e emissor para entradas legíveis
  • 100% no cliente — seu secret nunca sai do navegador
  • Funciona offline após o primeiro carregamento