Eu tenho um histórico distante (2 anos atrás) em hackers, os pacotes mais difíceis de quebrar (e o que eu sugiro que você use) está usando um método de criptografia de chave simétrica que Jonathan Dickinson descreveu em resumo. Você deve usar o TCP + TLS como ele também mencionou. No entanto, ele disse uma sequência contrária.
Já deparei com momentos em que um sistema de "prova de invasão" de programadores era facilmente falsificado porque eles tinham um sistema de contagem suficientemente estranho para que eu pudesse decifrá-lo sem conhecimento de programação e lógica algébrica do primeiro ano. Desde que você escolha um método seqüencial adequado, seu destino deverá receber os dados exatamente como esperado, o que também significa que você deve usar o TCP para as operações mais seguras.
De volta aos trilhos para "nas minhas experiências", um sistema que encontrei funciona de maneira fantástica. Um método seqüencial com base no tempo enviado e no tempo esperado. Como os pacotes sempre devem ser recebidos na ordem correta, a falsificação de um pacote era quase impossível, pois eu nunca conseguia prever quando um pacote seria enviado e quando era esperado (entre um pacote e outro) sem primeiro invadir o programa cliente.
A resposta curta
Resumindo: cada estrutura de pacote também teria um registro de data e hora como quando foi enviado para o milissegundo. Isso é muito simples e é realmente fácil verificar se um tempo é antes / depois de outro tempo. A razão pela qual faz sentido tão bem é porque o servidor ainda pode receber pacotes em ordem com falsificação, sem tempo para autenticação.
Obviamente, esse não é o único método seqüencial ou o melhor de qualquer método. É apenas um que eu achei que funciona muito bem. Combinado com TCP + TLS, você não deve ter muitos problemas.