Estoy tratando de ver cómo intercambiar las claves de los usuarios con un servidor.
Tal vez durante el registro un applet JS genere un par de claves para el usuario. Estas claves se utilizarían para firmar solicitudes posteriores del usuario al servidor, por lo que el servidor necesita una copia de la clave pública de los usuarios para asociarse con la cuenta de ese usuario.
Pero el envío de la clave pública al servidor está sujeto a ataques MITM: si un malo lo suficientemente motivado quisiera, podría ponerse en el medio, capturar la clave pública de camino al servidor y sustituirla por una clave Él controla la clave secreta.
Parte de la solución parece ser que el agente envíe la clave pública solo a través de un canal cifrado, por ejemplo, TLS. Pero parece que con las aplicaciones basadas en el navegador, la responsabilidad sigue siendo muy importante para que el usuario sea educado y esté lo suficientemente despierto como para darse cuenta de que su sesión no es con el servidor correcto con el que debe estar conectado. En particular, nuestro chico malo motivado podría configurar algo que parezca auténtico y creíble, por ejemplo,
httpS://certificate_server_acme.com
que él tendría el control de. Nuestro usuario puede no darse cuenta de que DEBE estar conectado solo, por ejemplo, httpS://certificates.acme.com
Sospecho que esto es solo un caso de "certificados autofirmados". Las contraseñas no resuelven el problema. La verificación de la clave de un usuario por medio de un mensaje de correo electrónico no es viable, a menos que los usuarios puedan comparar y verificar una clave y nuestro malvado motivado no pueda manipular los mensajes de correo electrónico de camino al usuario.
¿O hay algo, tal vez una característica de OpenID, que pueda usarse?