Actualmente tengo una aplicación de escritorio que requiere que el usuario tenga un nombre de usuario y una contraseña. Estas credenciales se almacenan en un servidor web (myserver.com), de modo que cuando escribe el nombre de usuario y la contraseña y hace clic en el botón Iniciar sesión, se envían al servidor web. Si las credenciales son correctas, el servidor devolverá "ok", se mostrará información del usuario y se mostrará el formulario principal. Si no, el servidor devolverá "incorrecto" y se mostrará una alerta. Sin embargo, esto es muy inseguro, porque un usuario puede simplemente editar el archivo de hosts, redirigir myserver.com a su localhost, que siempre devuelve "ok", y omitir la pantalla de inicio de sesión. Me dijeron que generara un par de claves RSA y luego cifrara un "nonce" (un número aleatorio) en la aplicación de escritorio y lo enviara junto con las credenciales. Si el servidor pudiera devolver el número descifrado, eso significaría que en realidad es mi servidor. Tengo que decir que el servidor web está alojado en Heroku, por lo que HTTPS está habilitado de forma predeterminada, pero no tengo ningún certificado SSL. Esto parece ser bastante bueno, pero ¿es esto propenso a un ataque de hombre en el medio? Un atacante podría simplemente redirigir myserver.com a su host local, enviar la solicitud de localhost, recibir el número descifrado, cambiar "incorrecto" a "ok" (o cambiar alguna información del usuario) y enviarlo nuevamente a la aplicación.
¿Cómo puedo crear un formulario de inicio de sesión más seguro para una aplicación de escritorio?