Explication de la « double dépense »
Accueil
Articles
Explication de la « double dépense »

Explication de la « double dépense »

Intermédiaire
Publié le Feb 17, 2020Mis à jour le Jan 31, 2023
7m

Qu'est-ce que la double dépense ?

La double dépense est un problème potentiel dans un système d'argent numérique où les mêmes fonds sont envoyés à deux destinataires en même temps. En l'absence de contre-mesures adéquates, un protocole qui ne résout pas le problème est fondamentalement voué à l'échec. Les utilisateurs n'ont aucun moyen de vérifier que les fonds qu'ils ont reçus n'ont pas déjà été dépensés ailleurs.

Lorsqu'il s'agit d'argent numérique, il est primordial de s'assurer que des unités spécifiques ne peuvent pas être dupliquées. L'ensemble du système serait compromis si Alice pouvait recevoir 10 unités, les copier-coller 10 fois et se retrouver en possession de 100 unités. De même, un tel système ne peut pas fonctionner si elle peut envoyer les mêmes 10 unités à Bob et Carol simultanément. Pour que l'argent numérique fonctionne, il doit y avoir des mécanismes en place pour empêcher ce comportement.


Comment éviter la double dépense ?

L'approche centralisée

L'approche centralisée est considérablement plus facile à mettre en œuvre que les alternatives décentralisées. Cela implique généralement un superviseur qui gère le système et contrôle l'émission et la distribution des unités. Un bon exemple d'une solution centralisée au problème des dépenses doubles est celui de l'eCash de David Chaum.

Pour émettre aux utilisateurs un actif numérique imitant de l'argent (utilisable pour effectuer des échanges anonymes et pair à pair), une banque peut utiliser des signatures aveugles, comme détaillé par le cryptographe David Chaum dans son article 1982 intitulé Blind Signatures for Untraceable Payments.

Dans un tel contexte, si un utilisateur (appelons-le Dan) souhaite recevoir 100 dollars en argent numérique, il doit d'abord en informer la banque. S'il possède le solde de son compte, il générera alors un numéro aléatoire (ou plusieurs, pour les petites dénominations). Supposons qu'il produise cinq numéros, à qui l'on attribue une valeur de 20 $ chacun. Pour empêcher la banque de repérer des unités spécifiques, Dan brouille les numéros aléatoires en ajoutant un facteur d'aveuglement à chacun d'entre eux.

Il remet ensuite ces données à la banque, qui débite son compte de 100 dollars et signe des messages certifiant que chacune des cinq pièces est échangeable contre 20 dollars. Dan peut maintenant dépenser les fonds émis par la banque. Il se rend au restaurant d'Erin et achète un repas qui lui coûte 40 $.

Dan peut supprimer le facteur d'aveuglement pour exposer le numéro aléatoire associé à chaque « billet » d'argent numérique, qui sert d'identifiant unique pour chaque unité (un peu comme un numéro de série). Il en révèle deux à Erin, qui doit maintenant les échanger immédiatement auprès de la banque pour empêcher Dan de les dépenser chez un autre commerçant. La banque vérifiera que les signatures sont valides, et si tout semble correct, elle créditera le compte d'Erin de 40 dollars.

Les billets utilisés sont maintenant essentiellement inutiles, et d'autres doivent être émis si Erin souhaite dépenser son nouveau solde de la même manière.

Le système eCash de Chaumian pourrait être utile pour les transferts privés. Mais il échoue sur le plan de la résilience, car la banque est un point central de défaillance. Un billet émis ne vaut rien en soi, car sa valeur provient uniquement de la volonté de la banque de l'échanger contre des dollars. Les clients sont à la merci de la banque, et doivent compter sur son bon vouloir pour que l'argent fonctionne. C'est précisément le problème auquel les cryptomonnaies veulent remédier.


L'approche décentralisée

Il est plus difficile de s'assurer que les fonds ne peuvent pas être dépensés deux fois dans un écosystème sans superviseur. Des participants de même pouvoir doivent se coordonner autour d'un ensemble de règles qui empêchent la fraude et incitent tous les utilisateurs à agir honnêtement.

La plus grande innovation présentée dans le livre blanc du Bitcoin était une solution au problème de la double dépense. Même s'il n'est pas mentionné comme tel, Satoshi a proposé la structure de données désormais connue sous le nom de blockchain.
Une blockchain n'est en fait qu'une base de données dotée de certaines propriétés uniques. Les participants du réseau (appelés nœuds) exécutent des logiciels spécialisés, ce qui leur permet de synchroniser leur copie de la base de données avec leurs pairs. Le résultat est que l'ensemble du réseau peut vérifier l'historique des transactions et remonter jusqu'au bloc de genèse. Comme la blockchain est accessible au public, il est facile de détecter et d'empêcher les activités frauduleuses, comme les transactions qui tentent d'effectuer une 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 valide qu'après l'ajout de son bloc à la chaîne. Sinon, ils risquent de perdre les fonds, car l'expéditeur pourrait dépenser les mêmes unités ailleurs.
Une fois la transaction confirmée, les unités ne peuvent pas ê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 pour cette raison que beaucoup recommandent d'attendre plusieurs confirmations avant de considérer un paiement comme valide. Chaque bloc ultérieur augmente considérablement l'effort nécessaire pour modifier ou réécrire la chaîne (ce qui peut se produire lors d'une attaque de 51 %).

Reprenons le scénario du restaurant. Dan retourne au restaurant, et cette fois, un autocollant Bitcoin acceptés est présent sur la fenêtre. Il a apprécié le repas qu'il a pris la dernière fois, alors il le commande à nouveau. Ça lui coûte 0,005 BTC.

Erin lui présente une adresse publique à laquelle il doit envoyer les fonds. Dan diffuse la transaction, qui est essentiellement un message signé indiquant que le BTC de 0,005 qui était en possession de Dan est maintenant à Erin. Sans trop de détails, toute personne présentée avec la transaction signée de Dan peut vérifier qu'il était bien en possession des fonds, et donc qu'il avait l'autorité de les envoyer.

Comme mentionné, cependant, la transaction n'est valide que si elle est incluse dans un bloc qui est confirmé. Accepter des transactions non confirmées, c'est un peu comme accepter les 40 dollars en eCash de l'exemple précédent, sans les encaisser immédiatement auprès de la banque ce qui permet à l'expéditeur de les dépenser ailleurs en attendant. Il est donc recommandé qu'Erin attende au moins 6 confirmations de bloc (environ une heure) avant d'accepter le paiement de Dan.


La double dépense et le Bitcoin

Le Bitcoin est soigneusement conçu pour empêcher les attaques par double dépense, du moins lorsque le protocole est utilisé comme prévu. Autrement dit, si des personnes attendent que les transactions soient confirmées dans un bloc, il n'y a pas de moyen simple pour l'expéditeur de les annuler. Pour ce faire, ils devraient « inverser » la blockchain, ce qui nécessite une quantité irréaliste de puissance de hachage.

Toutefois, une poignée d'attaques à double dépense visent des parties qui acceptent des transactions non confirmées. Pour les achats de faible valeur, par exemple, un commerçant peut ne pas vouloir attendre que les transactions soient incluses dans un bloc. Un fast-food très fréquenté ne peut probablement pas se permettre d'attendre que le réseau traite chaque achat. Ainsi, si une entreprise permet des paiements « instantanés », elle s'ouvre à des double dépenses. Quelqu'un peut commander un hamburger, le payer, puis envoyer immédiatement les mêmes fonds à sa propre adresse. Avec des frais plus élevés, cette nouvelle transaction risque d'être confirmée en premier, et donc d'invalider la précédente.

Il existe trois méthodes populaires pour effectuer une double dépense :

  • Les attaques 51 % : lorsqu'une seule entité ou organisation parvient à contrôler plus de 50 % du taux de hachage, ce qui lui permet d'exclure ou de modifier l'ordre des transactions. Une telle attaque est très improbable sur le Bitcoin, mais s'est produite sur d'autres réseaux.
  • Attaques de course : deux transactions en conflit sont diffusées en succession, en utilisant les mêmes fonds, mais une seule transaction est confirmée. L'objectif de l'attaquant est d'invalider le paiement en validant uniquement la transaction qui lui est bénéfique (par exemple, en envoyant les mêmes fonds à une adresse qu'il contrôle). Les attaques de course obligent le destinataire à accepter une transaction non confirmée comme paiement.
  • Attaques Finney : un attaquant prémine une transaction dans un bloc sans la diffuser immédiatement sur le réseau. Au lieu de cela, il dépense les mêmes pièces dans une autre transaction et diffuse uniquement son bloc précédemment miné, ce qui peut invalider le paiement. Les attaques Finney requièrent une séquence spécifique d'événements et sont également soumises à l'acceptation par le destinataire des transactions non confirmées.

Comme nous pouvons le voir, un marchand qui attend les confirmations de bloc réduira considérablement les risques de devenir victime de double dépenses.


Pour conclure

La double dépense permet à un utilisateur de manipuler un système d'argent électronique à ses propres fins, en utilisant les mêmes fonds plus d'une fois. Traditionnellement, un manque de solutions adéquates au problème a empêché de nouveaux progrès.

Heureusement, cependant, l'utilisation de signatures aveugles offre 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 de monnaie décentralisée qui, à son tour, a inspiré des milliers d'autres projets de cryptomonnaie.
Partager des publications
S’inscrire pour un compte.
Mettez vos connaissances en pratique en ouvrant un compte Binance dès aujourd’hui.