¿Compartir o no compartir la clave pública de los servidores?

4

Para cifrar las comunicaciones de nuestro cliente (personalizado) a nuestros servidores (personalizados), nuestro esquema actual es un poco como este:

  1. El cliente utiliza la clave pública A empaquetada para cifrar algún material de clave aleatorio.
  2. El servidor de lobby lo descifra con la clave privada, utiliza el material de clave cifrado para configurar un canal cifrado con cifrado simétrico.
  3. El cliente obtiene otra clave pública B1 del servidor de lobby para iniciar sesión en el servidor de juegos 1, a través del canal cifrado. (Game Server 2 tendría una clave pública B2, etc., cada una de estas se genera al reiniciar el servidor)
  4. El cliente se conecta al servidor de juegos y sigue el mismo esquema que el 1-2 para asegurar las comunicaciones.

Dejando de lado cómo se genera y utiliza el material clave, si hubiera algún cambio en la seguridad, lo cambiaremos a:

  1. El cliente utiliza la clave pública A incluida para cifrar el material clave
  2. El servidor de lobby descifra con clave privada, usa el material de clave encriptado para configurar un canal encriptado con encriptación simétrica.
  3. El cliente se conecta al servidor de juegos y sigue el mismo esquema que el 1-2 para asegurar las comunicaciones con LA MISMA CLAVE PÚBLICA "A" que utilizó el lobby (por lo tanto, los servidores del lobby y del juego usan la misma clave privada)

En otras palabras, ¿obtenemos alguna seguridad mejorada al usar solo la clave pública incluida para el inicio de sesión en el lobby?

Una alternativa final sería con un servidor de inicio de sesión separado:

  1. Creamos un servidor de inicio de sesión con el que el cliente se conecta de la manera que lo hace 1-2
  2. El cliente recibe una nueva clave simétrica C y un número de identificación D
  3. El cliente se conecta al servidor de lobby, presenta el número D en texto sin formato.
  4. El lobby y el cliente ahora continúan la comunicación usando la tecla (suponiendo que C está en una base de datos compartida o similar) C
  5. El cliente se conecta al servidor del juego, de nuevo sigue 3-4 para configurar un canal encriptado.

¿Alguno de estos esquemas es significativamente peor o mejor que el otro? No veo ninguna gran diferencia.

    
pregunta Nuoji 31.12.2012 - 14:35
fuente

1 respuesta

7

Una ventaja potencialmente importante de no al usar la misma clave privada tanto para el lobby como para los servidores del juego es que, incluso si una o más de las claves del servidor del juego están comprometidas, la clave del servidor del lobby ( cuya mitad pública está empaquetada con el cliente, lo que dificulta el cambio) sigue siendo segura.

Es de suponer que los servidores de juegos presentan una superficie de ataque significativamente más grande (y que cambia con mayor frecuencia) que un servidor de lobby dedicado, por lo que tiene sentido diseñar su sistema para poder recuperarse de un ataque en los servidores de juegos, al mismo tiempo que El servidor del lobby es lo más difícil de comprometer que es posible.

Su tercera alternativa también comparte esta ventaja, ya que solo el servidor de inicio de sesión necesita conocer la mitad privada de la clave incluida. De hecho, dependiendo de lo que, además de la autenticación, está haciendo el servidor "lobby", puede ser una buena idea separar las funciones de autenticación críticas en un servidor dedicado.

Además, su tercera alternativa garantiza que los clientes no podrán omitir el lobby / servidor de inicio de sesión, incluso si de alguna manera logran adquirir una copia de las claves públicas del servidor del juego (por ejemplo, de otro cliente comprometido). (El cliente aún podría omitir el servidor de inicio de sesión si de alguna manera adquiriera la clave simétrica de otro cliente, pero como esas claves están vinculadas a las ID de clientes, sus servidores deberían poder detectarla). Dependiendo de su caso de uso, esto puede o no serlo. Una ventaja, pero al menos no debería doler.

    
respondido por el Ilmari Karonen 31.12.2012 - 17:30
fuente

Lea otras preguntas en las etiquetas