¿Es segura esta autenticación de inicio de sesión?

2

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!

    
pregunta 02.09.2012 - 11:44
fuente

2 respuestas

2

Si lo entiendo correctamente, el paquete de inicio de sesión será exactamente el mismo para el mismo usuario dentro del tiempo de validez de bl_hash . Así que un atacante pasivo puede grabar y reproducir . Para evitar este tipo de ataque, bl_hash debe usarse una sola vez (consulte nonce ).

Al descifrar el paquete de inicio de sesión con el hash de la contraseña del usuario, implica que el hash no tiene sal . Una sal es una cadena aleatoria que es única para cada contraseña y se concatena antes de calcular el hash. Evita que un atacante, que tiene acceso a la base de datos de la cuenta, ataque todas las contraseñas en paralelo con un ataque de diccionario. En lugar de un simple hash, debes usar uno de los algoritmos de hashing de contraseña como sha512crypt, bcrypt o scrypt para almacenar la contraseña.

El cliente no autentica el servidor. Por lo tanto, es posible un hombre en el ataque central .

Recomiendo encarecidamente utilizar SSL. Es un protocolo muy bien probado con bibliotecas para todos los lenguajes de programación comunes. Y no es vulnerable a ninguno de estos problemas.

    
respondido por el Hendrik Brummermann 02.09.2012 - 19:01
fuente
0

Esto no es principalmente una pregunta de criptografía; Es principalmente una cuestión sobre la gestión de riesgos. Ninguna solución proporcionará seguridad férrea. En su lugar, debe identificar los riesgos principales (las formas principales en que los usuarios intentarán defraudarle) y luego establecer controles o mitigaciones que reduzcan el riesgo a un nivel aceptable. Es probable que la mayoría de estos controles sean de naturaleza no criptográfica.

(Por este motivo, creo que obtendría mejores respuestas en el sitio de Seguridad de TI)

Algunas mitigaciones de muestra:

  • Use SSL cuando inicie sesión.

  • Registre la dirección IP del cliente. Compruebe su región geográfica. Marque cualquier cuenta que parezca cambiar de región geográfica de manera sospechosa.

  • Registre los detalles sobre la plataforma del cliente (por ejemplo, sistema operativo, números de versión, dirección MAC de red). Marque cualquier cuenta donde parezcan cambiar de manera sospechosa.

  • Detecta el idioma utilizado en el chat en línea por este usuario (por ejemplo, inglés, ruso, alemán, etc.). Si cambia de manera sospechosa, marque la cuenta para un mayor control por parte de un humano.

  • Implemente defensas contra las "grietas" de su juego binario. Hay mucho escrito sobre este tema; puedes buscar en Internet.

Tendrá que decidir cuáles tienen una compensación adecuada entre costo y beneficio.

    
respondido por el D.W. 02.09.2012 - 20:27
fuente

Lea otras preguntas en las etiquetas