Protegendo uma conexão UDP

Para um projeto pessoal de jogo MMO, estou implementando um protocolo baseado em UDP confiável em homebrew em java. Dada a minha configuração atual, eu acredito que seria relativamente simples para um bisbilhoteiro sequestrar uma sessão, então, para evitar isso, estou aproveitando a oportunidade para aprender um pouco de criptologia. É muito interessante.

Eu posso criar com sucesso uma chave secreta compartilhada entre o cliente e o servidor usando umTroca de chaves Diffie-Hellman (um conceito muito inteligente), mas agora eu preciso usar isso para garantir a autenticidade dos pacotes. Até agora, meus testes preliminares mostraram que o par de diferentes cifras que eu tentei inchavam um pouco a quantidade de dados, mas eu gostaria de manter as coisas tão pequenas e rápidas quanto possível.

Dado que eu estou apenas tentando autenticar o pacote e não necessariamente esconder toda a carga, eu tenho a idéia de que eu poderia colocar uma ID de sessão de 8 bytes gerada a partir da chave secreta no cabeçalho do pacote, criptografar todo o pacote e alterá-lo até 8 bytes. Eu pego o pacote não criptografado e coloco o hash de 8 bytes no lugar do ID da sessão e depois o envio.

Isso seria seguro? Parece um pouco deselegante criptografar todo o pacote apenas para enviá-lo sem criptografia - existe uma maneira melhor / mais rápida de alcançar meu objetivo? Por favor, note que eu gostaria de fazer isso sozinho desde a sua boa experiência, então eu não estou tão interessado em bibliotecas de terceiros ou outras opções de protocolo.

questionAnswers(1)

yourAnswerToTheQuestion