Estoy escribiendo un juego multijugador. Tengo un servidor central que lo procesa todo. Para el intercambio de datos utilizo el protocolo HTTPS. Debido a que este es un juego, no puedo usar sistemas computacionalmente costosos como RSA para la transferencia de datos.
Para iniciar sesión,
- El cliente usa sha512 para generar hash hexadecimal a partir de la contraseña y
seed
aleatorio. - El cliente envía una solicitud de "inicio de sesión" con nombre de usuario, hash y
seed
al servidor. - El servidor comprueba si el usuario no ha intentado demasiadas solicitudes de inicio de sesión y comprueba si el hash de la contraseña coincide con el hash que se hizo a partir de la contraseña en la base de datos. Si lo hace, envía un
access_key
y una respuesta de que el inicio de sesión fue exitoso
Para enviar solicitudes que requieren inicio de sesión,
- El cliente envía un hash generado desde
access_key
yseed
junto con los datos de la solicitud. - El servidor comprueba si la IP no ha cambiado y si el hash de
access_key
yseed
es correcto. Si es así, el nuevoaccess_key
se genera a partir del anterior, los datos de solicitud se procesan y el servidor devuelve el nuevoaccess_key
junto con la respuesta de la solicitud.
En cualquier momento, si la IP del cliente cambia o se envía access_key
no válido, la sesión se termina automáticamente.
¿Qué tan seguro es este enfoque? ¿Qué puedo hacer para mejorarlo?