He visto varios métodos de autenticación de sitios web de 2 pasos por ahí. Algunos incluyen dos contraseñas, HOTP / TOTP, Yubikey, SMS a un número de teléfono, etc. Sin embargo, parece que todos estos sistemas dependen de su computadora o dispositivo principal para no ser comprometidos.
Para ser específico, permítame referirme específicamente a TOTP. Aquí hay un flujo típico de un sitio web de TOTP para un sitio:
- Escribes tu contraseña en tu computadora
- Abre su aplicación 2FA (por ejemplo, autenticación de FreeOTP, autenticación de Google)
- Escribe el token TOTP actual en tu computadora
Si un atacante tenía un registrador de teclas o un registrador de CPU en su computadora, ¿no pueden acceder a su cuenta? En el paso 3, asumiendo que su computadora está comprometida, tienen tanto su contraseña como su token TOTP actual. Entiendo que el atacante solo puede acceder a su cuenta una vez porque el token TOTP caducará después de 30 segundos.
Sin embargo, qué pasaría si el flujo típico de un sitio web de TOTP fuera el siguiente:
- Escribes tu contraseña en tu computadora
- Abre su aplicación 2FA (por ejemplo, autenticación de FreeOTP, autenticación de Google)
- Envía el token TOTP actual directamente desde su teléfono al servidor del sitio en el que estaba intentando iniciar sesión desde su computadora
No veo cómo sería mucho más esfuerzo en el lado del servidor del sitio. Supongo que solo necesitaría un punto final que escuche los tokens TOTP entrantes que se envían con un nombre de usuario para identificar para qué inicio de sesión está el token TOTP entrante. Ahora un atacante tendría que instalar un keylogger en su computadora (o dispositivo principal) y en su teléfono (o segundo dispositivo) para obtener acceso a su cuenta.
En mi opinión, con esta configuración propuesta, un mecanismo de seguridad definitivo sería una computadora + un dispositivo de hardware específico que sea capaz de enviar claves TOTP a un servidor (tal vez como un Bitcoin Trezor pero en lugar de mostrar una dirección de bitcoin, sería mostrar un nombre de dominio o dirección IP para confirmación). Pero por lo que sé, no veo un impulso para usar dos entidades separadas para realizar la autenticación del sitio web. ¿Hay alguna razón para esto?