Para la respuesta práctica , lo mejor para la seguridad es evitar reinventar la rueda . Diseñar un protocolo seguro para el transporte de datos es una tarea desalentadora (es fácil hacer que funcione, es difícil saber si es "seguro"). Ya hay algunos protocolos conocidos que se han estudiado mucho y están disponibles como una biblioteca lista para usar. La principal de ellas es SSL / TLS . Es posible que desee utilizar DTLS si desea proteger paquetes individuales (DTLS es para UDP lo que TLS es para TCP).
Para la respuesta científica : cuando se trata de cifrar algunos datos y que protegen su integridad, la mejor idea es utilizar un modo de cifrado que realice ambas acciones (GCM y EAX son las sugerencias habituales). Si tiene que confiar en algoritmos separados para el cifrado y para la verificación de integridad (lo que aparentemente llama una "suma de comprobación", pero es mejor conocido como MAC ), entonces la forma correcta es cifrar primero, luego calcular el MAC en los datos cifrados (sin olvidar la IV y algunas otras cosas, como se explica en este question ).
Pero permítanme señalar que esto es solo una parte del protocolo. Al realizar el cifrado y un MAC en una "carga útil", se supone que el remitente y el receptor ya comparten un valor secreto común de alta entropía que pueden usar como clave para el cifrado y el MAC. También necesitas algunas funciones más para evitar los ataques de repetición y, más generalmente, derrotar a los atacantes que intentan eliminar paquetes, duplicar Paquetes, y reordenar paquetes. Autenticación (unidireccional o mutua) es otra área difícil.