# Double dépense

Dans un système de monnaie numérique, la double dépense (en anglais, double-spending) est un acte frauduleux dans lequel le même jeton numérique est dépensé plus d'une fois. Contrairement à la monnaie physique, un jeton numérique consiste en une chaîne de signatures numériques qui peut être dupliquée ou falsifiée$^,$.
Comme dans le cas de la fausse monnaie, cette double dépense mène à l'inflation en créant une nouvelle quantité de monnaie qui n'existait pas auparavant. Cela dévalue la monnaie par rapport aux autres unités monétaires ou aux biens et diminue la confiance des utilisateurs ainsi que la circulation et la rétention de la monnaie. Les techniques cryptographiques fondamentales pour éviter les doubles dépenses, tout en préservant l'anonymat dans une transaction, sont les signatures aveugles et, en particulier dans les systèmes hors ligne, le secret réparti.
Une attaque à double dépense est un type d'attaque contre une cryptomonnaie qui est survenue contre plusieurs cryptomonnaies, par exemple en raison de l'attaque des 51 %. Bien qu'une telle attaque ne se soit pas produite contre la plupart des plus grandes cryptomonnaies, comme le bitcoin, une telle attaque s'est produite sur un fork du bitcoin, le Bitcoin Gold, alors la 26e cryptomonnaie en importance.

## Prévention

La prévention de la double dépense peut se faire de deux façons : de façon centralisée et de façon décentralisée.

### Façon centralisée

Cette méthode est généralement mise en œuvre en utilisant un tiers de confiance central en ligne qui peut vérifier si un jeton a été déjà dépensé. Ce tiers de confiance est un point de défaillance unique, tant du point de vue de la disponibilité que de la confiance.

### Façon décentralisée

Dans un système décentralisé, le problème des doubles dépenses est beaucoup plus difficile à résoudre. Pour éviter d'avoir besoin d'un tiers de confiance, de nombreux serveurs doivent stocker des copies à jour identiques d'un grand livre de transactions publiques, mais à mesure que les transactions (demandes de dépenses) sont diffusées, elles arrivent à chaque serveur à des heures légèrement différentes. Si deux transactions tentent de dépenser les mêmes jetons en même temps, chaque serveur considérera la première transaction comme valide et l'autre comme invalide. Une fois que les serveurs ne sont pas d'accord, il n'y a aucun moyen de déterminer les vrais soldes, car les observations de chaque serveur sont considérées comme également valables.
La plupart des systèmes décentralisés résolvent ce problème à l'aide d'un algorithme de consensus, une façon de ramener les serveurs en synchronisme. Deux types notables de mécanismes de consensus sont la preuve de travail et la preuve d'enjeu.
Un certain nombre de systèmes distribués de prévention des doubles dépenses ont été proposés$^,$.
La cryptomonnaie bitcoin a implémenté une solution au début 2009. Son protocole cryptographique utilisait un mécanisme consensuel de preuve de travail où les transactions sont regroupées en blocs et chaînées à l'aide d'une liste chaînée avec des pointeurs de hachage (une chaîne de blocs). N'importe quel serveur peut produire un bloc en résolvant un puzzle difficile à calculer (trouver une collision partielle de hachage) appelé minage. Le bloc s'engage sur l'historique complet des transactions bitcoin ainsi que sur les transactions du nouveau bloc. Le mineur est récompensé par des bitcoins pour l'avoir résolu.
Le problème de la double dépense persiste toutefois si deux blocs (avec des transactions de double dépense) sont produits à peu près au même moment. Lorsque cela se produit, il y a deux chaînes dans le réseau, chacune ayant l'un ou l'autre des nouveaux blocs en fin de chaîne. Au fur et à mesure que de nouveaux blocs arrivent, ces blocs s'ajoutent à l'une ou l'autre chaîne, et éventuellement une chaîne s'allongera plus rapidement que l'autre; l'autre chaîne sera alors abandonnée par les mineurs. Étant donné que la chaîne la plus longue est considérée comme valide, les mineurs sont incités à ne construire de nouveaux blocs que sur la chaîne la plus longue, afin que leur nouveau bloc soit conservé dans la chaîne qui survivra (et que leur récompense soit valide).
Les transactions dans ce système ne sont donc jamais techniquement définitives, car une autre chaîne de blocs peut toujours dépasser la chaîne canonique actuelle, mais à mesure que des blocs sont construits au-dessus d'une transaction, il devient de moins en moins probable (c'est-à-dire de plus en plus coûteux) pour une autre chaîne de la dépasser.
Les monnaies décentralisées qui reposent sur une chaîne de blocs sont vulnérables à l'attaque des 51 %, une attaque dans laquelle un acteur malveillant peut réécrire la chaîne s'il contrôle plus que 51 % de la puissance de calcul de l'ensemble de mineurs.