O que e OTP e para que serve
OTP (One-Time Password) e uma senha valida apenas uma vez ou por um periodo limitado de tempo. Diferente de senhas tradicionais, cada codigo OTP e descartavel: apos ser usado ou expirado, nao pode ser reutilizado, eliminando riscos de replay attacks.
OTPs simples sao amplamente utilizados em verificacao de email, confirmacao de transacoes bancarias, SMS de validacao e tokens de acesso temporario para sistemas corporativos.
Como o TOTP funciona (RFC 6238)
TOTP (Time-based One-Time Password) e definido na RFC 6238 e baseia-se no HOTP (RFC 4226). O codigo de 6 digitos e calculado assim:
- Converte-se o timestamp Unix atual para um contador de periodos de 30 segundos:
T = floor(now / 30) - Calcula-se o HMAC-SHA1 do contador (8 bytes big-endian) usando a chave secreta
- Extrai-se um offset dos ultimos 4 bits do HMAC e usa-se 4 bytes a partir desse offset
- O resultado modulo 1.000.000 forma o codigo de 6 digitos com zero-padding
Como o servidor conhece a mesma chave secreta e o mesmo tempo, ele pode calcular o mesmo codigo e validar o que o usuario digitou.
Base32 e a chave secreta
A chave secreta TOTP e codificada em Base32 (alfabeto A-Z e digitos 2-7, sem 0, 1, 8, 9) para facilitar entrada manual. Um segredo tipico tem 16 ou 32 caracteres Base32, representando 10 ou 20 bytes de entropia.
Nunca compartilhe sua chave secreta TOTP. Quem a tiver pode gerar codigos validos a qualquer momento, sem o dispositivo fisico.
Como configurar 2FA com TOTP
Para implementar TOTP em um sistema:
- Gere uma chave secreta aleatoria unica por usuario (minimo 160 bits = 32 chars Base32)
- Exiba o QR Code no formato
otpauth://totp/...para o usuario escanear com seu app - Solicite que o usuario confirme um codigo valido para ativar o 2FA
- Armazene a chave de forma segura (criptografada) no servidor
- Na autenticacao: valide o codigo comparando com o calculado no servidor, aceitando o periodo atual e os adjacentes (drift de clock)
Seguranca e boas praticas
Boas praticas para sistemas TOTP em producao:
- Aceite somente uma vez: marque cada codigo como usado para prevenir replay attacks dentro do mesmo periodo
- Drift de clock: aceite codigos do periodo anterior e seguinte para tolerar pequenas diferencas de horario
- Codigos de recuperacao: forneca codigos backup caso o usuario perca acesso ao dispositivo
- Rate limiting: limite tentativas de validacao para prevenir brute force
- Transporte seguro: transmita sempre via HTTPS e nunca registre codigos OTP em logs
Perguntas frequentes
TOTP funciona sem internet? Sim. O calculo usa apenas a chave secreta e o horario do dispositivo. Apps autenticadores funcionam offline.
Por que o codigo muda a cada 30 segundos? O periodo de 30s equilibra seguranca (codigos nao ficam validos por muito tempo) e usabilidade (tempo suficiente para digitar).
Posso usar esta ferramenta para producao? Para fins de teste, desenvolvimento e aprendizado, sim. Para producao, implemente no backend onde a chave secreta fica protegida e utilize bibliotecas auditadas.