Intercambio de claves a través de la red con más de dos pares

1

Mi equipo y yo estamos desarrollando un videojuego multijugador con Client / Server-Topology . Esto asegura la coincidencia de los clientes que tienen la intención de hacer trampa debido a la autoridad del servidor , pero aún así permite que el servidor modifique los paquetes salientes y entrantes, así como los datos de usuario de los jugadores.

Elegimos usar AES como método de encriptación, pero tuvimos el problema de informar a todos los pares sobre la clave utilizada para asegurar los paquetes de red con este método de encriptación.

Leí el algoritmo de intercambio de claves Diffie-Hellman-Merkle que funcionó perfectamente entre dos pares (Alice y Bob, como se les llama en los ejemplos). El problema es que nuestro juego permite coincidencias con un número variable de jugadores, que van de 2 a 16.

La condición parece ser que cada cliente necesita generar el mismo número b (exponente de g ) para compartir el resultado de su ecuación con el servidor, de modo que ambos tengan el mismo resultado que es s .

No tengo idea de cómo generar una clave secreta en cada par, si la hora a la que los clientes se conectan y el número de conexiones durante la coincidencia son variables.

    
pregunta Doctor Niklas 22.06.2016 - 13:40
fuente

2 respuestas

3

No debe implementar su propio esquema de cifrado para esto, ni compartir claves simétricas con múltiples partes.

Para proteger los datos sobre el tránsito entre cada cliente y el servidor, debe usar TLS para proteger esas conexiones. TLS se encargará del acuerdo de clave simétrica y el descifrado de cifrado de cada cliente de la manera correcta, evitando muchas cosas que no está considerando en la protección de los datos en tránsito. Pero no será una clave compartida entre todos los clientes, sino una clave para cada cliente, y también una clave que cambia en las nuevas sesiones / conexiones. Básicamente, logrará un acuerdo de clave AES de estilo DH con cada usuario (también puede elegir otros algoritmos), pero se encargará de evitar muchos ataques que sean posibles en esquemas de este tipo que simplemente no detectará si simplemente usa DH simple para acordar una clave simétrica, incluso si ejecuta un acuerdo DH con cada usuario.

Si también desea proteger los datos en reposo, es decir, cuando se almacenan, no hay ganancia en compartir una clave. Cada uno debe generar su propia clave secreta.

    
respondido por el CristianTM 22.06.2016 - 14:31
fuente
-1

Esto debería ser simple.

Primero necesitas una biblioteca de cifrado como openssl .

Si hay una fase de registro ,

  • puede hacer que los clientes generen un par de claves privadas / públicas , (DH o RSA, usando openssl )
  • luego anuncie la parte pública en el servidor, también denominado certificado de cliente .

Y eso es todo. En cada nueva conexión cliente-servidor , se generará e intercambiará una clave simétrica (AES), utilizando los certificados.

Realmente no es necesario cambiar estas claves con frecuencia.
Pero si lo hace, jugar un juego parece ser una gran oportunidad para un alto nivel de entropía , que ayudará a los cálculos de aleatoriedad , utilizados en la generación de claves.

    
respondido por el fouss 22.06.2016 - 14:27
fuente

Lea otras preguntas en las etiquetas