He estado pensando en una forma de autenticar a los usuarios para elegir a los usuarios que utilizan versiones agrietadas de mi juego de las personas que realmente lo han comprado. Se me ocurrió esta idea:
El cliente solicita al servidor de inicio de sesión su bl_hash
, que se actualiza cada 12 horas. (¿Debe ser un marco de tiempo más pequeño? Estoy usando Threefish-512 para actualizar los bloques, la clave sería la salida de un CSPRNG).
El cliente luego cifra el bl_hash
con el hash de su contraseña (el u_hash
), esto se conoce como el l_hash
.
El cliente envía su l_hash
al servidor de juegos junto con su nombre de usuario. Esto es packet_login
.
El servidor de juego envía los datos packet_login
recibidos al servidor de inicio de sesión.
El servidor de inicio de sesión descifra el l_hash
con el u_hash
y responde al servidor si esta es la persona que dice que es o no.
El servidor de juego rechaza o acepta al jugador de acuerdo con lo que se recibe del servidor de inicio de sesión.
Entiendo que esto podría ser susceptible a un ataque de hombre en el medio para el servidor, pero probablemente sería imposible hacerlo ya que los servidores de juegos probablemente estarán dentro de un centro de datos. ¿Hay alguna mejora posible que pueda hacer?
Gracias por su tiempo, ¡y me disculpo profundamente si esto está en el sitio equivocado!