Utilia

Gerador de códigos TOTP e HOTP

Gera códigos 2FA TOTP e HOTP a partir de um segredo Base32 ou de um URI otpauth://, com SHA-1, SHA-256 ou SHA-512, contagem decrescente e código QR.

Um segredo 2FA é tão sensível como uma palavra-passe. Tudo aqui corre localmente no teu navegador: o segredo, os códigos e o código QR nunca são enviados para lado nenhum.

Configurar uma aplicação de autenticação

Acrescenta um emissor e um nome de conta e depois lê o código QR ou copia a ligação otpauth:// para a tua aplicação de autenticação.

Como gerar códigos TOTP

  1. Cola um segredo Base32 (por exemplo JBSWY3DPEHPK3PXP) ou uma ligação otpauth:// completa em Segredo (Base32) ou URI otpauth://. São aceites espaços, hífenes, letras minúsculas e a falta do enchimento =.
  2. Os códigos aparecem enquanto escreves, ou quando clicas em Mostrar códigos. Um URI colado preenche por ti os campos Tipo, Algoritmo, Algarismos, Período (segundos), Emissor e Conta.
  3. Lê o Código atual ao centro, com o Código anterior e o Código seguinte de cada lado. A barra por baixo faz a contagem decrescente dos segundos até o código mudar, e Copiar código copia-o sem o espaço.
  4. Para códigos baseados num contador, escolhe HOTP (baseado num contador), define o Contador e usa Contador seguinte para avançar.
  5. Para criar um novo segredo 2FA, clica em Novo segredo aleatório. Preenche Emissor e Conta e depois lê o código QR com uma aplicação de autenticação, usa Copiar URI ou Transferir código QR (PNG).

Como funcionam o TOTP e o HOTP

O HOTP (RFC 4226) calcula um HMAC de um contador de 8 bytes com o segredo partilhado e aplica depois a truncagem dinâmica: os últimos quatro bits do HMAC escolhem um deslocamento, lêem-se quatro bytes a partir daí, limpa-se o bit mais alto e reduz-se o número módulo 10^algarismos. O resultado é um código de 6 a 8 algarismos.

O TOTP (RFC 6238) é um HOTP em que o contador é o intervalo de tempo atual: T = floor(Unix time / period), com um período de 30 segundos por omissão. O teu telemóvel e o servidor calculam o mesmo código de forma independente, porque partilham o segredo e (aproximadamente) o mesmo relógio. É por isso que aparecem o Código anterior e o Código seguinte: os servidores aceitam normalmente um intervalo antes ou depois para tolerar desvios de relógio.

O HMAC corre na API Web Crypto do teu navegador com SHA-1, SHA-256 ou SHA-512. SHA-1 com 6 algarismos e 30 segundos é o que quase todos os serviços usam; SHA-256 e SHA-512 são permitidos pelo RFC 6238, mas algumas aplicações ignoram-nos, por isso só alteres as predefinições se o serviço o pedir.

O URI otpauth:// e o código QR

As aplicações de autenticação são configuradas com um URI como otpauth://totp/Example:alice@example.com?secret=…&issuer=Example&algorithm=SHA1&digits=6&period=30, normalmente apresentado como código QR. Esta ferramenta lê esses URIs (incluindo etiquetas com percent-encoding, como ACME%20Co) e constrói novos. O código QR é desenhado localmente a partir do URI mostrado em URI otpauth://.

Um novo segredo aleatório tem 20 bytes (160 bits), o comprimento recomendado pelo RFC 4226, obtidos de crypto.getRandomValues.

Conselhos de segurança

  • O segredo é o próprio segundo fator: quem o tiver consegue gerar os teus códigos. Não coles os segredos de contas importantes em computadores partilhados e nunca partilhes capturas de ecrã do código QR.
  • Tudo é calculado localmente; nada é enviado pela rede. Fecha o separador quando terminares.
  • Guarda os códigos de recuperação do serviço: um segredo perdido não pode ser recuperado.

Perguntas frequentes

Porque é que o meu código não coincide com o da minha aplicação?

Verifica primeiro o relógio do teu dispositivo: os códigos TOTP mudam a cada período, por isso um relógio desacertado em mais de cerca de 30 segundos dá códigos diferentes. Depois confirma que o algoritmo, o número de algarismos e o período correspondem aos que o serviço usou.

Esta ferramenta é compatível com o Google Authenticator e aplicações semelhantes?

Sim. Segue o RFC 6238 e o formato de URI otpauth que essas aplicações usam. Lê o código QR ou escreve o segredo Base32 na aplicação, e ambos devem mostrar o mesmo Código atual.

Qual é a diferença entre TOTP e HOTP?

O TOTP avança com o tempo, por isso um código expira no fim do período. O HOTP avança com um contador que aumenta sempre que um código é usado, por isso um código continua válido até ser usado ou substituído.

Posso usar esta ferramenta como autenticador no dia a dia?

Foi pensada para testes, desenvolvimento e recuperação. Uma aplicação no telemóvel ou uma chave física é mais segura para o uso diário, porque o segredo não tem de ser colado numa página web de cada vez.

Os cálculos foram verificados com as normas?

Sim. A ferramenta é testada com os valores HOTP do anexo D do RFC 4226 e com os valores TOTP do anexo B do RFC 6238 para SHA-1, SHA-256 e SHA-512.