Tengo un fondo lejano (hace 2 años) en piratería, los paquetes más difíciles de descifrar (y lo que sugiero que use) es usar un método de cifrado de clave simétrica que Jonathan Dickinson describió en resumen. Debe usar TCP + TLS como también lo mencionó. Sin embargo, dijo una secuencia contraria.
Me he topado con tiempos en los que un sistema de programadores "a prueba de pirateo" se engañaba fácilmente porque tenían un sistema de conteo lo suficientemente extraño como para poder descifrarlo sin conocimientos de programación y lógica algebraica del primer año. Siempre que elija un método secuencial adecuado, su objetivo debe recibir los datos exactamente como se esperaba, lo que también significa que debe usar TCP para las operaciones más seguras.
De vuelta al camino de "en mis experiencias", un sistema que encontré funciona fantásticamente. Un método secuencial basado en el tiempo enviado y el tiempo esperado. Como los paquetes siempre deben recibirse en el orden correcto, falsificar un paquete era casi imposible, ya que nunca podría predecir cuándo se enviaría un paquete y cuándo se esperaba (entre un paquete y otro) sin hackear primero el programa cliente.
La respuesta corta
En resumen: cada estructura de paquete también tendría una marca de tiempo como cuando se envió al milisegundo. Eso es muy simple y es muy fácil verificar si un momento es anterior / posterior a otro. La razón por la que tiene tanto sentido es porque el servidor aún puede recibir paquetes en orden de suplantación de identidad, sin tiempo de autenticación.
Obviamente, este no es el único método secuencial o incluso el mejor de cualquier método. Es solo uno que he encontrado que funciona muy bien. En combinación con TCP + TLS, no debería tener demasiados problemas.