Nonce est l’abréviation de « Number used once ». En cryptographie et dans les protocoles de communication, ce terme désigne un nombre aléatoire ou pseudo-aléatoire généré pour garantir l’unicité des échanges. Les attributs essentiels du nonce sont les suivants :
• Unicité : Comme l’indique son nom, ce nombre n’est utilisé qu’une seule fois dans une communication chiffrée spécifique et n’est jamais réemployé.
• Imprévisibilité : Dans les contextes cryptographiques, le nonce doit être aléatoire afin que les attaquants ne puissent pas anticiper sa valeur.
Dans le mécanisme Proof of Work (PoW) de Bitcoin, le nonce est la seule variable que les mineurs peuvent ajuster manuellement lors du calcul du hash. Les mineurs ne peuvent pas modifier les données de transaction ; ils doivent tester en continu différentes valeurs de nonce et recalculer le hash à chaque tentative. Lorsqu’un mineur trouve un nonce produisant un hash de bloc conforme à la difficulté requise, ce nonce constitue la preuve de travail.
Ce procédé s’apparente à l’achat de billets de loterie : les données du bloc représentent votre nom et le nonce est le nombre aléatoire que vous sélectionnez. Vous changez sans cesse le nombre (nonce) jusqu’à gagner (atteindre la difficulté du hash).
Dans Ethereum, le nonce remplit principalement deux fonctions, dont la plus courante est le nonce de compte :
La fonction principale du nonce est de renforcer la sécurité et l’intégrité du système :
• Prévention des attaques par rejeu : Il s’agit de la fonction la plus fondamentale du nonce. Des attaquants peuvent intercepter des communications valides et tenter de les renvoyer pour obtenir un accès non autorisé. Le nonce garantit que, même interceptée, la requête sera rejetée par le serveur, car le nombre aura déjà expiré.
On peut comparer cela au numéro de série d’un chèque : si quelqu’un encaisse un chèque n°001, la banque annule ce numéro. Même si quelqu’un copie le chèque, il ne pourra pas être encaissé une seconde fois.
• Garantie de fraîcheur des données : En intégrant un nonce, le destinataire peut vérifier que les données ont été générées en temps réel, et non rejouées à partir d’informations obsolètes. Cela empêche les attaquants d’utiliser des enregistrements de sessions précédentes pour usurper une identité.
• Imprévisibilité renforcée : Le nonce introduit une variable dans le processus de chiffrement, rendant l’analyse des schémas et la compromission du système bien plus difficiles pour les attaquants.
Selon la méthode de génération et les besoins d’application, les nonces se classent principalement en deux catégories :
• Nonce aléatoire : Généré à l’aide d’un générateur de nombres pseudo-aléatoires cryptographiquement sécurisé (CSPRNG), il offre une forte entropie et une grande imprévisibilité. Il est couramment utilisé dans les signatures numériques et les schémas de chiffrement avancés.
• Nonce séquentiel : Produit par incrémentation d’un compteur. Moins imprévisible, il garantit cependant une unicité absolue et convient aux mécanismes d’authentification.
L’utilisation du nonce s’étend à de nombreux domaines, allant de la navigation web quotidienne aux transactions en monnaie numérique, en passant par divers protocoles de sécurité et technologies émergentes. Sa logique centrale repose toujours sur l’unicité et l’imprévisibilité.
• Gestion d’identité et authentification : Dans l’authentification HTTP Digest, l’authentification unique (SSO) et l’authentification à deux facteurs (2FA), les nonces servent à valider l’identité de l’utilisateur et l’authenticité des requêtes.
• Protocoles cryptographiques et signatures numériques :
◦ Lors des échanges SSL/TLS, les clients et serveurs échangent des nonces pour vérifier les identités.
◦ Dans des algorithmes comme AES-GCM, le nonce joue le rôle de vecteur d’initialisation (IV), garantissant que des textes en clair identiques ne produisent pas des textes chiffrés identiques.
• Blockchain et registre distribué
Il s’agit aujourd’hui de l’application la plus répandue du nonce, qui détermine « qui enregistre les transactions » et « dans quel ordre ».
Par exemple, dans le minage Proof of Work (PoW) : Dans Bitcoin, le nonce est un champ de 32 bits. Les mineurs ajustent continuellement ce nombre jusqu’à ce que le hash de l’en-tête du bloc soit inférieur à la difficulté cible.
Dans la gestion des comptes Ethereum : Chaque compte Ethereum conserve un nonce incrémental. Cela permet non seulement de prévenir les attaques par rejeu (envoi de la même transaction deux fois), mais aussi aux utilisateurs de « remplacer » ou « annuler » une transaction bloquée en soumettant une nouvelle transaction avec le même nonce et des frais plus élevés.
Bien que les valeurs de nonce et de hash apparaissent fréquemment ensemble dans les contextes blockchain, elles sont fondamentalement différentes :
Une valeur de hash est une « empreinte numérique » des données, déterminée par l’entrée et de taille fixe. Le nonce, en revanche, est une variable temporaire utilisée pour modifier les résultats du hash.
D’un point de vue temporel, la valeur de hash sert d’identifiant fixe pour un ensemble de données, tandis que le nonce est généralement abandonné après une seule utilisation.
Si la génération ou la gestion du nonce est défaillante, les systèmes sont exposés à des risques majeurs. Les attaques courantes incluent :
◦ Attaque par réutilisation de nonce : Les attaquants exploitent la réutilisation des nonces pour contourner les protections cryptographiques. Par exemple, en juillet 2021, le protocole cross-chain Anyswap Multichain Router V3 a signé deux transactions avec la même valeur (un composant de la signature), permettant aux attaquants de déduire la clé privée et entraînant une perte de près de 8 millions de dollars.
◦ Attaque par prédiction de nonce : Si le schéma de génération du nonce est prévisible, les attaquants peuvent manipuler les processus de minage ou d’authentification.
◦ Attaque par force brute : Les attaquants testent de façon exhaustive les valeurs de nonce pour trouver un hash répondant aux critères. Par exemple, en 2018, Bitcoin Gold (BTG) a subi plusieurs attaques à 51 %. Les attaquants ont loué une puissance de calcul massive pour forcer les nonces et ont finalement dérobé 388 200 BTG, causant une perte d’environ 18 millions de dollars.

Source de la capture d’écran : Bitcoin Gold Explorer
Pour prévenir ces attaques, les développeurs et les projets doivent utiliser des algorithmes de génération hautement aléatoires (tels que CSPRNG), appliquer des contrôles stricts d’unicité et mettre à jour régulièrement les bibliothèques cryptographiques.
Élément fondamental de la technologie cryptographique, la propriété « usage unique » du nonce assure une sécurité robuste pour les communications internet complexes et les registres distribués. Maîtriser et mettre en œuvre correctement les mécanismes de nonce est indispensable pour garantir la sécurité, la transparence et l’intégrité du monde numérique.
Pour aller plus loin :





