Autenticación y contraseñas

TOTP (Contraseña de un solo uso basada en tiempo)

Lectura de aproximadamente 4 minutos

Qué es TOTP

TOTP (Time-based One-Time Password) es un algoritmo que genera una nueva contraseña de un solo uso de 6 dígitos cada cierto tiempo (normalmente 30 segundos) combinando la hora actual con una clave secreta compartida. Está estandarizado en RFC 6238 y se adopta ampliamente como método de implementación de la autenticación de dos factores.

Aplicaciones de autenticación como Google Authenticator, Microsoft Authenticator y Authy utilizan este mecanismo. Al iniciar sesión en un servicio, además de la contraseña, se introduce el código de 6 dígitos que muestra la aplicación de autenticación, lo que previene el inicio de sesión no autorizado incluso si la contraseña se filtra.

Funcionamiento de TOTP

El principio de funcionamiento de TOTP es simple pero robusto.

  1. Compartición de la clave secreta: Al configurar TOTP en un servicio, el servidor genera una clave secreta (normalmente un valor de 160 bits codificado en Base32). Esta clave se muestra como un código QR y se almacena también en la aplicación de autenticación al escanearlo
  2. Cálculo del contador de tiempo: Se utiliza como contador el valor entero resultante de dividir la marca de tiempo Unix actual entre 30 segundos. Como el servidor y la aplicación hacen referencia a la misma hora, obtienen el mismo valor de contador
  3. Generación mediante HMAC-SHA1: Se introduce la clave secreta y el valor del contador en el algoritmo HMAC-SHA1 para generar un valor hash. De este valor hash se extrae dinámicamente un número de 6 dígitos
  4. Verificación: El servidor realiza el mismo cálculo y verifica si coincide con el código introducido por el usuario. Para compensar desfases horarios, generalmente se aceptan también los códigos de 1-2 pasos anteriores y posteriores

La clave secreta no viaja por la red, y el código generado se invalida en 30 segundos, por lo que incluso si se introduce un código en un sitio de phishing, el tiempo que el atacante puede reutilizar ese código es extremadamente limitado.

Comparación con la autenticación por SMS

Aunque la autenticación por SMS también se utiliza ampliamente como método de autenticación de dos factores, TOTP es superior en términos de seguridad.

  • Resistencia a ataques de intercambio de SIM: La autenticación por SMS es vulnerable a ataques de intercambio de SIM donde el atacante engaña al operador móvil para apoderarse del número de teléfono. TOTP genera códigos con la clave secreta dentro del dispositivo, por lo que no puede ser vulnerado mediante el secuestro del número de teléfono
  • Seguridad de la vía de comunicación: Los SMS pueden ser interceptados debido a vulnerabilidades del protocolo SS7. TOTP no requiere comunicación de red, por lo que no hay riesgo de interceptación
  • Funcionamiento sin conexión: TOTP puede generar códigos incluso cuando el dispositivo está sin conexión. Los SMS no se pueden recibir en lugares sin cobertura
  • Coste: El envío de SMS tiene un coste para el proveedor del servicio. TOTP se completa solo con el cálculo del lado del servidor

Sin embargo, TOTP también tiene debilidades. Es vulnerable a ataques de phishing en tiempo real (phishing de retransmisión donde el atacante reenvía inmediatamente el código introducido al sitio legítimo). Contra este ataque, son efectivos los métodos de autenticación con resistencia al phishing como las passkeys.

Cómo elegir una aplicación de autenticación y respaldo

El punto más importante al elegir una aplicación de autenticación es la función de respaldo. Si pierde el acceso a la aplicación de autenticación por pérdida o avería del dispositivo, existe el riesgo de no poder iniciar sesión en ninguno de los servicios registrados.

  • Authy: Compatible con respaldo en la nube y sincronización en múltiples dispositivos. Fácil recuperación en caso de pérdida del dispositivo
  • Microsoft Authenticator: Compatible con respaldo en iCloud / cuenta de Google. Alta afinidad con entornos empresariales
  • Google Authenticator: Compatible con sincronización en cuenta de Google (desde 2023). Simple y ligero
  • 1Password / Bitwarden: Permiten gestionar de forma centralizada el gestor de contraseñas y TOTP. La comodidad es alta, pero al almacenar contraseñas y TOTP en el mismo lugar, la independencia de los dos factores se reduce estrictamente

Independientemente de la aplicación que elija, guarde siempre los códigos de recuperación (códigos de respaldo) que se muestran al configurar TOTP en un lugar seguro. Se recomiendan métodos como escribirlos en papel y guardarlos en una caja fuerte, o almacenarlos en un archivo cifrado.

Conceptos erróneos comunes

Si configuro TOTP, puedo prevenir completamente el phishing
TOTP es efectivo como defensa contra la filtración de contraseñas, pero es vulnerable al phishing de retransmisión en tiempo real (técnica donde el atacante reenvía inmediatamente el código introducido al sitio legítimo). Si se necesita resistencia completa al phishing, utilice passkeys o llaves de seguridad FIDO2.
Los códigos de la aplicación de autenticación son exclusivos del dispositivo, así que nadie más puede generarlos
Los códigos TOTP se calculan a partir de la clave secreta y la hora actual, por lo que cualquiera que conozca la clave secreta puede generar el mismo código. No muestre a nadie capturas de pantalla del código QR ni la cadena de la clave secreta.

Comparación entre TOTP y autenticación por SMS

TOTP (aplicación de autenticación)

Se genera dentro del dispositivo. Resistente a ataques de intercambio de SIM. Funciona sin conexión. Requiere respaldo de la clave secreta.

Autenticación por SMS

Se envía al número de teléfono. Vulnerable a ataques de intercambio de SIM. Requiere cobertura. Fácil de implementar si se dispone de número de teléfono.

Términos relacionados

Artículos relacionados