
Qu’est-ce que la double dépense ?
La double dépense est un problème potentiel dans un système de paiement numérique où les mêmes fonds sont envoyés simultanément à deux destinataires. Sans mesures correctives adéquates, un protocole qui ne résout pas ce problème est fondamentalement compromis : les utilisateurs n’ont aucun moyen de vérifier que les fonds reçus n’ont pas déjà été dépensés ailleurs.
En matière de monnaie numérique, il est primordial d’empêcher la duplication des unités. Le système tout entier serait compromis si Alice pouvait recevoir 10 unités, les copier-coller 10 fois et se retrouver ainsi en possession de 100 unités. De même, un tel stratagème serait impossible si elle pouvait envoyer simultanément les mêmes 10 unités à Bob et Carol. Par conséquent, pour que la monnaie numérique fonctionne, des mécanismes de sécurité doivent impérativement être mis en place afin de prévenir ce type de comportement.

Comment prévenir la double dépense ?
L’approche centralisée
L’approche centralisée est nettement plus simple à mettre en œuvre que les alternatives décentralisées. Elle repose généralement sur un superviseur qui gère le système et contrôle l’émission et la distribution des unités. L’eCash de David Chaum est un bon exemple de solution centralisée au problème de la double dépense.
Pour fournir aux utilisateurs un actif numérique imitant l’argent liquide (permettant des échanges anonymes et de pair à pair), une banque peut utiliser des signatures aveugles – comme l’a détaillé le cryptographe David Chaum dans son article de 1982 intitulé Blind Signatures for Untraceable Payments.
Dans ce contexte, si un utilisateur (appelons-le Bob) souhaite recevoir 100 $ en espèces numériques, il doit d’abord en informer sa banque. S’il dispose des fonds nécessaires sur son compte, il générera alors un nombre aléatoire (ou plusieurs, pour les petites coupures). Supposons qu’il génère cinq nombres, chacun correspondant à une valeur de 20 $. Afin d’empêcher la banque de suivre les transactions, Dan masque les nombres aléatoires en ajoutant un facteur d’anonymisation à chacun d’eux.
Il transmet ensuite ces données à la banque, qui débite son compte de 100 $ et signe des documents certifiant que chacune des cinq informations est échangeable contre 20 $. Dan peut désormais dépenser les fonds remis par la banque. Il se rend au restaurant d’Alice et s’offre un repas à 40 $.
Bob peut lever l’anonymat pour révéler le numéro aléatoire associé à chaque « billet » de monnaie numérique, qui sert d’identifiant unique (comme un numéro de série). Il en montre deux à Alice, qui doit les échanger immédiatement à la banque pour empêcher Bob de les dépenser chez un autre commerçant. La banque vérifiera la validité des signatures et, si tout est en ordre, elle créditera le compte d’Alice de 40 $.
Les billets utilisés sont désormais définitivement détruits, et il faudra en émettre de nouveaux si Alice souhaite dépenser son nouveau solde de la même manière.
Le système de monnaie électronique Chaumian pourrait s’avérer utile pour les transferts privés. Cependant, sa résilience est compromise car la banque constitue un point de défaillance central. Un billet émis n’a aucune valeur intrinsèque, celle-ci dépendant uniquement de la volonté de la banque de l’échanger contre des dollars. Les clients sont à la merci de la banque et doivent s’en remettre à sa bonne volonté pour que la monnaie fonctionne. C’est précisément ce problème que la cryptomonnaie vise à résoudre.
L’approche décentralisée
Garantir l’impossibilité de dépenser des fonds deux fois dans un écosystème sans supervision est plus complexe. Des participants aux pouvoirs égaux doivent se coordonner autour d’un ensemble de règles visant à prévenir la fraude et à inciter tous les utilisateurs à l’honnêteté.
La principale innovation présentée dans le livre blanc du Bitcoin était une solution au problème de la double dépense. Bien que cela n’ait pas été explicitement mentionné, Satoshi a proposé la structure de données aujourd’hui largement connue sous le nom de blockchain.
Une blockchain est en réalité une base de données dotée de propriétés uniques. Les participants du réseau (appelés nœuds) exécutent un logiciel spécialisé qui leur permet de synchroniser leur copie de la base de données avec celle de leurs pairs. Ainsi, l’ensemble du réseau peut consulter l’historique des transactions depuis le bloc Genesis. La transparence de la blockchain facilite la détection et la prévention des activités frauduleuses, comme les tentatives de double dépense.
Lorsqu’un utilisateur diffuse une transaction, celle-ci n’est pas immédiatement ajoutée à la blockchain ; elle doit d’abord être incluse dans un bloc par le biais du minage.
Par conséquent, le destinataire ne doit considérer la transaction comme valide qu’une fois son bloc ajouté à la chaîne. Autrement, il risque de perdre les fonds, car l’expéditeur pourrait dépenser ces mêmes cryptomonnaies ailleurs.
Une fois la transaction confirmée, les cryptomonnaies ne peuvent être dépensées deux fois, car la propriété est attribuée à un nouvel utilisateur – et l’ensemble du réseau peut le vérifier. C’est pourquoi il est souvent recommandé d’attendre plusieurs confirmations avant de valider un paiement. Chaque bloc supplémentaire augmente considérablement l’effort nécessaire pour modifier ou réécrire la chaîne (ce qui peut se produire lors d’une attaque à 51 %).
Reprenons l’exemple du restaurant. Bob y retourne et remarque cette fois un autocollant « Bitcoin accepté ici » sur la vitrine. Ayant apprécié son repas précédent, il le commande à nouveau. Cela lui coûte 0,005 BTC.
Alice lui communique une adresse publique à laquelle il doit envoyer les fonds. Bob diffuse la transaction, qui consiste essentiellement en un message signé attestant que les 0,005 BTC en sa possession sont désormais chez Alice. Sans entrer dans les détails, quiconque reçoit la transaction signée de Bob peut vérifier qu’il était bien en possession des cryptomonnaies et, par conséquent, qu’il était autorisé à les envoyer.
Comme indiqué précédemment, la transaction n’est valide que si elle fait partie d’un bloc confirmé. Accepter des transactions non confirmées revient à accepter les 40 $ en eCash de l’exemple précédent sans les encaisser immédiatement à la banque : cela permet à l’expéditeur de les dépenser ailleurs. Il est donc recommandé à Alice d’attendre au moins six confirmations de bloc (environ une heure) avant d’accepter le paiement de Bob.
Double dépense dans Bitcoin
Bitcoin est conçu avec soin pour empêcher les attaques de double dépense, du moins lorsque le protocole est utilisé comme prévu. Autrement dit, si les utilisateurs attendent la confirmation des transactions dans un bloc, il est très difficile pour l’expéditeur de les annuler. Pour ce faire, il faudrait « inverser » la blockchain, ce qui requiert une puissance de hachage irréaliste.
Cependant, certaines attaques par double dépense ciblent les établissements acceptant les transactions non confirmées. Pour les achats de faible valeur, par exemple, un commerçant peut ne pas souhaiter attendre que les transactions soient incluses dans un bloc. Un restaurant de restauration rapide très fréquenté ne peut probablement pas se permettre d’attendre que le réseau traite chaque achat. Ainsi, si une entreprise active les paiements « instantanés », elle s’expose à des attaques par double dépense. Un client pourrait commander un hamburger, le payer, puis envoyer immédiatement la même somme à son propre compte. Avec des frais plus élevés, cette nouvelle transaction a de fortes chances d’être confirmée en premier, invalidant ainsi la précédente.
Il existe trois méthodes courantes pour effectuer une double dépense
Attaques à 51 % : Lorsqu’une entité ou une organisation parvient à contrôler plus de 50 % de la puissance de hachage (hashrate), elle peut exclure ou modifier l’ordre des transactions. Ce type d’attaque est très improbable sur Bitcoin, mais s’est déjà produit sur d’autres réseaux.
Attaques par concurrence : Deux transactions conflictuelles sont diffusées successivement avec les mêmes fonds, mais une seule est confirmée. L’attaquant cherche à invalider le paiement en ne validant que la transaction qui lui est avantageuse (par exemple, en envoyant les mêmes fonds à une adresse qu’il contrôle). Les attaques par concurrence nécessitent que le destinataire accepte une transaction non confirmée.
Attaques Finney : Un attaquant pré-mine une transaction dans un bloc sans la diffuser immédiatement sur le réseau. Il dépense ensuite les mêmes cryptomonnaies dans une autre transaction, puis diffuse son bloc pré-miné, ce qui peut invalider le paiement. Les attaques Finney nécessitent une séquence d’événements spécifique et dépendent également de l’acceptation par le destinataire de transactions non confirmées.
Comme nous pouvons le constater, un commerçant qui attend les confirmations de blocage réduira considérablement les risques d’être victime de doubles dépenses.
Conclusion
La double dépense permet à un utilisateur de manipuler un système de monnaie électronique à des fins lucratives, en utilisant les mêmes fonds à plusieurs reprises. Traditionnellement, l’absence de solutions adéquates à ce problème a freiné les progrès dans ce domaine.
Heureusement, l’utilisation de signatures aveugles a offert une solution intéressante pour les systèmes financiers centralisés. Plus tard, la création des mécanismes de preuve de travail et de la technologie blockchain a donné naissance au Bitcoin, une forme puissante de monnaie décentralisée qui, à son tour, a inspiré des milliers d’autres projets de cryptomonnaies.