Cómo funciona TOTP
Cuando escaneas un código QR de 2FA, la app guarda un secreto compartido, normalmente 20 bytes aleatorios mostrados como una cadena Base32 de 32 caracteres. Cada 30 segundos calcula HMAC-SHA1(secreto, ⌊ahora / 30⌋), toma cuatro bytes del resultado en un desplazamiento dado por su último nibble y reduce ese número módulo 10⁶ para obtener seis dígitos. El servidor hace lo mismo, aceptando normalmente también la ventana anterior y la siguiente para tolerar el desfase de reloj. En el teléfono no interviene la red, por eso las apps de autenticación funcionan sin conexión.
El URI otpauth
El código QR contiene un URI como otpauth://totp/Example:[email protected]?secret=JBSWY3DPEHPK3PXP&issuer=Example&digits=6&period=30&algorithm=SHA1. Pegarlo aquí rellena todos los parámetros. La mayoría de los servicios usan los valores por defecto (SHA-1, 6 dígitos, 30 s); unos pocos usan 8 dígitos o SHA-256, y algunas apps ignoran el parámetro de algoritmo, una causa habitual de incidencias de «el código es incorrecto».
Depurar una configuración 2FA
- Pon el secreto aquí y en la app; los códigos deben coincidir. Si no, el secreto se escribió mal o la app ignora los parámetros.
- Si los códigos coinciden pero el servidor los rechaza, el reloj del servidor va mal. TOTP depende de que ambas partes coincidan en la hora dentro de la ventana.
- Comprueba que el servidor verifica con una ventana de ±1 y rechaza la reutilización del mismo código (replay).
Notas de seguridad
El secreto es toda la seguridad: quien lo tenga puede generar códigos para siempre. Guárdalo cifrado, nunca lo registres y prefiere WebAuthn / passkeys cuando sea posible, ya que los códigos TOTP pueden robarse por phishing en tiempo real. Esta página es para desarrolladores que prueban su propia configuración; trata cualquier secreto que pegues en un navegador como datos de prueba.
Preguntas
¿Por qué mi código es distinto del de la app?
Comprueba que el secreto es idéntico (Base32 ignora mayúsculas y espacios, pero cada letra cuenta), que los dígitos, el periodo y el algoritmo coinciden con lo que especificó el servicio y que el reloj de tu ordenador está en hora. Un código que falla por exactamente una ventana significa una diferencia de reloj de unos 30 segundos.
¿Qué es el alfabeto Base32?
A–Z y 2–7; sin 0, 1, 8 ni 9, para que los secretos no sean ambiguos al leerlos en voz alta. El relleno con = es opcional. La herramienta rechaza otros caracteres y te dice cuáles.
¿Cuál es la diferencia entre TOTP y HOTP?
HOTP (RFC 4226) usa un contador que se incrementa con cada uso; TOTP (RFC 6238) sustituye el contador por la hora actual dividida por el periodo. Los tokens hardware con botón son HOTP; las apps son TOTP. Introduce arriba un contador para calcular HOTP.
¿Puedo generar códigos para Google Authenticator o Authy?
Sí, ambos implementan TOTP estándar. Steam Guard y algunas apps bancarias usan variantes propietarias que esta herramienta no reproduce.