TOTP & HOTP
TOTP (Time-based One-Time Password, RFC 6238) e HOTP (HMAC-based One-Time Password, RFC 4226) são os dois RFCs que todo QR de inscrição 2FA implementa. O esquema URI otpauth:// codificado é o padrão de facto do Google Authenticator, universal em todos os principais apps de autenticação.
Especificação TOTP:RFC 6238 (baseado em tempo, 2011).
Especificação HOTP:RFC 4226 (baseado em contador, 2005).
Esquema URI:Google Authenticator Key URI Format, o formato com o qual todos os autenticadores concordam.
Especificação HOTP:RFC 4226 (baseado em contador, 2005).
Esquema URI:Google Authenticator Key URI Format, o formato com o qual todos os autenticadores concordam.
O que é
Um QR de inscrição 2FA é uma URL no esquema otpauth:// que carrega o segredo compartilhado mais metadados de identificação. Formato:
otpauth://TYPE/LABEL?secret=SECRET&issuer=ISSUER&algorithm=ALG&digits=N&period=SEC- TYPE,
totp(baseado em tempo) ouhotp(baseado em contador). - LABEL,
Issuer:Account, codificado em URL. Exemplo:GitHub:alice@example.com. - secret, a chave compartilhada, codificada em Base32 (alfabeto RFC 4648 §6: A-Z, 2-7).
- issuer, o nome do serviço, exibido no app de autenticação. Redundante com o label mas melhora a UX em apps que não analisam o label.
- algorithm,
SHA1(padrão),SHA256ouSHA512. Todos os autenticadores suportam SHA1; poucos suportam SHA256/SHA512. - digits,
6(padrão) ou8. A maioria dos apps de consumo espera 6. - period, apenas TOTP.
30(padrão) ou60segundos. HOTP tem um parâmetrocounterem vez disso.
Vetores de teste canônicos
| Caso | Entradas | URI otpauth:// esperado |
|---|---|---|
| TOTP, mínimo (SHA1, 6 dígitos, 30 s) | issuer=GitHub | otpauth://totp/GitHub:alice@example.com?secret=JBSWY3DPEHPK3PXP&issuer=GitHub |
| TOTP, SHA256, 8 dígitos | issuer=Corp | otpauth://totp/Corp:bob?secret=JBSWY3DPEHPK3PXP&issuer=Corp&algorithm=SHA256&digits=8 |
| HOTP, counter=0 | issuer=YubiKey | otpauth://hotp/YubiKey:carol?secret=JBSWY3DPEHPK3PXP&issuer=YubiKey&counter=0 |
| TOTP, segredo de referência RFC 6238 | issuer=Example | Segredo de teste RFC padrão (12345678901234567890). Produz TOTP 94287082 em T=59 s. |
Validador de segredo Base32 ao vivo
Apps de autenticação rejeitam segredos que contenham qualquer coisa fora do alfabeto Base32 (A-Z, 2-7). Abaixo está o mesmo validador que a Abundera executa dentro do gerador TOTP, roda no seu navegador.
Insira um segredo para validar.
Armadilhas comuns
- Base32 não é Base64. Base64 usa A-Z, a-z, 0-9, +, /, qualquer uma dessas letras minúsculas ou dígitos 0, 1, 8, 9 no seu segredo significa que foi entregue uma string Base64 que será rejeitada por todo autenticador.
- Comprimento do segredo. RFC 4226 §4 recomenda pelo menos 128 bits (26 chars Base32) para HOTP e 160 bits (32 chars) para TOTP. Segredos abaixo de 80 bits (16 chars) são tecnicamente legais mas sinalizados como fracos.
- O suporte de algoritmo varia. Google Authenticator ignora o parâmetro
algorithme sempre usa SHA1. Para que SHA256/SHA512 entre em vigor, seus usuários devem estar no 1Password, Authy, Bitwarden ou Microsoft Authenticator. - O suporte de dígitos varia. A maioria dos autenticadores ignora
digits=8e trunca silenciosamente para 6. Se OTPs de 8 dígitos importam (banco, alguns apps governamentais), teste seu autenticador alvo antes de implantar. - Codifique o label em URL. Caracteres especiais no emissor ou conta (
:,@, espaço) devem estar com porcentagem-codificados no label, ou autenticadores mais antigos eliminam o label completamente. A Abundera lida com isso automaticamente. - Nunca reutilize segredos. Cada conta recebe um segredo novo e criptograficamente aleatório. Reutilizar um segredo em serviços significa que um comprometimento em um quebra todos.
- O armazenamento importa mais do que o QR. O QR é um bootstrap de uma única vez. O app de autenticação armazena o segredo após o primeiro escaneamento. Se esse segredo for exportado em texto simples depois (alguns apps fazem isso), um vazamento de disco = cada 2FA comprometida.
Compatibilidade de apps de autenticação
| App | TOTP SHA1 | TOTP SHA256/512 | HOTP | 8 dígitos | Notas |
|---|---|---|---|---|---|
| Google Authenticator | Sim | Ignorado | Sim | Ignorado | A linha base de facto. Sempre alveje isso primeiro. |
| 1Password | Sim | Sim | Sim | Sim | Suporte RFC completo. |
| Authy | Sim | Sim | Não | Sim | Removeu HOTP em versões mais recentes. |
| Bitwarden | Sim | Sim | Sim | Sim | Suporte RFC completo. |
| Microsoft Authenticator | Sim | Sim | Sim | Sim | Suporte RFC completo. |
| YubiKey Authenticator | Sim | Sim | Sim | Sim | HOTP é o modo canônico do YubiKey. |
| Duo Mobile | Sim | Ignorado | Não | Ignorado | Usa seu próprio fluxo push; TOTP é apenas fallback. |
Veja também
- /totp-2fa-qr-code/, o gerador TOTP com validador Base32 inline.
- /hotp-qr-code/, variante HOTP baseada em contador.
- /standards/, voltar ao índice de padrões.