
Mapas que llegan solos: paquetes de contenido firmados
Un mapa editado no vale nada si hay que avisar a cada jugador de que copie un archivo. Así que ahora el servidor puede enviar por su cuenta los mapas modificados al cliente nuevo.
El flujo
- Alguien edita un mapa en la suite de editores y guarda. El cambio queda en un overlay.
- En la máquina del servidor, el dueño lo publica con un solo comando, que compara los archivos con la instalación original, se queda solo con los que difieren, los empaqueta y firma el paquete.
- El servidor en marcha ofrece el paquete a todo cliente que se conecta, y también a los que ya están conectados.
- El cliente lo descarga, verifica la firma, lo descomprime en una caché privada y lo coloca encima de la instalación. La próxima vez que entres al mapa, verás el nuevo.
Si un paquete llega mientras inicias sesión, la primera escena lo espera (hasta un minuto, con un cuadro pequeño de "Actualizando el contenido del juego…") para que nadie entre a un mundo a medio actualizar. Los jugadores que ya están dentro reciben una línea en el chat y ven el cambio la próxima vez que entren al mapa. Un paquete que el cliente ya tiene se reutiliza desde su caché, así que un segundo inicio de sesión no cuesta nada.
Lo que importa: la confianza
Un servidor que puede enviar archivos a tu computadora es un servidor en el que tienes que poder confiar, así que el diseño parte de la suposición contraria: damos por hecho que el servidor puede ser vulnerado.
- Los paquetes se firman con una clave que nunca está en el servidor en marcha. El dueño firma sin conexión, en su propia máquina. Un extraño que se hiciera con el servidor podría ofrecer paquetes, pero no podría firmar ninguno, y el cliente lo rechazaría.
- El cliente lleva la clave pública correspondiente. Todo lo que no esté firmado, que se haya alterado tras la firma o que haya firmado otra persona se descarta; no se "usa con una advertencia".
- Solo archivos de mapa. Un paquete puede contener archivos de mapa, ajustes de terreno y agua y listas de estilos de textura, y nada más: ni programas, ni scripts, ni bibliotecas. Las rutas se comprueban para que un paquete no pueda escribir fuera de su propia carpeta de caché, y al descomprimir se rechaza cualquier cosa que intente seguir un enlace hacia otro lugar.
- Capas, en orden. Tu overlay local tiene prioridad sobre un paquete enviado, y un paquete tiene prioridad sobre la instalación. Así, los cambios locales de un modder nunca se reemplazan en silencio, y quitar un paquete devuelve el mapa original.
- Es reversible. Retira un paquete y los clientes conectados lo borran en su próxima conexión. Nunca queda nada atrás.
Probamos cada uno de esos puntos a propósito: el formato del paquete, sus reglas de tamaño y de rutas, las firmas falsificadas, las descargas manipuladas, una caché alterada y la compuerta de carga. La autoprueba de esta función ejecuta 308 comprobaciones, y todas pasan. También corrimos el ciclo completo de verdad contra un servidor local: publicar, ver a un cliente descargar, verificar y montar el paquete, reconectar y reutilizar la caché, quitar el paquete y ver al cliente borrarlo.
En qué punto estamos
Todavía no se sirve nada. Este post trata de la tubería. Es la razón por la que el mapa que edites el martes puede ser el mapa que los jugadores pisen el miércoles, y es por lo que estuvimos dispuestos a dedicar una semana a las firmas: una forma de enviar contenido a los jugadores es de esas cosas que se hacen con cuidado una sola vez.







