O OTP (One-Time Password) é semelhante a uma senha, mas é de uso único. Ele é frequentemente usado em conjunto com uma senha tradicional, atuando como um mecanismo adicional de autenticação para fornecer segurança adicional. O OTP funciona por meio de geração de dinâmica de código, no qual este código pode ser utilizado apenas uma vez, consequentemente aumentando a segurança e dificultando o acesso não autorizado. O código gerado é utilizado por meio de 2 elementos: o elemento de valor fixo, semente (seed), e o fator de movimento (moving factor).
Seed: Uma chave secreta estática criada, preferencialmente randômica.
Moving Factor: Diferente do seed fixo, o mooving factor muda a cada nova instância OTP solicitada.
A primeira etapa do OTP é o registro, feito por meio do segredo compartilhado entre as partes, ou seja, entre o dispositivo do usuário que exibe o código OTP e a aplicação que possui a conta. Todos os OTPs gerados em futuras tentativas de login serão validados com base na mesma semente, ainda que o código seja diferente. No protocolo OTP, existe o TOTP e o HOTP.
TOTP (Time-based One-Time Password): o código gerado expira baseado no tempo, visto que o moving factor é baseado no tempo. É amplamente usado em aplicativos de autenticação de dois fatores (2FA) e gera senhas que mudam a cada intervalo de tempo, que normalmente varia entre 30 e 90 segundos.
HOTP (HMAC-based One-Time Password): o código gerado é enviado ao usuário, sendo válido até o primeiro acesso com aquele código. Após a sessão, ele se torna inválido e enquanto não for utilizado, permanecerá válido até ser usado, sem expiração. O moving factor é baseado em contador. Normalmente é utilizado no código enviado por e-mail ou SMS.
Em resumo, o TOTP usa o tempo como base para gerar códigos de uso único, enquanto o HOTP usa um contador como moving factor.
Conclusão - Qual escolher TOTP ou HOTP?
O TOTP oferece uma maior segurança visto que é baseado em tempo e por isso reduz a janela de oportunidade de utilização por um invasor, porém requer a sincronização de tempo. Essa sincronização pode tornar o desenvolvimento mais complexo e trazer problemas de uso caso os horários dos dispositivos envolvidos estejam dessincronizados. Porém a depender do cenário, o HOTP pode ser mais adequado, visto que é mais simples de ser implementado.
Obrigado por compartilhar este material incrível. 🎯