¿Qué es TOTP? Cómo funcionan las contraseñas de un solo uso basadas en tiempo


La versión corta

TOTP significa Time-Based One-Time Password (Contraseña de Un Solo Uso Basada en Tiempo). Es el sistema detrás de aplicaciones como Google Authenticator y Authy que generan códigos de 6 dígitos que escribes al iniciar sesión en tus cuentas. Cada código es válido durante 30 segundos, luego uno nuevo lo reemplaza.

Esa es la idea básica. Pero cómo funciona realmente por dentro es sorprendentemente sencillo.

Una clave secreta y un reloj

TOTP necesita dos ingredientes: una clave secreta y la hora actual.

Cuando configuras la autenticación de dos factores en un sitio web, el sitio genera una clave secreta aleatoria y la comparte contigo, generalmente como un código QR. Tu aplicación autenticadora escanea el código y guarda la clave. El sitio web también guarda una copia. Después de ese intercambio inicial, el secreto nunca se transmite de nuevo.

Aquí es donde se pone interesante. Tanto tu aplicación autenticadora como el servidor del sitio web tienen un reloj. Ambos saben qué hora es. Así que pueden combinar independientemente la clave secreta con la hora actual, ejecutarla a través de la misma matemática, y llegar al mismo código de 6 dígitos. No se necesita comunicación.

Cuando escribes un código en el formulario de inicio de sesión, el servidor genera su propio código usando el mismo secreto y la hora actual, luego verifica si coinciden. Si coinciden, entras.

Cómo se ve la matemática

No necesitas entender la criptografía para usar TOTP, pero aquí está la esencia si tienes curiosidad.

La hora actual se divide en intervalos de 30 segundos. En este momento, hay un número que representa “cuántos bloques de 30 segundos han pasado desde el 1 de enero de 1970” (esa es la época Unix, un punto de referencia común en computación). Ese número se llama el paso de tiempo.

El algoritmo introduce la clave secreta y el paso de tiempo en HMAC-SHA1, una función hash unidireccional. El resultado es una larga cadena de bytes. TOTP extrae un fragmento de esa salida, lo convierte a un número, y toma los últimos 6 dígitos. Ese es tu código.

Como el paso de tiempo cambia cada 30 segundos, el código también cambia. Y como la función hash es unidireccional, alguien que vea un código no puede ingeniería inversa tu clave secreta a partir de él.

Por qué los códigos expiran

La ventana de 30 segundos es un equilibrio. Ventanas más cortas serían más seguras, ventanas más largas te darían más tiempo para escribir. Treinta segundos se estableció como un valor predeterminado sensato en RFC 6238, la especificación que define TOTP.

La mayoría de los servidores en realidad aceptarán códigos de las ventanas de 30 segundos anterior y siguiente también, para compensar el desfase del reloj entre tu dispositivo y el servidor. Así que usualmente tienes unos 90 segundos en la práctica.

Una vez que un código expira, no vale nada. Alguien espiando por encima de tu hombro tiene una ventana muy estrecha para usar lo que ve, y muchos servicios rechazarán un código que ya se ha usado una vez.

RFC 6238: el estándar

TOTP no es propietario. Está definido en RFC 6238, publicado por el Internet Engineering Task Force (IETF) en 2011. La especificación se basa en un estándar anterior llamado HOTP (RFC 4226), que usa un contador en lugar del tiempo. TOTP simplemente reemplazó el contador con un paso de tiempo.

Como es un estándar abierto, cualquier aplicación autenticadora puede generar códigos para cualquier servicio que soporte TOTP. No estás encerrado en un proveedor específico. Google Authenticator, Authy, 1Password, Bitwarden, y docenas de otros usan el mismo algoritmo.

Cómo se compara TOTP con las contraseñas regulares

Una contraseña regular es estática. Es la misma cadena cada vez que inicias sesión. Si alguien la roba a través de una filtración de datos, phishing, o malware, puede usarla una y otra vez hasta que la cambies.

Los códigos TOTP son diferentes de varias maneras:

  • Cambian cada 30 segundos, así que un código robado solo es útil por un breve momento
  • Se generan a partir de un secreto que nunca deja tu dispositivo después de la configuración
  • No pueden ser sujetos de phishing en el sentido tradicional, porque para cuando un atacante intenta usar uno, probablemente ha expirado
  • No dependen de tu capacidad para crear y recordar algo complejo

Dicho esto, TOTP no es un reemplazo para las contraseñas. Es una capa adicional. Aún necesitas una contraseña (algo que sabes), y el código TOTP prueba que también tienes acceso al dispositivo con la clave secreta (algo que tienes).

El lado práctico

Configurar TOTP usualmente toma alrededor de un minuto por cuenta. El servicio te muestra un código QR, lo escaneas con tu aplicación autenticadora, y confirmas ingresando un código. Eso es todo.

De allí en adelante, iniciar sesión toma unos 10 segundos adicionales. Abres tu autenticador, encuentras la cuenta correcta, lees el código, y lo escribes. Es una pequeña fricción que hace tu cuenta dramáticamente más difícil de romper.

Algunas personas se preocupan por perder acceso a su aplicación autenticadora. Esa es una preocupación válida. La mayoría de los servicios te dan códigos de respaldo durante la configuración. Guárdalos en algún lugar seguro. También puedes usar aplicaciones autenticadoras que soportan respaldo en la nube, o guardar tus claves secretas en un gestor de contraseñas.

Pruébalo tú mismo

Si quieres ver TOTP en acción sin comprometerte a nada, puedes generar códigos en 2fa.zip. Funciona completamente en tu navegador, sin secretos enviados a ningún servidor, así que es una buena manera de familiarizarte con cómo funcionan los códigos antes de configurar 2FA en tus cuentas reales.

Protege tus cuentas con autenticación de dos factores

Genera códigos TOTP al instante, directamente en tu navegador.

Prueba nuestro Generador de Códigos 2FA Gratuito

Publicaciones Relacionadas