Autenticación de Dos Factores: Qué es, cómo funciona y más

Imagina que tu puerta principal tiene dos cerraduras. Una es tu llave (tu contraseña), y la otra un código que cambia constantemente y se envía a tu teléfono (tu segundo factor). Esa es la esencia de la Autenticación de Dos Factores (2FA), un sistema de seguridad que añade una capa extra de defensa contra accesos no autorizados a tus cuentas en línea.
OTP y 2FA: ¿Son lo mismo?
Aunque a menudo se usan indistintamente, hay una diferencia sutil entre OTP (Contraseña de un solo uso) y 2FA:
- OTP: Un OTP es un código único y único que se usa para un solo intento de inicio de sesión. Puede enviarse por SMS, correo electrónico o generarse mediante una aplicación. Piénsalo como el código desechable en el chip de tu tarjeta de crédito.
- 2FA: 2FA es un sistema más amplio que se basa en dos factores para la autenticación: algo que sabes (contraseña) y algo que tienes (teléfono, llave de seguridad) o algo que eres (huella dactilar, reconocimiento facial). OTP es un método utilizado para lograr 2FA, pero no es el único.
Por lo tanto, Google Authenticator no es mejor que la 2FA en sí misma. Google Authenticator es una aplicación que utiliza el método TOTP (Contraseña de un solo uso basada en tiempo) para generar códigos OTP para 2FA. Los códigos TOTP se consideran más seguros que los OTP tradicionales enviados por SMS porque cambian a intervalos regulares (usualmente cada 30 segundos) y no dependen de redes celulares.
El contendiente más fuerte en el ring de la 2FA
Cuando se trata del método 2FA "más fuerte", depende de la situación. Esto es lo que sabemos:
Aplicaciones autenticadoras:
- TOTP (Contraseña de un solo uso basada en tiempo): Este es el motor que impulsa la mayoría de las aplicaciones autenticadoras como Google Authenticator o Microsoft Authenticator. Utiliza una combinación de:
- Clave secreta: Una clave secreta única y compartida entre la aplicación y el servicio en línea al que inicias sesión. Esta clave se genera típicamente durante la configuración inicial.
- Sincronización de tiempo: Tanto la aplicación como el servidor se basan en la misma referencia de tiempo (usualmente basada en UTC - Tiempo Universal Coordinado).
- La creación del código: La aplicación usa un algoritmo específico (como HMAC-SHA1) para combinar la clave secreta con el tiempo actual, generando un código único que cambia aproximadamente cada 30 segundos. Esto asegura que, incluso si alguien intercepta un código, será inútil en una ventana corta de tiempo.
- Verificación: Cuando ingresas el código generado durante el inicio de sesión, el servidor realiza el mismo cálculo usando la misma clave secreta y el tiempo actual. Si los códigos coinciden, se concede el acceso.
Llaves de seguridad:
- Criptografía de clave pública: Las llaves de seguridad como YubiKeys se basan en criptografía de clave pública. Este sistema involucra dos claves matemáticamente vinculadas: una clave pública y una clave privada.
- Clave pública (en el servidor): Esta clave está disponible públicamente y es usada por el servidor para cifrar los desafíos.
- Clave privada (en la llave): Esta clave se almacena de forma segura dentro de la llave de seguridad y nunca sale del dispositivo. Se usa para descifrar el desafío y generar una firma digital.
- Desafío-respuesta: Durante el inicio de sesión, el servidor envía un desafío a la llave de seguridad. La llave usa su clave privada para descifrar el desafío y crear una firma digital.
- Verificación: La respuesta firmada se envía de vuelta al servidor. El servidor usa la clave pública (la