MFA: Autenticación Multifactor y FIDO2
Factores de autenticación, TOTP, SMS OTP y autenticación sin contraseña con WebAuthn
Los Tres Factores de Autenticación
MFA exige al menos dos categorías distintas. Combinar dos métodos del mismo tipo (dos contraseñas) no es MFA real.
🔑
Algo que SABES
Contraseña, PIN, pregunta secreta
Debilidad: Phishing, keylogger, reutilización
📱
Algo que TIENES
Teléfono (TOTP), hardware token (YubiKey), tarjeta inteligente
Debilidad: Robo del dispositivo, SIM swap
👁️
Algo que ERES
Huella digital, iris, reconocimiento facial, voz
Debilidad: Difícil de revocar si se compromete; spoofing biométrico
TOTP — Time-based One-Time Password
Definido en RFC 6238 (basado en HOTP, RFC 4226). Genera un código numérico de 6 dígitos que cambia cada 30 segundos. El secreto compartido se intercambia una vez vía QR (provisioning).
# Cálculo TOTP (simplificado)
T = floor(unix_timestamp / 30) # contador de ventana
HMAC = HMAC-SHA1(secret, T)
offset = HMAC[19] & 0xf
code = (HMAC[offset..offset+3] & 0x7fffffff) % 10^6
# Apps: Google Authenticator, Authy, Microsoft Authenticator
Ventajas
- • No requiere conectividad (offline)
- • El código expira en 30 s
- • Phishing-resistant si se usa con WebAuthn
Debilidades
- • Vulnerable a phishing en tiempo real (evilginx2, Modlishka)
- • Si el secreto se filtra, se puede clonar
- • Usabilidad inferior a passkeys
SMS OTP — ¿Por qué evitarlo?
El SMS sigue siendo el MFA más extendido, pero el NIST (SP 800-63B) lo considera método restringido y recomienda alternativas. Las razones son claras:
SIM Swap
El atacante convence a la operadora para trasladar el número a una SIM que controla. Se ha usado en robos cripto de millones de dólares.
SS7 Hijacking
Vulnerabilidades en el protocolo SS7 de las telecomunicaciones permiten interceptar SMS en tránsito. Conocido desde 2014.
Malware en Android
Apps maliciosas con permisos SMS pueden leer el OTP en tiempo real y reenviarlo al atacante.
Phishing en tiempo real
Un proxy phishing (evilginx2) intercepta el OTP antes de que expire y lo reutiliza en la sesión del atacante.
FIDO2 / WebAuthn — Passkeys
FIDO2 es el estándar de la FIDO Alliance que combina WebAuthn (W3C) + CTAP2 (Client to Authenticator Protocol). Elimina la contraseña usando criptografía de clave pública.
# Registro (enrollment)
1. Servidor envía challenge aleatorio
2. Autenticador genera par de claves (privada nunca sale del dispositivo)
3. Autenticador envía clave pública + credential ID firmados
4. Servidor almacena clave pública
# Autenticación
1. Servidor envía nuevo challenge
2. Usuario verifica (biometría / PIN local)
3. Autenticador firma el challenge con clave privada
4. Servidor verifica firma con clave pública almacenada ✅
¿Por qué FIDO2 es phishing-resistant?
La clave privada está ligada al origin (https://banco.com). Aunque el atacante clone el sitio en https://banco-fake.com, el autenticador detectará un origin diferente y rechazará la autenticación. No existe código que interceptar.
Platform Authenticator
Touch ID, Face ID, Windows Hello, Android biometrics
Clave almacenada en TPM/Secure Enclave del dispositivo
Roaming Authenticator
YubiKey 5, Google Titan Key, SoloKey
Llave hardware USB/NFC. Funciona en cualquier dispositivo
Passkeys Sincronizadas
iCloud Keychain, Google Password Manager
Passkeys multiplataforma. Clave protegida en la nube del proveedor
Recomendaciones de Implementación
Migrar de SMS OTP a TOTP como mínimo; priorizar FIDO2/passkeys para cuentas privilegiadas.
Obligar MFA para: accesos de administración, VPN, accesos a producción, y email corporativo.
Usar hardware tokens (YubiKey) para cuentas críticas: root, Domain Admin, break-glass accounts.
Registrar siempre 2+ métodos de MFA para evitar lockout si se pierde uno.
Implementar alertas cuando un usuario falla MFA más de 5 veces (posible ataque MFA fatigue).
Auditar trimestralmente los métodos MFA registrados por usuario.
Siguiente Paso
Aprende cómo SSO y la federación con SAML y OIDC unifican la autenticación
SSO y Federación: SAML y OIDC →