Comment fonctionne la double dépense ?
Notions de base
Dans l'univers de la monnaie numérique, la double dépense est une préoccupation majeure. Ce problème survient lorsque les mêmes fonds sont envoyés à deux destinataires simultanément. Sans contre-mesures adéquates, le protocole devient fondamentalement compromis, car les utilisateurs ne peuvent pas vérifier qu'ils ont reçu des fonds uniques qui n'ont pas déjà été dépensés ailleurs.
Pour garantir l'intégrité de la monnaie numérique, il est crucial d'empêcher la duplication d'unités spécifiques. L'ensemble du système s'effondrerait si un utilisateur pouvait copier-coller des unités à plusieurs reprises, ce qui entraînerait un excès de fonds. De même, il serait impossible pour Alice d'envoyer les mêmes 10 unités à la fois à Bob et à Carol. Des mécanismes doivent donc être mis en place pour empêcher ce comportement et faire en sorte que l'argent numérique fonctionne efficacement.
Solutions au problème de la double dépense
Il existe deux approches pour prévenir la double dépense dans les transactions numériques : l'approche centralisée et l'approche décentralisée. L'approche centralisée implique un superviseur unique qui gère le système et contrôle l'émission et la distribution des unités, tandis que l'approche décentralisée exige que des participants de pouvoir équivalent se coordonnent autour d'un ensemble de règles pour prévenir la fraude.
Centralisé
L'eCash de David Chaum est un exemple de solution centralisée au problème de la double dépense. Elle est considérablement plus facile à mettre en œuvre que les alternatives décentralisées puisqu'elle implique un superviseur unique gérant le système et contrôlant l'émission et la distribution des unités. Pour émettre des actifs numériques aux utilisateurs, une banque peut utiliser des signatures aveugles comme détaillé dans l'article de David Chaum de 1982 Blind Signatures for Untraceable Payments.
Supposons qu'un utilisateur nommé Frank souhaite recevoir 100 $ en monnaie numérique. Frank doit en informer la banque et générer un nombre aléatoire, ajoutant un facteur d'aveuglement à chacun afin d'empêcher la banque de suivre des unités spécifiques. Frank soumet ensuite ces données à la banque, qui débite son compte et signe des messages certifiant que chacune des cinq informations est échangeable contre 20 $. Frank peut alors dépenser les fonds émis par la banque.
Pour illustrer, le restaurant d'Emily accepte la monnaie numérique et Frank décide d'y prendre un repas. Il révèle deux nombres aléatoires, qui servent d'identifiants uniques pour chaque unité, afin de payer son repas de 40 $. Emily doit les racheter immédiatement auprès de la banque pour empêcher Frank de les dépenser chez un autre commerçant. La banque vérifie que les signatures sont valides, crédite le compte d'Emily de 40 $ et détruit les billets utilisés. D'autres billets doivent être émis si Emily souhaite dépenser son nouveau solde de la même manière.
Bien que l'eCash chaumien puisse être utile pour les transferts privés, il manque de résilience car la banque constitue un point de défaillance central. La valeur du billet émis dépend uniquement de la volonté de la banque de l'échanger contre des dollars, et les clients doivent se fier à sa bonne volonté pour que l'argent fonctionne. C'est le problème que la cryptomonnaie cherche à résoudre.
Décentralisé
Dans un système décentralisé, empêcher la double dépense est difficile. Tous les participants doivent suivre un ensemble de règles qui préviennent la fraude et encouragent un comportement honnête. Le livre blanc de Bitcoin a introduit une solution à ce problème : la blockchain.
Une blockchain est une base de données aux propriétés uniques qui permettent aux participants du réseau de synchroniser leurs copies de la base avec leurs pairs. En rendant la blockchain consultable publiquement, il devient facile de détecter et de prévenir les activités frauduleuses, comme la double dépense.
Quand un utilisateur diffuse une transaction, celle-ci doit d'abord être incluse dans un bloc via le minage avant d'être ajoutée à la blockchain. Par conséquent, le destinataire ne devrait considérer la transaction comme valide qu'après l'ajout du bloc à la chaîne. Une fois confirmées, les pièces 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.
Dans le cas de l'achat d'un repas au restaurant, si le restaurant accepte le Bitcoin, le client doit envoyer les fonds à l'adresse publique fournie par le restaurant. Toute personne disposant de la transaction signée peut vérifier que le client avait l'autorité pour envoyer les pièces. Cependant, il est recommandé que le restaurant attende au moins six confirmations de bloc (environ une heure) avant d'accepter le paiement pour prévenir la fraude.
Si la blockchain résout le problème de la double dépense dans un système décentralisé, elle n'est pas infaillible. Accepter des transactions non confirmées est risqué et peut permettre à l'expéditeur de dépenser les mêmes pièces ailleurs. Plus une transaction reçoit de confirmations de bloc, plus elle est sécurisée.
Résoudre la double dépense dans Bitcoin
Bitcoin a été conçu pour prévenir les attaques de double dépense, mais cela ne fonctionne que si les transactions sont confirmées dans un bloc. Si les utilisateurs attendent la confirmation, il n'est pas facile pour l'expéditeur d'annuler la transaction. Il faudrait « inverser » la blockchain, ce qui est irréaliste sans une quantité excessive de puissance de hachage.
Cependant, des attaques de double dépense sont possibles lorsque des parties acceptent des transactions non confirmées. Par exemple, un commerçant peut ne pas vouloir attendre que les transactions soient incluses dans un bloc pour les achats de faible valeur. Dans un restaurant fast-food très fréquenté, attendre la confirmation de chaque achat n'est pas pratique. Si une entreprise autorise des paiements « instantanés », elle devient vulnérable à la double dépense. Quelqu'un peut acheter un burger et le payer, puis envoyer immédiatement les mêmes fonds à sa propre adresse. Avec des frais plus élevés, la nouvelle transaction a de bonnes chances d'être confirmée en premier et d'invalider la précédente.
Pour prévenir les attaques de double dépense sur Bitcoin, les utilisateurs attendent généralement que les transactions soient confirmées dans un bloc. Toutefois, pour les achats de faible valeur, attendre la confirmation peut ne pas être pratique. Dans ces cas, les paiements instantanés peuvent exposer un commerçant à des doubles dépenses. Une double dépense survient lorsque quelqu'un commande et paie un article, puis envoie immédiatement les mêmes fonds à sa propre adresse, qui peut être confirmée en premier et invalider la transaction initiale.
Il existe trois méthodes populaires pour effectuer une double dépense.
- La première est une attaque à 51%, qui se produit lorsqu'une entité ou une organisation contrôle plus de 50 % du taux de hachage, lui permettant d'exclure ou de modifier l'ordre des transactions.
- La deuxième méthode est une attaque de course (race attack), où deux transactions conflictuelles sont diffusées successivement, mais une seule est confirmée. L'objectif de l'attaquant est d'invalider le paiement en ne validant que la transaction qui le favorise.
- Enfin, les attaques de Finney impliquent qu'un attaquant pré-miner une transaction dans un bloc sans la diffuser immédiatement, dépense les mêmes pièces dans une autre transaction, puis ne diffuse que le bloc pré-miné, ce qui peut invalider le paiement.
Pour minimiser le risque d'être victime de doubles dépenses, un commerçant doit attendre les confirmations de bloc avant d'accepter un paiement.
Conclusion
La double dépense se produit lorsqu'un utilisateur utilise les mêmes fonds plus d'une fois dans un système de monnaie électronique pour un gain financier. Cela a longtemps été un problème sans solution adéquate, freinant les progrès dans ce domaine.
Cependant, la solution proposée par les signatures aveugles a apporté une réponse intéressante pour les schémas financiers centralisés. Par la suite, l'émergence des mécanismes de Proof of Work et de la technologie blockchain a donné naissance à Bitcoin en tant que forme puissante d'argent décentralisé, qui a, à son tour, inspiré des milliers d'autres projets de cryptomonnaies.