Nonce
In crittografia il termine nonce indica un numero, generalmente casuale o pseudo-casuale, che ha un utilizzo unico. Nonce deriva infatti dall'espressione inglese for the nonce, che significa appunto "per l'occasione".
Un nonce viene utilizzato spesso nei protocolli di autenticazione per assicurare che i dati scambiati nelle vecchie comunicazioni non possano essere riutilizzati in attacchi di tipo replay attack. Ad esempio, i nonce sono usati nelle somme di controllo dei processi di autenticazione HTTP per calcolare gli hash MD5 delle password, come nell'esempio riportato in figura. Sono utilizzati ad esempio anche nella cosiddetta "catena dei blocchi", ossia la tecnologia che permette di effettuare e confermare le transazioni in bitcoin. I nonce sono differenti ogni volta che il codice di risposta del tentativo di autenticazione 401 è presentato, ed ogni richiesta di un client ha una sequenza numerica unica, così da rendere virtualmente impossibili attacchi di tipo replay-attack e attacchi a dizionario.
Con il termine nonce ci si riferisce spesso anche ai vettori di inizializzazione, sequenze di dati utilizzate in molti algoritmi crittografici per inizializzare il cifrario stesso. Per essere sicuri che il nonce sia veramente utilizzato solo una volta, dovrebbe variare nel tempo (includendo, ad esempio, la data e l'orario nel suo valore) o generato con un numero tale di bit casuali da rendere probabilisticamente insignificante la possibilità che uno stesso valore sia ripetuto più di una volta.