Gerador TOTP

Resultados

Toda vez que o Google Authenticator ou o Authy mostra um código de seis dígitos que muda a cada 30 segundos, isso é TOTP: um HMAC calculado a partir de um segredo compartilhado e do horário Unix atual, padronizado na RFC 6238. Este gerador calcula os mesmos códigos a partir de qualquer segredo Base32, o que é útil para depurar uma nova integração de autenticação de dois fatores (2FA), descobrir por que um serviço rejeita seus códigos ou observar como o algoritmo reage a parâmetros diferentes. Use-o com segredos de teste: o código é calculado no nosso servidor, então os segredos reais que protegem suas contas devem ficar em um aplicativo autenticador, não em uma página da web.

Como funciona este gerador TOTP

  1. 1

    Cole um segredo Base32

    Letras A-Z e dígitos 2-7, o formato usado nos QR codes otpauth://. Espaços e minúsculas não são problema; qualquer outro caractere é apontado como Base32 inválido.

  2. 2

    Escolha o algoritmo de hash

    SHA-1 é o que quase todos os serviços usam; mude para SHA-256 ou SHA-512 apenas quando o serviço exigir expressamente.

  3. 3

    Defina dígitos e período

    Escolha 6, 7 ou 8 dígitos e uma janela de 30 ou 60 segundos. A combinação padrão é 6 dígitos a cada 30 segundos.

  4. 4

    Leia o código atual

    O código é atualizado a cada segundo, e a contagem regressiva mostra quantos segundos ainda restam para a janela atual.

  5. 5

    Compare a URI otpauth

    A ferramenta exibe a URI otpauth:// dos seus parâmetros, para você conferir com o que o QR code de configuração de um serviço codifica.

O algoritmo em linguagem simples

TOTP é HOTP (senha de uso único baseada em HMAC, RFC 4226) com o contador substituído pelo horário Unix atual dividido pelo passo de tempo (geralmente 30 segundos):

counter = floor(unix_time / 30)
hash = HMAC-SHA1(secret, counter_as_8_byte_big_endian)
offset = last byte of hash AND 0x0F
truncated = 4 bytes from offset, with the top bit zeroed
code = truncated mod 10^digits

Seu dispositivo e o servidor fazem a mesma conta com o mesmo segredo e o mesmo relógio, então chegam ao mesmo código sem que ele jamais seja transmitido. Um código de 6 dígitos é apenas o HMAC truncado módulo 10^6. Sem mágica, só hashing.

Parâmetros comuns

Serviço Algoritmo Dígitos Período
A maioria dos sites e apps SHA-1 6 30 s
GitHub SHA-1 6 30 s
Cloudflare SHA-1 6 30 s
Contas Microsoft SHA-1 6 30 s
Alguns bancos e VPNs corporativas SHA-256 ou SHA-512 8 60 s

Se um serviço rejeitar seus códigos, verifique primeiro a quantidade de dígitos e o período, depois o algoritmo. Note também que alguns aplicativos autenticadores ignoram silenciosamente parâmetros fora do padrão (o Google Authenticator historicamente tratava tudo como SHA-1, 6 dígitos, 30 segundos), então teste sempre com o aplicativo exato que seus usuários vão usar.

Guardando os segredos com segurança

  • Nunca envie um segredo 2FA por e-mail ou mensagem. Assim que ele entra em uma caixa de entrada, fica para sempre nos registros e backups do provedor.
  • Cadastre a 2FA escaneando o QR code. O QR codifica uma URI otpauth://totp/... que reúne segredo, algoritmo, dígitos e período em um único pacote sem ambiguidade.
  • Faça backup no momento do cadastro. Guarde os códigos de recuperação, ou o próprio segredo, em um gerenciador de senhas; perder o celular sem eles deixa você trancado do lado de fora.
  • Um segredo por serviço. Cada serviço emite o próprio segredo na configuração; se algum vazar, cadastre a 2FA de novo para que o antigo pare de funcionar.

Desvio de relógio

TOTP só funciona enquanto os dois relógios concordam. Esta página calcula os códigos com o relógio do servidor, então, se o código daqui for diferente do seu aplicativo autenticador, o primeiro suspeito é o relógio do dispositivo. A maioria dos validadores aceita uma janela de desvio para cada lado (30 a 60 segundos); além disso, sincronize o relógio do dispositivo via NTP antes de culpar o segredo.

Use segredos de teste aqui

Esta ferramenta calcula o código no nosso servidor: o segredo que você digita é transmitido por HTTPS a cada atualização e também aparece na URL da página se você navegar entre as etapas da ferramenta. Isso é adequado para desenvolvimento, demonstrações e depuração com segredos descartáveis. Não é o lugar para o segredo real que protege seu e-mail ou sua conta bancária; esse deve morar em um aplicativo autenticador dedicado no seu celular. Se você já colou um segredo real fora do seu autenticador, cadastre a 2FA de novo naquele serviço para que o segredo seja trocado.

Perguntas frequentes

Trate esta página como uma ferramenta de desenvolvimento e testes, não como um cofre. O código é calculado no servidor, então o segredo viaja até o nosso servidor por HTTPS e pode aparecer na URL da página entre as etapas. Use segredos de demonstração ou desenvolvimento à vontade; nunca cole o segredo real de uma conta importante para você. Se já colou, cadastre a 2FA de novo naquele serviço para trocar o segredo.

Confira primeiro os parâmetros: algoritmo, quantidade de dígitos e período precisam corresponder exatamente ao que o serviço emitiu. Depois confira os relógios: esta página usa o relógio do servidor, então uma divergência costuma apontar para o outro dispositivo. Por fim, lembre que alguns aplicativos ignoram parâmetros fora do padrão, e o Google Authenticator é o exemplo clássico.

Apenas Base32: letras de A a Z e dígitos de 2 a 7, com preenchimento = opcional. Espaços são removidos e minúsculas são convertidas automaticamente. Segredos em hexadecimal ou bytes brutos precisam ser convertidos para Base32 antes; caso contrário, a ferramenta informa que o segredo Base32 é inválido.

Você fica trancado fora da 2FA daquela conta. Use o fluxo de recuperação do serviço (códigos de recuperação, verificação de identidade, SMS reserva). Sempre guarde os códigos de recuperação ou o QR code inicial em um lugar seguro na hora da configuração.

Sim. Gere um segredo aleatório no lado do servidor, com pelo menos 128 bits (a RFC 4226 recomenda 160), mostre-o uma única vez como QR code e valide os códigos enviados calculando o mesmo HMAC, normalmente aceitando uma janela de tolerância para cada lado. Há bibliotecas maduras para qualquer stack: pyotp (Python), otplib (JavaScript), rotp (Ruby).

Ferramentas relacionadas

Ferramenta disponível em outros idiomas