Transmisión de mensajes

0

Actualmente estoy desarrollando un juego que se ejecutará en un cliente, se registrarán para este juego en línea y crearán su cuenta allí, su información se almacenará en una base de datos MySQL. Estoy creando el juego utilizando Lua + Love2D. Al iniciar el juego, se le presentará al usuario un campo de inicio de sesión y contraseña. El proceso será el siguiente:

  1. El usuario envía sus datos
  2. El cliente envía su nombre de usuario al servidor solicitando su contraseña saltada
  3. El cliente recibe sal del servidor y lo agrega a su entrada
  4. El cliente agrega la contraseña adjunta una cierta cantidad de veces usando SHA256
  5. El cliente envía el hash final al servidor
  6. El servidor comprueba que es el hash correcto
  7. El cliente recibe 'verdadero' o 'falso' dependiendo de si es la contraseña correcta

Ahora mi pregunta es, escuché que alguien puede interceptar fácilmente estos datos y obtener su hash de nombre de usuario, salt y contraseña, y luego básicamente enviar esta información al servidor de alguna manera para que se autentiquen en las cuentas de esas personas. ¿Cómo puedo evitar que esto suceda? ¿Puedo usar algo como una clave de autenticación? Si es así, ¿puedes explicar cómo funcionaría?

    
pregunta Bicentric 14.11.2013 - 23:17
fuente

1 respuesta

0

Sí, tiene razón, alguien podría interceptar las comunicaciones e iniciar sesión como usuario; también está haciendo un montón de trabajo adicional innecesario en el cliente. Aquí están los pasos que haría

  1. El usuario envía sus datos
  2. El cliente establece un enlace seguro al servidor (SSL o similar)
  3. El cliente envía su nombre de usuario y contraseña a través del enlace seguro al servidor.
  4. El servidor busca el nombre de usuario en la base de datos y recupera el salt, el recuento de iteraciones y la contraseña con hash
  5. El servidor ejecuta la contraseña enviada, el sal buscado y el recuento de iteraciones buscado a través de una función de derivación de contraseña adecuada como bcrypt o pbkdf2
  6. El servidor compara la salida de la función anterior con la contraseña hash que buscó
    1. (opcional) Si la contraseña era correcta, el servidor verifica si ha aumentado el recuento de iteraciones mínimo para el servidor, si la cuenta del usuario está por debajo del mínimo, el servidor ejecutará la contraseña nuevamente en el nuevo recuento de iteraciones nivelar con una nueva sal y registrar el nuevo hash, el nuevo conteo y la nueva sal en la base de datos.
  7. El cliente recibe "verdadero" o "falso" a través del enlace seguro dependiendo de si es la contraseña correcta
respondido por el Scott Chamberlain 15.11.2013 - 00:41
fuente

Lea otras preguntas en las etiquetas