3.1. Requirements on Nonce Generation (Requisiti sui nonce)
3.1. Requirements on Nonce Generation (Requisiti sulla generazione del nonce)
Per la sicurezza è essenziale che i nonce siano costruiti in modo da rispettare il requisito che ogni valore di nonce sia distinto per ogni invocazione dell'operazione di cifratura autenticata, per ogni valore fissato della chiave. In questa sezione richiamiamo alcune conseguenze di tale requisito in scenari diversi.
Quando più dispositivi eseguono la cifratura con una singola chiave, tali dispositivi devono coordinarsi per garantire che i nonce siano unici. Un modo semplice è usare un formato di nonce che contenga un campo distinto per ciascun dispositivo, come descritto nella sezione 3.2. Non è necessario coordinare i dettagli del formato del nonce tra chi cifra e chi decifra, purché l'intero nonce sia inviato o memorizzato con il testo cifrato e sia quindi disponibile al decifratore. Se il nonce completo non è disponibile al decifratore, il decifratore dovrà sapere come è strutturato il nonce per poterlo ricostruire. Le applicazioni DOVREBBERO concedere ai motori di cifratura una certa libertà nella scelta dei nonce; ad esempio un nonce può contenere sia un contatore sia un campo impostato da chi cifra ma non elaborato dal ricevente. Tale libertà consente a un insieme di dispositivi di cifratura di coordinarsi più facilmente per garantire la distinzione dei nonce.
Se una chiave segreta sarà usata per un lungo periodo, ad esempio attraverso più riavvii, il nonce dovrà essere memorizzato in memoria non volatile. In tali casi è essenziale usare il checkpoint del nonce; vale a dire, il valore corrente del nonce va memorizzato per fornire le informazioni di stato necessarie a riprendere la cifratura in caso di guasto imprevisto. Un modo semplice per ottenere un'alta garanzia che un valore di nonce non venga riusato è attendere che il processo di cifratura riceva conferma dal processo di memorizzazione che il valore di nonce successivo sia già stato salvato. Poiché questo metodo può aggiungere latenza significativa, può essere desiderabile memorizzare un valore di nonce che sia diversi passi avanti nella sequenza. Come esempio, si potrebbe memorizzare il nonce 100, dopodiché i nonce da 1 a 99 potrebbero essere usati per la cifratura. Il valore di nonce 200 potrebbe essere memorizzato contemporaneamente all'uso dei nonce da 1 a 99, e così via.
Molti problemi legati al riuso del nonce possono essere evitati cambiando chiave in situazioni in cui il coordinamento dei nonce è difficile.
Ogni algoritmo AEAD DOVREBBE descrivere quale degrado di sicurezza deriverebbe da un riuso accidentale di un valore di nonce.