La mia applicazione utilizza UDP. La comunicazione client-server tipica consiste in un pacchetto (< 500 byte di carico utile) richieste dal client e un pacchetto risponde a tali richieste dal server. In caso di perdita di pacchetti, il client deve inviare nuovamente la sua richiesta.
Per proteggere la "connessione" viene utilizzato un PSK AES-128 (precedentemente trasferito tramite TLS / SSL). Ora ogni pacchetto verrà crittografato utilizzando AES-128 in modalità CTR. Il pacchetto conterrà il nonce / contatore, il messaggio da consegnare e un hash del messaggio nonce plus:
MyPayload = aes128CTR(nonce + plaintext + hash(nonce + plaintext))
In questo caso, una funzione di hash non crittografica (ad es. Murmur3) può essere utilizzata come MAC?
Inoltre devo inviare il nonce completo (16 byte) o sarà sufficiente un contatore più piccolo (ad es. 4 byte) per essere sicuro che il pacchetto sia stato effettivamente inviato dal mio client invece di essere un possibile pacchetto con spoofing IP?