Attualmente sto lavorando con un algoritmo simmetrico che richiede un nonce per la crittografia e logicamente anche per la decrittografia.
Tuttavia, sono un po 'confuso su come andrei a sincronizzare il nonce su entrambi i client.
Supponiamo che il mio nonce inizi a 0 e sia codificato su entrambi i lati.
Vorrei quindi crittografare i miei dati e aumentare il nonce per evitare perdite attraverso il riutilizzo. Il valore crittografato verrà inviato al mio cliente, che decrittografa i dati e aumenta anche il nonce. Ora entrambe le parti hanno un nonce di 1, pronto per il successivo ciclo di crittografia / decrittografia.
Funziona bene, a patto che non si verifichino eventi inaspettati.
Diciamo che il server ora sta crittografando con un nonce di 5. Aumenta poi il nonce a 6, ma in qualche modo la connessione fallisce e il valore non viene mai trasmesso. L'altro partecipante non riceve un aggiornamento e il suo nonce rimarrà al 5.
La prossima volta che crittografiamo qualcosa, il crittografo ora usa il nonce 6, lo aumenta e invia il valore. Il lato del decryptor tuttavia è ancora a un nonce di 5 e quindi la decifrazione fallirà.
Come faccio a uscire da questo ciclo? Come posso sincronizzare in modo sicuro i nonces, così posso evitare un errore completo se la connessione fallirà almeno una volta? È sicuro trasmettere semplicemente il nonce corrente con ogni pacchetto di dati? Ci sono altri approcci?