Qué es la verificación en dos pasos
- **Algo que sabes**: una contraseña, un PIN
- **Algo que tienes**: el móvil, una llave física
- **Algo que eres**: la huella dactilar, la cara
La verificación en dos pasos exige dos de esas categorías. Tu contraseña es el primer factor (algo que sabes) y tu móvil o tu llave física el segundo (algo que tienes).
La ganancia en seguridad: aunque alguien te robe la contraseña (con un engaño, una filtración de datos o fuerza bruta), no puede entrar sin acceso físico a tu segundo factor.
Verificación por SMS
El método más extendido y también el más criticado. Tras escribir la contraseña, el servicio manda un código de 6 dígitos a tu número de teléfono y lo introduces para terminar de entrar.
**Puntos débiles:**
**Duplicado de SIM**: alguien llama a tu operadora, se hace pasar por ti y la convence de trasladar tu número a una tarjeta SIM que controla. A partir de ahí, los SMS con los códigos le llegan a esa persona. Se ha usado para vaciar carteras de criptomonedas y secuestrar cuentas de redes sociales de gente conocida.
**Vulnerabilidades de SS7**: el protocolo de señalización sobre el que funciona la red telefónica mundial tiene fallos conocidos que permiten interceptar mensajes SMS. Los atacantes con recursos (estados, delincuencia organizada) pueden explotarlos.
**Suplantación de webs**: una web falsa puede reenviar tu código al sitio real en tiempo real. Tú lo escribes en la web falsa y quien te ataca lo usa de inmediato en la de verdad.
La verificación por SMS es bastante mejor que nada. Pero para las cuentas que importan (correo, banca, cualquier cosa con datos sensibles) conviene un método más fuerte.
TOTP: cómo funcionan las aplicaciones de códigos
TOTP (contraseña de un solo uso basada en el tiempo, definida en el RFC 6238) es lo que usan aplicaciones como Google Authenticator, Authy o 1Password. Este es el mecanismo técnico:
1. **Secreto compartido:** al activar la verificación en dos pasos, el servicio genera una clave secreta aleatoria (normalmente de 16 a 32 bytes). Es la cadena que hay detrás del código QR que escaneas. Ese secreto lo guardan tanto el servidor como tu aplicación.
2. **Contador de tiempo:** TOTP usa el timestamp Unix actual dividido entre 30 (el intervalo estándar, que da ventanas de 30 segundos).
3. **Cálculo del HMAC:** tu aplicación calcula HMAC-SHA1(secreto, contador), lo recorta a 6 dígitos y muestra el resultado.
4. **Verificación:** cuando escribes el código, el servidor hace el mismo cálculo. Si coinciden, estás dentro. El servidor comprueba también el intervalo anterior y el siguiente, por si los relojes van algo desajustados.
El código de 6 dígitos vale 30 segundos y luego cambia. Quien lo intercepte solo puede usarlo dentro de esa ventana.
**Ventajas frente al SMS:** no hace falta número de teléfono, funciona sin conexión y no es vulnerable al duplicado de SIM ni a los ataques por SS7. Y resiste bastante mejor los engaños si compruebas la dirección antes de escribir el código.
**Punto débil:** la suplantación en tiempo real sigue funcionando si escribes el código en una web falsa que lo reenvía al momento a la real. La protección es la ventana de 30 segundos, no la resistencia al engaño en sí.
Llaves de seguridad físicas (WebAuthn y FIDO2)
Las llaves físicas (YubiKey, la llave Titan de Google) usan criptografía asimétrica. Al registrarla, la llave genera un par de claves único para ese sitio y guarda la clave privada en el propio dispositivo. Al iniciar sesión, el servidor envía un desafío, la llave lo firma con la clave privada y el servidor lo verifica con la pública.
**Ventajas:** son inmunes a la suplantación de webs. La clave privada nunca sale del dispositivo y cada par de claves es único para ese dominio, así que una web falsa no puede obtener una respuesta válida porque las claves no coinciden. Y no se pueden duplicar: hace falta tener la llave en la mano.
**Inconvenientes:** cuestan dinero (entre 20 y 70 euros), se pueden perder o robar y algunos sitios todavía no las admiten.
Los métodos, de peor a mejor
De más débil a más fuerte: 1. Sin verificación en dos pasos 2. Preguntas de seguridad (que en realidad no son un segundo factor y se adivinan sin esfuerzo) 3. Códigos por SMS (vulnerables al duplicado de SIM y a SS7) 4. Códigos de un solo uso por correo (tan seguros como lo sea tu cuenta de correo) 5. Aplicaciones de códigos TOTP (buenas y muy compatibles) 6. Llaves de seguridad físicas (lo mejor que hay, inmunes a la suplantación)
Para la mayoría de la gente, las aplicaciones TOTP son la mejor opción práctica. Reserva las llaves físicas para las cuentas realmente críticas (correo, criptomonedas, paneles de administración del trabajo) si el coste te compensa.
El generador de códigos TOTP de NoxaKit demuestra este algoritmo: genera códigos válidos de 6 dígitos a partir de un secreto en base32, íntegramente en el navegador.