Per la pratica risposta, la cosa migliore per la sicurezza è per evitare di reinventare la ruota . Progettare un protocollo sicuro per il trasporto dei dati è un compito scoraggiante (è facile farlo funzionare, è difficile sapere se è "sicuro"). Esistono già alcuni protocolli noti che sono stati studiati molto e sono disponibili come libreria pronta all'uso. Il più importante è SSL / TLS . Potresti voler usare DTLS se vuoi proteggere singoli pacchetti (DTLS è per UDP ciò che TLS è per TCP).
Per la scientific risposta: quando si tratta di crittografare alcuni dati e che proteggono la sua integrità, l'idea migliore è usare una modalità di crittografia che faccia entrambi (GCM e EAX sono i soliti suggerimenti). Se devi fare affidamento su algoritmi separati per la crittografia e per il controllo dell'integrità (quello che apparentemente si chiama "checksum" ma meglio conosciuto come MAC ), quindi il modo corretto è quello di crittografare prima, quindi calcolare il MAC sui dati crittografati (senza dimenticare la IV e alcune altre cose, come spiegato in questo question ).
Ma lasciatemi sottolineare che questa è solo una parte del protocollo. La crittografia e un MAC su un "payload" presuppongono che mittente e destinatario già condividano un valore segreto ad alta entropia comune che possono utilizzare come chiave per la crittografia e il MAC. Hai anche bisogno di altre funzionalità per evitare attacchi di replay e, più in generale, sconfiggere gli attaccanti che proverebbero a eliminare pacchetti, duplicare pacchetti e riordinare i pacchetti. Autenticazione (a senso unico o reciproco) è un'altra area difficile.