Genera códigos TOTP (2FA) y el QR para configurar Google Authenticator
Secrets de ejemplo (solo para pruebas)
También podrías necesitar
TOTP (Time-based One-Time Password) es el estándar detrás de la autenticación de dos factores basada en apps como Google Authenticator, Authy, Microsoft Authenticator y 1Password. Definido en el RFC 6238, TOTP genera un código de 6 dígitos que cambia cada 30 segundos usando HMAC-SHA1 combinado con el tiempo Unix actual. Al implementar 2FA en tu aplicación, tu servidor genera un secret aleatorio en Base32 (ej. JBSWY3DPEHPK3PXP), lo almacena asociado al usuario, y muestra un QR que el usuario escanea con su app autenticadora. Esta herramienta replica exactamente ese proceso para testing y desarrollo: ingresás el secret, ves el código actual y cuántos segundos le quedan, y generás el QR listo para escanear. También podés ingresar el nombre del servicio y la cuenta para que el QR se configure correctamente en la app del autenticador. Todo usa Web Crypto API (HMAC-SHA1 nativo del navegador) y la librería qrcode — sin dependencias externas ni llamadas a servidores.
¿Cómo funciona TOTP internamente?
TOTP calcula el código en tres pasos: 1) Divide el tiempo Unix actual por 30 para obtener el 'time step' (un contador que incrementa cada 30s). 2) Calcula HMAC-SHA1(secret, time_step) donde el secret está en bytes y el time_step está codificado en 8 bytes big-endian. 3) Aplica 'dynamic truncation': toma los últimos 4 bits del HMAC como offset, extrae 4 bytes desde ese offset, descarta el bit de signo, y calcula el módulo 1.000.000 para obtener 6 dígitos. Este proceso es determinístico: dado el mismo secret y el mismo time_step, siempre produce el mismo código — tanto tu app autenticadora como el servidor pueden verificarlo sin comunicarse.
¿Qué es el secret en Base32 y cómo lo genero?
El secret TOTP es una secuencia aleatoria de bytes (típicamente 16-32 bytes = 128-256 bits de entropía) codificada en Base32 para que sea más manejable. Base32 usa el alfabeto A-Z y 2-7, evitando caracteres similares que se confunden visualmente. Para generar un secret seguro en producción, usá crypto.getRandomValues(new Uint8Array(20)) y codificalo en Base32. En esta herramienta podés pegar un secret existente o generar uno con el botón 'Generar secret'.
¿El QR generado funciona con cualquier app autenticadora?
Sí. El QR usa el formato otpauth:// estándar: otpauth://totp/SERVICIO:CUENTA?secret=SECRET&issuer=SERVICIO. Este formato es reconocido por Google Authenticator, Authy, Microsoft Authenticator, 1Password, Bitwarden, Aegis (Android) y FreeOTP. Al escanear, la app configura automáticamente el nombre del servicio, la cuenta y el secret. El período de 30s y los dígitos 6 son los valores estándar — casi todas las implementaciones TOTP los usan.
¿Por qué el código cambia cada 30 segundos?
30 segundos es el período estándar del RFC 6238, elegido como balance entre seguridad y usabilidad. Un período más corto (ej. 10s) daría menos tiempo para ingresar el código. Un período más largo (ej. 60s) ampliaría la ventana de ataque si el código es interceptado. En la práctica, la mayoría de implementaciones TOTP aceptan el código actual y el anterior (una ventana de ±30s) para compensar desfases de reloj. El countdown rojo que aparece cuando quedan pocos segundos te indica que es mejor esperar el próximo código antes de ingresarlo en el servicio.
¿Es seguro usar esta herramienta para probar la implementación de 2FA de mi app?
Sí, para desarrollo y testing. El secret que ingresás nunca sale de tu navegador — todo el cómputo HMAC-SHA1 ocurre localmente con Web Crypto API. Sin embargo, para producción, nunca uses un secret que generaste o pegaste en una herramienta web para usuarios reales: generá los secrets directamente en tu servidor con un CSPRNG y nunca los expongas al cliente. Esta herramienta es ideal para: verificar que tu implementación TOTP en el servidor calcula el mismo código que el estándar RFC 6238, testear el flujo de configuración 2FA con tu app autenticadora, y entender el funcionamiento interno de TOTP.