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=30El 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.