Glossary
TOTP
Contraseña de un solo uso basada en tiempo
By Buğra SözeriPublished Updated
TOTP (Time-based One-Time Password) es el algoritmo detrás de Google Authenticator, Authy, la función TOTP de 1Password y la mayoría de los 2FA basados en software. Definido en RFC 6238 (2011).
Cómo funciona: en la inscripción, el servidor y la aplicación autenticadora intercambian un secreto compartido (típicamente un valor de 160 bits codificado como cadena base32 o código QR). Para generar el OTP actual, ambos lados:
- Toman el tiempo Unix actual, dividido entre el período (30 segundos por defecto), redondeado hacia abajo.
- Calculan HMAC-SHA1 de ese contador usando el secreto compartido.
- Truncan a 6 dígitos.
Ambos lados producen el mismo código sin comunicarse. La ventana de 30 segundos más una tolerancia de ±1 ventana gestiona la deriva del reloj. El secreto compartido nunca sale del dispositivo después de la inscripción.
TOTP es enormemente mejor que el OTP por SMS (sin exposición al intercambio de SIM) pero no derrota el phishing por sí solo — un atacante que obtiene el código actual puede reproducirlo dentro de la ventana. WebAuthn / passkeys son la respuesta de próxima generación.
El formato de aprovisionamiento del secreto compartido: los códigos QR mostrados por Google Authenticator, GitHub, AWS IAM y otros codifican un URI otpauth://totp/Issuer:label?secret=BASE32SECRET&algorithm=SHA1&digits=6&period=30. El esquema es una convención de Google de 2011 en lugar de una especificación formal de IETF, pero todas las principales aplicaciones de autenticación lo admiten. Algunos servicios (Microsoft, Steam) extienden los dígitos a 7-8 o acortan el período a 15 segundos para mayor entropía a costa de una ventana más ajustada. Lea el QR con una aplicación de lectura de QR genérica una vez para capturar el secreto, luego haga una copia de seguridad sin conexión — perder el acceso al autenticador sin esa copia de seguridad significa pasar por la recuperación de cuenta.
SHA-1 en una especificación de 2026 — ¿es seguro? Sí, en este contexto. El uso de HMAC-SHA1 por TOTP no es vulnerable a los ataques de colisión SHA-1 que retiraron el hash para los certificados TLS; HMAC depende de la resistencia a la preimagen de SHA-1, que permanece intacta. RFC 6238 también permite SHA-256 y SHA-512, pero prácticamente todas las aplicaciones de autenticación tienen SHA-1 como predeterminado para compatibilidad entre proveedores. Si el URI de aprovisionamiento especifica algorithm=SHA256, tanto el verificador como el autenticador deben admitirlo — muchas aplicaciones antiguas fallarán silenciosamente. Relacionado: OTP, SHA-256, JWT.
Ejemplo práctico: derivando un código
Secreto compartido (base32) JBSWY3DPEHPK3PXP. Suponga que el tiempo Unix actual es 1700000000. Contador = floor(1700000000 / 30) = 56666666. Empaque el contador como un entero big-endian de 8 bytes, calcule HMAC-SHA1(secreto, contador) produciendo un resumen de 20 bytes, tome el nibble de orden bajo del último byte como desplazamiento o, lea 4 bytes a partir de o, enmascare el bit alto y tome módulo 10⁶. El resultado es un código de 6 dígitos como 359152. En t = 1700000030 el contador avanza en 1 y el código rota. Doce segundos de sesgo de reloj entre el servidor y el teléfono son inofensivos; sesenta segundos generalmente falla la verificación a menos que el servidor amplíe la ventana de tolerancia.
Cuándo TOTP es la elección correcta
TOTP tiene sentido como segundo factor en cualquier lugar donde un atacante que ya tiene la contraseña debería seguir siendo bloqueado: inicios de sesión bancarios, alojamiento de código, consolas en la nube, correo electrónico. No reemplaza una contraseña (el secreto es simétrico — el compromiso del servidor revela la semilla de cada usuario) y no detiene los kits de phishing en tiempo real como evilginx que hacen un proxy del flujo de inicio de sesión. Para autenticación resistente al phishing, prefiera WebAuthn / passkeys, que vinculan criptográficamente la credencial al origen legítimo. Referencia: NIST SP 800-63B — Directrices de Identidad Digital (Autenticación), que categoriza TOTP como un autenticador AAL2 “algo que tienes” equivalente a secreto memorizado.
Frequently asked questions
- ¿Qué es TOTP?
- TOTP (Time-based One-Time Password, Contraseña de un solo uso basada en tiempo, RFC 6238) es un código de autenticación de 6 dígitos derivado de un secreto compartido y la ventana de tiempo actual de 30 segundos. Es el algoritmo utilizado por Google Authenticator, Authy y la mayoría de las aplicaciones de autenticación.
- ¿Cómo funciona TOTP en la práctica?
- Durante la configuración, el servidor y el dispositivo comparten un secreto (mostrado como código QR). Cada 30 segundos ambos lados calculan independientemente HMAC-SHA1(secreto, floor(tiempo Unix dividido entre 30)) y muestran los últimos 6 dígitos. Como ambos lados usan el mismo secreto y reloj, los códigos coinciden sin comunicación de red.
- ¿Cuál es la diferencia entre TOTP y HOTP?
- HOTP (HMAC-based OTP, RFC 4226) incrementa un contador en lugar de usar tiempo; los códigos son válidos hasta que se usan, lo que los hace más tolerantes a la deriva del reloj pero vulnerables a la repetición si un código nunca se usa y el contador se desincroniza. TOTP usa ventanas de tiempo, por lo que los códigos expiran automáticamente cada 30 segundos.
Related
Published May 15, 2026 · Last reviewed May 31, 2026