# Nonce (cryptographie)

En cryptographie, un nonce est un nombre arbitraire destiné à être utilisé une seule fois. Il s'agit souvent d'un nombre aléatoire ou pseudo-aléatoire émis dans un protocole d'authentification pour garantir que les anciennes communications ne peuvent pas être réutilisées dans des attaques par rejeu.
Le mot nonce peut également désigner un vecteur d'initialisation. Les nonces peuvent aussi être utilisés dans des fonctions de hachage cryptographiques, en particulier en relation avec des preuves de travail.

## Définition

Un nonce est un nombre arbitraire utilisé une seule fois dans une communication cryptographique. C'est souvent un nombre aléatoire ou pseudo-aléatoire. Beaucoup de nonces incluent un horodatage (timestamp) pour assurer leur unicité et empêcher leur réutilisation. L'horodatage implique évidemment la synchronisation des horloges entre les utilisateurs, ce qui peut parfois poser des problèmes.
Dans un protocole de vérification de mot de passe avec nonce, le nonce est envoyé du serveur vers le client. l'ajout d'un nonce de client (envoyé du client vers le serveur ; parfois appelé cnonce) améliore la sécurité, comme dans l'authentification d'accès par digest HTTP. Pour s'assurer qu'un nonce est utilisé une seule fois, il doit contenir une composante de temps (comme un horodatage suffisamment précis) ou il doit contenir suffisamment de bits aléatoires pour que la probabilité de génération de deux nonces identiques soit très faible.
Certains auteurs incluent le caractère aléatoire (ou l'imprévisibilité) dans la définition du nonce.

## Origine du mot

Le mot nonce est un mot emprunté à l'anglais qui, contrairement à l'idée reçue, n'est pas issu de la contraction de « number used once » (« nombre utilisé une seule fois ») mais de la déformation d'une expression du XIIIe siècle : þe nanes signifiant "pour un but particulier"$^,$.

## Utilisation
### Authentification

Les protocoles d'authentification peuvent utiliser des nonces pour garantir que les anciennes communications ne peuvent pas être réutilisées dans des attaques par rejeu. Par exemple, les nonces sont utilisés dans l'authentification d'accès par digest HTTP pour calculer une empreinte MD5 du mot de passe. Les nonces sont différents à chaque demande d'authentification, rendant ainsi les attaques par rejeu pratiquement impossibles.
Un scénario de commande de produits sur Internet fournit un exemple de l'utilité des nonces pour contrer les attaques par rejeu. Un attaquant pourrait prendre les informations chiffrées d'une commande et - sans avoir besoin de les déchiffrer - pourrait les envoyer plusieurs fois à un fournisseur, commandant ainsi des produits encore et encore sous le même nom et les mêmes informations d'achat. Le nonce est utilisé pour donner une unicité à une commande de sorte que si le marchand reçoit plusieurs commandes avec le même nonce, il les rejettera comme des commandes invalides.

### Vecteurs d'initialisation

Les vecteurs d'initialisation sont parfois appelés nonces, car ils sont typiquement aléatoires ou pseudo-aléatoires.

### Hachage

Dans des preuves de travail, des processus peuvent demander à un utilisateur de fournir un nonce qui, combiné à une entrée à une fonction de hachage cryptographique, fournit un résultat ayant certaines caractéristiques. Dans un tel contexte, il devient beaucoup plus difficile de créer un résultat de hachage acceptable que de le vérifier, déplaçant ainsi le fardeau du travail sur un côté d'une transaction ou d'un système.
Par exemple, une preuve du travail utilisant une fonction de hachage cryptographique a été considérée comme un moyen de lutter contre le courrier indésirable en forçant l'expéditeur d'un message électronique à trouver un nonce (incluant un horodatage pour empêcher le précalcul de nonces utilisables ultérieurement) qui combiné au message donnait un résultat commençant par un certain nombre de zéros.