Nota: Esta respuesta puede estar basada en un malentendido de la pregunta; vea los comentarios a continuación.
Respuesta genérica corta: use firmas digitales .
Específicamente, el servidor maestro debe tener una clave privada para un esquema de firma digital adecuado (RSA, DSA, ECDSA, etc.) y de alguna manera debe transmitir de manera segura su clave pública a todos los clientes. Luego, el servidor puede firmar cualquier dato que envíe a los clientes con la clave privada (o posiblemente usarlo para negociar un secreto compartido utilizable para cifrar y / o autenticar simétricamente las comunicaciones entre él y ese cliente en particular) y el cliente puede usar la clave pública para Verifique que la firma haya sido generada por el servidor.
Por supuesto, su próximo problema es distribuir la clave pública para que un servidor no autorizado pueda falsificar eso y sustituir su propia clave pública. Puede que no sea tan difícil si puede hacerlo por adelantado (por ejemplo, distribuir la clave junto con el ejecutable del juego), pero se vuelve complicado si tiene que hacerlo más tarde, por ejemplo, porque la identidad del servidor maestro no se conoce en avanzar. Una solución estándar es distribuir alguna otra clave pública (cuya clave privada correspondiente solo es conocida por usted) por adelantado a todos los clientes, y luego firmar el mensaje que contiene la clave pública del servidor maestro con esa otra clave antes de transmitirla.
De hecho, incluso podría extender aún más estas cadenas de firmas, por ejemplo, tener una clave privada maestra súper secreta, que se mantiene en una caja fuerte en algún lugar y cuya clave pública sea conocida por todos los clientes, y otra clave privada de "uso diario" que se usa para firmar realmente las claves del servidor, y cuya clave pública está firmada con la clave maestra súper secreta antes de encerrarse en la caja fuerte. Esto no es tan útil por sí mismo, pero se vuelve potencialmente muy útil si también incluye algún mecanismo para revocar las claves comprometidas, de modo que, por ejemplo, si se filtra su clave de uso diario, puede revocarla y generar otra.
Lo que describo anteriormente es un tipo rudimentario de infraestructura de clave pública . En realidad, implementar uno de forma segura puede ser bastante complicado, pero afortunadamente ya se ha hecho antes. De hecho, cada vez que se conecta a un sitio web (como Wikipedia ) usando HTTPS , esto es casi exactamente lo que hace su navegador: recibe un certificado de clave pública del servidor, verifica que el certificado coincida con el nombre del servidor en la URL, no aparece como revocado y ha sido firmado por una autoridad de certificación conocida y confiable , y luego lo usa para negociar una clave de cifrado simétrica temporalconocido solo para sí mismo y para el propietario de la clave privada correspondiente al certificado. Esta clave simétrica se utiliza para cifrar y autenticar todos los datos enviados entre el cliente y el servidor.
En particular, debería echar un vistazo a las bibliotecas SSL / TLS existentes (que generalmente vienen con una implementación PKI X.509 ), o posiblemente en SPKI . Estos todavía son algo complicados, pero probablemente más fáciles (y más seguros) que intentar rodar los tuyos.