Códigos QR TOTP 2FA explicados

Un análisis técnico en profundidad del formato URI otpauth://, los secretos en base32 y la matemática TOTP según RFC 6238.

Qué es TOTP

TOTP (Time-based One-Time Password, RFC 6238) es el algoritmo detrás de Google Authenticator, Authy, 1Password, Bitwarden y cualquier otra aplicación de autenticación. Produce un código de 6 dígitos que cambia cada 30 segundos basándose en un secreto compartido y la hora Unix actual.

El URI otpauth

otpauth://totp/Issuer:account@example.com?secret=BASE32SECRET&issuer=Issuer&algorithm=SHA1&digits=6&period=30

El esquema de URI es otpauth://, el tipo es totp (la otra opción es hotp, basado en contador), luego la etiqueta y los parámetros de consulta. Las aplicaciones de autenticación interpretan este URI y lo añaden al almacén del usuario con un solo escaneo.

La etiqueta

Formato opcional: Issuer:account@example.com. El prefijo Issuer es redundante con el parámetro de consulta issuer, pero la mayoría de las aplicaciones respetan ambos.

El secreto

Una cadena de bytes codificada en base32 (A-Z y 2-7, sin relleno). Se recomienda un mínimo de 128 bits, la mayoría de los servidores usan 160 bits (32 caracteres base32). Nunca codifiques el secreto con URL; déjalo como base32 puro.

Algoritmo, dígitos, periodo

algorithm: SHA1 (por defecto, universalmente compatible), SHA256 o SHA512. digits: 6 (por defecto) u 8. period: 30 segundos (por defecto) o 60. Mantén los valores predeterminados a menos que tengas una razón para cambiarlos, algunas aplicaciones de autenticación no implementan las opciones no predeterminadas.

Cómo se calcula el código

En cada intervalo de 30 segundos, el autenticador hace: HMAC-SHA1(secret, floor(unix_time / 30)), toma los últimos 4 bits del HMAC como desplazamiento dinámico, lee 4 bytes a partir de ese desplazamiento, aplica máscara a 31 bits y reduce módulo 106 para obtener un código de 6 dígitos.

Generar uno con Abundera QR

Abre el generador TOTP, completa el emisor (nombre de tu marca), la cuenta (email o nombre de usuario del usuario) y un secreto en base32. Los valores predeterminados de algoritmo/dígitos/periodo son correctos para casi cualquier servidor. Descarga el PNG y envíalo por correo electrónico o SMS al usuario, o intégralo en tu flujo de registro.

Nota de privacidad

Tu secreto TOTP es una credencial compartida entre el servidor y el usuario. Abundera QR nunca lo ve. Toda la codificación ocurre en el navegador. Lee la política de privacidad completa.