Todos los artículos

TOTP: cómo funcionan los códigos de un solo uso en las apps de autenticación

TOTP no salió de la nada: es una extensión directa de HOTP (HMAC-based One-Time Password, RFC 4226, 2005), que usaba un contador incremental en lugar del tiempo. La Initiative for Open Authentication publicó TOTP como RFC 6238 en 2011, sustituyendo ese contador por la hora unix actual dividida en pasos de 30 segundos.

Un secreto compartido más el tiempo

Durante la configuración, el servidor y la app de autenticación intercambian una única clave secreta compartida (justo eso es lo que está codificado en el código QR). A partir de ahí, ambas partes calculan de forma independiente un HMAC a partir de ese secreto y la hora unix actual, redondeada a un intervalo de 30 segundos, obteniendo el mismo código sin comunicarse entre sí.

Por qué esto funciona sin internet

Como el código se calcula localmente a partir del secreto y el reloj del sistema del dispositivo, la app de autenticación no necesita conexión de red para generar un código. El único requisito es que los relojes del servidor y del teléfono estén sincronizados dentro de un pequeño margen permitido (normalmente ±30–60 segundos) — esa es también la razón por la que RFC 6238 define un paso de tiempo, en vez de basarse solo en un contador como HOTP.

Por qué el código cambia cada 30 segundos

El intervalo de tiempo corto limita la ventana durante la cual un código interceptado sigue siendo válido, reduciendo el riesgo de que un atacante lo reutilice. El servidor suele aceptar el intervalo actual más el anterior para compensar un pequeño retraso de red al introducir el código.

Para qué se necesita esto

  • Entender la mecánica de la autenticación de dos factores al configurar o solucionar problemas con apps de autenticación.
  • Probar tu propia implementación de TOTP al desarrollar un sistema de autenticación.
  • Generar códigos para pruebas automatizadas sin introducirlos manualmente desde un teléfono.

Lo que TOTP no protege

TOTP protege eficazmente frente al robo de la contraseña por separado del código, pero no frente al phishing en tiempo real: si la víctima introduce tanto la contraseña como el código TOTP vigente en un sitio falso, el atacante puede usar ambos valores de inmediato en el sitio real mientras el código sigue siendo válido. Solo las llaves de hardware con el estándar FIDO2/WebAuthn, vinculadas criptográficamente a un dominio concreto, protegen frente a este tipo de ataque.

Probar la herramienta