La double dépense, ou double spending en anglais, est un terme qui est couramment utilisé dans le domaine de la blockchain et des cryptomonnaies. La double dépense est une attaque potentielle qui peut être réalisée par un acteur malveillant dans un système de paiement décentralisé.
Dans un système de paiement classique, comme les transactions par carte de crédit, les paiements sont vérifiés un par un par les banques et les fournisseurs de paiement. Si une transaction est réalisée deux fois de suite avec la même carte, les entités centralisées en charge du contrôle des flux de transaction sur le réseau de paiement détecteront la fraude et pourront annuler la deuxième transaction. L’intégrité du réseau de paiement dépend donc de la supervision par un tiers centralisé. En revanche, dans un système de paiement décentralisé, les transactions sont validées par les mineurs ou les validateurs, qui sont des nœuds du réseau chargés de vérifier les transactions et de les ajouter à la blockchain.
Dans un système de paiement décentralisé, la double dépense peut survenir dans plusieurs cas de figure, impliquant généralement que le destinataire accepte une transaction non confirmée, c’est-à-dire fraîchement située dans le dernier bloc de la chaîne, avant l’ajout du ou des blocs suivants.
Pour se prémunir au mieux contre une tentative de double dépense, les systèmes de paiement décentralisés utilisent des mécanismes de consensus tels que la preuve de travail (proof of work) ou la preuve d’enjeu (proof of stake). Ceux-ci permettent de s’assurer que les transactions sont validées et ajoutées à la blockchain de manière sûre et fiable.
Une telle attaque peut se produire lorsqu’un utilisateur envoie des fonds à deux destinataires différents, en même temps ou presque, et en utilisant la même monnaie numérique, dans le but de dépenser le même montant deux fois. Cette situation est rendue possible lorsque le réseau n’est pas en mesure de valider rapidement une transaction, notamment en cas de congestion, et qu’un attaquant en profite pour effectuer une seconde transaction avec les mêmes fonds, généralement avec des frais plus élevés.
La double dépense peut également survenir après confirmation d’une transaction. Respecter un délai de confirmation suffisant avant d’accepter une transaction permet néanmoins de réduire drastiquement les risques d’être victime d’une attaque par double dépense. Chaque ajout d’un nouveau bloc après le bloc contenant la transaction augmente mécaniquement la difficulté pour un attaquant de fabriquer une seconde chaîne qui dépassera la longueur de la chaîne canonique, et permettra ainsi de dépenser les mêmes coins d’une autre manière.