En realidad, hay una forma de autenticar a un usuario a través de una conexión insegura: Protocolo de contraseña remota segura (SRP) . SRP está diseñado específicamente para permitir que un cliente se autentique a sí mismo en un servidor sin que un atacante Man-in-the-Middle pueda capturar la contraseña del cliente, o incluso reproducir la autenticación para personificar más tarde al cliente, ya sea que la autenticación haya tenido éxito o no. Además, la autenticación exitosa con SRP crea una clave secreta compartida que tanto el cliente como el servidor conocen, pero un MitM no. Esta clave secreta podría usarse para cifrado simétrico y / o HMAC.
Sin embargo, hay una serie de limitaciones de SRP:
- El usuario debe haberse registrado de forma segura, ya que el proceso de registro requiere la transmisión de material equivalente a una contraseña (aunque el servidor no necesita almacenarlo).
- Aunque es seguro intentar un inicio de sesión SRP con un servidor que no sea de confianza (es decir, no expondrá su contraseña a ese servidor, y podrá decir que el servidor no tenía su contraseña en su base de datos), no es seguro cargar una página web de inicio de sesión desde un servidor que no sea de confianza (podría enviar una página que capture cada una de las pulsaciones y la envíe a algún lugar).
- Aunque la autenticación exitosa a través de SRP genera una clave secreta compartida segura, el código para usar realmente esta clave en una aplicación web debería cargarse desde un servidor, y un atacante podría manipular ese código para robar la clave simétrica y hacer Cambios en las solicitudes y respuestas.
En otras palabras, mientras que SRP puede ser útil en situaciones en las que tiene un cliente confiable que no necesita descargar su código a través de la conexión insegura y también tiene otra forma segura de registrar el usuario (s), SRP no es adecuado para una aplicación web. Las aplicaciones web siempre descargan su código del servidor, por lo que si la conexión al servidor no es segura, un MitM (u otro atacante de la red, por ejemplo, alguien que falsifica DNS) puede inyectar código malicioso en la aplicación web y no hay nada que usted, La víctima, puede hacerlo al respecto. Una vez que el código está allí, puede capturar cualquier contraseña u otros datos que ingrese, robar cualquier clave que se genere y manipular las solicitudes que envíe o las respuestas que reciba sin que usted lo sepa.