Hace algún tiempo hubo una gran confusión sobre Firesheep: al escuchar el tráfico de wifi, su sesión de inicio de sesión puede ser robada, lo cual es muy malo porque ahora alguien puede, por ejemplo. enviar correos electrónicos en su nombre. Algunas personas dijeron que el uso de SSL para todo el sitio era la única solución. Pero no pensé que esto fuera cierto: si puede mantener la contraseña o el equivalente almacenado en el lado del cliente, y nunca lo envía al servidor, sino que autentica todas las solicitudes que realiza con esta contraseña, entonces nadie puede hacerse pasar por usted (a menos que ellos saben tu contraseña). Por ejemplo, cuando realiza una solicitud HTTP req
, en su lugar, realiza la solicitud r + "?hmac=HMAC(password, req)"
para demostrar que conoce la contraseña.
Luego encontré un documento sobre un protocolo llamado SessionLock , cuyo objetivo es resolver el mismo problema. Es un poco diferente de lo que describí anteriormente, y tengo algunas preguntas al respecto.
Primero, ¿por qué establecen un secreto compartido a través de SSL o usando el protocolo Diffie-Hellman, cuando ya hay un secreto compartido disponible (la contraseña o una versión con hash de la contraseña)?
Segundo, sobre la versión que usa Diffie-Hellman que dicen:
Si el navegador pierde su secreto, puede volver a ejecutar una clave Diffie-Hellman intercambiar con el servidor, utilizando un número de llamadas XMLHttpRequest.
¿Alguien puede explicar cómo funciona esto? Supuestamente el lado del cliente no guardó la contraseña, y también perdió el secreto compartido. Entonces, por lo que veo, el lado del cliente no sabe nada, pero él es capaz de restablecer un secreto compartido que se puede usar para hacer cosas autenticadas. ¿No podría un atacante hacer exactamente lo mismo? ¿Qué me estoy perdiendo?