Guías Seguridad

Cómo funcionan los códigos de doble factor (TOTP)

Cómo se derivan los códigos de seis dígitos de una app autenticadora a partir de un secreto compartido y el reloj, con un vector de prueba verificado del RFC, y sus límites frente al phishing.

Última revisión:

AdSense Placeholder
Slot: header_reference_page
En esta página

Una contraseña de un solo uso basada en el tiempo (TOTP) es un código corto que cambia cada 30 segundos. Tu app autenticadora y el sitio web conocen un secreto compartido y la hora actual, así que cada uno calcula el mismo código por su cuenta. El método está definido en el RFC 6238, que se basa en el HOTP por contador del RFC 4226. Pruébalo con el generador TOTP.

El algoritmo en cinco pasos

  1. Convertir el tiempo en un contador. contador = floor(tiempo_unix / 30).
  2. Aplicar HMAC al contador. Calcula HMAC-SHA1 (o SHA-256/512) del contador de 8 bytes en big-endian, con el secreto como clave. Puedes experimentar con el generador HMAC.
  3. Elegir cuatro bytes. El último nibble del resultado es un desplazamiento; toma los cuatro bytes que empiezan ahí.
  4. Borrar el bit superior. Aplica la máscara 0x7FFFFFFF para que el número sea positivo.
  5. Quedarse con las últimas cifras. Toma el número módulo 10⁶ (para seis dígitos), rellenado con ceros.

Un ejemplo verificado

El secreto de prueba del RFC 4226 es la cadena ASCII 12345678901234567890, que en la forma Base32 usada por las apps autenticadoras es GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ. Para los contadores 0, 1 y 2, HOTP da 755224, 287082 y 359152.

Para TOTP, el RFC 6238 usa el segundo 59 con un paso de 30 segundos y 8 dígitos:

Paso Valor
Contador 59 ÷ 30 → 1
HMAC-SHA1 75a48a19d4cbe100644e8ac1397eea747a2d33ab
Desplazamiento (último nibble) 11
Cuatro bytes, bit superior borrado 1094287082
Últimos 8 dígitos 94287082

La versión de seis dígitos del mismo código es 287082. Convierte marcas de tiempo con el conversor de timestamp Unix para ver en qué paso cae un instante.

Qué hay en el código QR

El código QR contiene un enlace otpauth://totp/... con el secreto, el emisor, el número de dígitos, el periodo y el algoritmo, por ejemplo otpauth://totp/Example:[email protected]?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&issuer=Example&digits=6&period=30. Quien vea el secreto puede generar tus códigos, así que trátalo como una contraseña.

Límites

Método Resistente al phishing Notas
Códigos SMS No Pueden interceptarse o sufrir un intercambio de SIM
App TOTP No Mejor que SMS, pero un sitio falso puede retransmitir el código
Llave de seguridad o passkey Sí Comprueba el dominio real del sitio

Errores comunes

  • Reloj incorrecto. La causa más común de códigos rechazados.
  • Perder el secreto. Guarda los códigos de respaldo o la clave de configuración original en un lugar seguro o podrías quedarte sin acceso.
  • Pegar secretos reales en páginas web. Usa el generador solo con secretos de prueba.
  • Reutilizar un código. Cada código vale para un paso; los servidores suelen rechazar una repetición.

Consulta Cómo generar contraseñas y frases de contraseña seguras para el primer factor, y HMAC y Autenticación multifactor (MFA) para las definiciones.

Pruebe estas herramientas

Véase también

  • Glosario TOTP
    TOTP (contraseña de un solo uso basada en el tiempo) es un código corto, normalmente de seis dígitos.
  • Glosario HOTP
    HOTP (contraseña de un solo uso basada en HMAC) es un código de un solo uso derivado de un secreto compartido y de un contador que aumenta.
  • Glosario HMAC
    HMAC (código de autenticación de mensajes basado en hash) es un hash con clave secreta que prueba que un mensaje viene de quien tiene la.
  • Glosario Autenticación multifactor (MFA)
    La autenticación multifactor (MFA) exige dos o más tipos de prueba para iniciar sesión.
  • Guía Cómo funciona el hashing
    Qué hace una función hash, el efecto avalancha mostrado con salida real de SHA-256, qué algoritmos siguen siendo seguros.

Preguntas frecuentes

El código depende del reloj. Si la hora de tu dispositivo se desvía más de aproximadamente un paso (normalmente 30 segundos), el servidor calcula otro código. Activa la hora automática en el dispositivo.

No. Ambos tienen el mismo secreto y leen la misma hora, así que cada uno calcula el mismo código por su cuenta. El secreto se intercambia una vez, al escanear el código QR.

Sí. Una página de acceso falsa puede pedir el código y usarlo de inmediato, porque el código vale para cualquier sitio que lo pida. Las llaves de seguridad y las passkeys comprueban la dirección real del sitio, por eso resisten el phishing.

AdSense Placeholder
Slot: footer_leaderboard