Como funcionam os códigos da 2FA? O TOTP explicado
Pela equipe Novaz · Atualizado em 29 de outubro de 2026
Passos do Novaz verificados na versão 1.0.5
Traduzido do guia em inglês. No site do serviço, os botões e menus podem ter nomes um pouco diferentes em português.
Nesta página
Um app autenticador e um site calculam, cada um, o mesmo número de 6 dígitos a partir de duas coisas que os dois têm: uma chave secreta que compartilharam uma vez e a hora atual. Nada é enviado entre eles quando você faz login. É por isso que o código funciona sem sinal e muda a cada 30 segundos. O método se chama TOTP, de "time-based one-time password" (senha de uso único baseada em tempo), e é um padrão aberto (RFC 6238).
Ingrediente 1: a chave de configuração
Quando você ativa a 2FA, o site cria um segredo aleatório e o mostra como um QR code, com uma versão em texto chamada chave de configuração. O seu app salva essa chave. A partir daí, o site e o app têm a mesma chave, e ninguém mais deveria ter.
O QR code é só um link em um formato padrão, otpauth://totp/…, com a chave, o nome do serviço, o nome da sua conta e, opcionalmente, os ajustes descritos abaixo. O nosso decodificador de QR code da 2FA mostra o que há dentro de um.
Ingrediente 2: a hora, contada em intervalos
Os dois lados pegam a hora atual em segundos desde 1º de janeiro de 1970 (hora Unix) e dividem por 30, descartando o resto. O resultado é um número inteiro que aumenta em um a cada 30 segundos. O RFC 6238 chama esse número de T e recomenda "a default time-step size of 30 seconds" (um intervalo padrão de 30 segundos).
Misturando os dois em um código
O app passa a chave e o T pelo HMAC, uma função criptográfica, geralmente com SHA-1. Depois, reduz o resultado a um número curto, com um método definido no padrão HOTP (RFC 4226, seção 5.3):
- Os últimos 4 bits do resultado do HMAC indicam uma posição dentro dele.
- O app pega 31 bits a partir dessa posição, como um número.
- Ele mantém os últimos 6 dígitos desse número. Alguns serviços usam 8.
Mude a chave ou o intervalo e você terá um código completamente diferente. Não dá para fazer o caminho inverso, do código até a chave.
Try it: a live TOTP code
Calculated in your browser from an example key. Don't paste a real setup key here.
Current code
…
Previous: …
Next: …
- Unix time
- …
- Time step T = ⌊time ÷ 30⌋
- …
- Seconds left
- …
Por que o site aceita o código
O site faz o mesmo cálculo com a cópia dele da chave e com o próprio relógio. Se os números baterem, você entra. Dois detalhes fazem isso funcionar na prática:
- Uma pequena folga para atrasos. Um código digitado no fim de um intervalo pode chegar no seguinte. O RFC 6238 recomenda que "at most one time step is allowed as the network delay" (no máximo um intervalo seja tolerado como atraso da rede), então muitos sites também aceitam o código imediatamente anterior ao atual.
- Cada código funciona uma vez. O padrão diz que um servidor "MUST NOT accept the second attempt" (NÃO DEVE aceitar a segunda tentativa) de um código que já aceitou. As diretrizes do NIST nos EUA dizem o mesmo: os verificadores "SHALL accept a given OTP only once while it is valid" (DEVEM aceitar um OTP só uma vez enquanto ele for válido) (NIST SP 800-63B-4).
É também por isso que um relógio errado quebra os códigos. Se o seu iPhone está um minuto defasado, ele calcula o código de um intervalo diferente do que o site usa. Veja Código do autenticador não funciona?
Ajustes que um serviço pode mudar
Os padrões permitem algumas variações, e um QR code pode levá-las:
| Ajuste | Valor comum | Também permitido |
|---|---|---|
| Hash | SHA-1 | SHA-256, SHA-512 (RFC 6238, seção 1.2) |
| Dígitos | 6 | 7 ou 8 (RFC 4226, seção 5.3) |
| Intervalo | 30 segundos | Outras durações |
Se um serviço usa algo incomum, adicione-o escaneando o QR code em vez de digitar a chave, para que o app receba os ajustes também.
TOTP e HOTP
O HOTP, o padrão mais antigo, usa um contador que aumenta cada vez que você pede um código, em vez da hora. O TOTP é o HOTP com o intervalo de tempo como contador: "TOTP = HOTP(K, T)". A maioria dos sites usa TOTP hoje.
Do que o TOTP não protege
Como você mesmo digita o código, uma página de login falsa convincente pode pedi-lo e usá-lo na hora. O NIST diz sem rodeios: "OTP authentication is not phishing-resistant" (a autenticação por OTP não é resistente a phishing). Chaves-senha (passkeys) e chaves de segurança são. Mais em App autenticador ou SMS.
No Authenticator App - Novaz
O Novaz gera códigos TOTP padrão no seu iPhone:
- Por QR code: SHA-1, SHA-256 ou SHA-512; de 6 a 8 dígitos; intervalos de 1 a 300 segundos.
- Por chave digitada à mão: sempre 6 dígitos, 30 segundos e SHA-1.
Ele não gera códigos HOTP. Ele também confere o relógio do seu iPhone e avisa quando a defasagem é de 15 segundos ou mais.