CoinJoin, la technique pour mélanger des bitcoins
Acheter Bitcoin (BTC)
Publicité eToro
Comme chacun le sait, Bitcoin utilise une chaîne de blocs publique sur laquelle sont écrites toutes les transactions. Les utilisateurs n'ont pas besoin de s'identifier pour utiliser le protocole, mais ils doivent posséder une ou plusieurs adresses publiques visibles sur la chaîne. Ainsi, Bitcoin n'est pas réellement anonyme, mais plutôt pseudonyme : si jamais un lien est fait entre l'identité d'un utilisateur et son adresse Bitcoin, alors ses fonds deviennent traçables. C'est tout le problème posé par les normes d'identification (KYC/AML) des plateformes d'échange : si vous achetez des cryptomonnaies par ce moyen, alors vous n'êtes plus du tout protégés par le pseudonymat de la chaîne et il sera facile de remonter jusqu'à vous.
La confidentialité des échanges en bitcoins n'est donc pas parfaite. Cela nuit évidemment à la vie privée des utilisateurs, mais aussi à la fongibilité de la monnaie : certains bitcoins peuvent être « salis » pour des raisons diverses (drogue, armes, terrorisme, « blanchiment d'argent »), ce qui fait qu'un bitcoin peut théoriquement avoir moins de valeur qu'un autre. Ce n'est d'ailleurs pas pour rien que l'État français a lancé un appel d'offre pour développer un outil permettant de pister les transactions cryptomonétaires.
Heureusement, des méthodes existent pour résoudre ce problème majeur. Une première amélioration est d'éviter de réutiliser des adresses en générant une nouvelle adresse à chaque paiement, ce que font tous les portefeuilles modernes. Cependant, ce n'est pas assez et l'analyse de la chaîne permet bien souvent de remonter l'activité d'un utilisateur pour tracer ses fonds. C'est dans ce contexte qu'intervient CoinJoin.
CoinJoin est une méthode d'anonymisation basée sur le mélange de pièces de cryptomonnaie. En d'autres termes, les utilisateurs font transiter leurs fonds au sein d'une même transaction dite « de mélange », ce qui permet de brouiller les pistes sur qui possède quoi. La technique a été présentée pour la première fois en 2013 par Gregory Maxwell, un développeur de Bitcoin Core.
CoinJoin est une méthode qui dérive directement de la façon dont sont construites les transactions dans Bitcoin. Elle peut donc être appliquée aussi bien pour Bitcoin (BTC) que pour ses dérivés : Bitcoin Cash, Litecoin, Dash, etc. Nous verrons ici comment fonctionnent les transactions dans Bitcoin, puis comment CoinJoin tire parti de ce fonctionnement. Enfin, nous nous concentrerons sur la façon dont la méthode est exploitée pour améliorer la confidentialité de ces protocoles.
Les transactions dans Bitcoin
Dans Bitcoin, les transactions ne sont pas les paiements simples auxquels on pourrait naïvement penser. Au lieu de se limiter aux transferts simples entre deux adresses, les transactions ont la possibilité d'être beaucoup plus complexes. Elles peuvent notamment être constituées d'une ou plusieurs entrées (inputs) et d'une ou plusieurs sorties (outputs) : les entrées symbolisent la provenance des fonds et les sorties leur destination.
Sauf dans le cas de la transaction de récompense (« coinbase »), chaque entrée consomme la sortie d’une autre transaction. Ainsi, les sorties transactionnelles non dépensées représentent de facto les bitcoins en circulations : une pièce de bitcoin n’existe que parce qu’elle est le résultat d’une transaction et qu’elle n’est incluse dans aucune autre transaction. Ces sorties non dépensées sont couramment appelées UTXO, pour Unspent Transaction Outputs.
Le système de transactions de Bitcoin est donc entièrement basé sur ces UTXO : lors d'une transaction, ces UTXO vont être consommés et de nouveaux UTXO vont être créés. Si on prend le cas de la première réelle transaction, qui a eu lieu le 12 janvier 2009 entre Satoshi Nakamoto et Hal Finney, on peut observer ce comportement. Satoshi avait en effet reçu 50 bitcoins d'une transaction précédente (en minant) et voulait envoyer 10 bitcoins à Hal. Pour cela, il a dû consommer cet UTXO de 50 bitcoins et créer deux UTXO : l'un de 10 bitcoins pour Hal, et l'autre de 40 bitcoins pour lui-même (on dit qu'il s'est « rendu la monnaie »). La transaction comportait donc une entrée et deux sorties.
Notez que s'il avait voulu envoyer 60 bitcoins à Hal, il aurait sans doute consommé deux UTXO différents et la transaction aurait alors eu deux entrées.
Ainsi, une transaction est généralement bien plus complexe qu'un paiement à une entrée et une sortie. C'est d'ailleurs généralement le cas des transactions effectuées par les plateformes d'échange : ces dernières regroupent les paiements de retrait au sein d'une seule transaction pour éviter de payer trop de frais de réseau.
Comment fonctionne CoinJoin ?
CoinJoin utilise ce fonctionnement des transactions de Bitcoin pour permettre d'augmenter la confidentialité des utilisateurs.
Contrairement aux méthodes utilisées par Monero et par Zcash qui permettent de rendre les opérations totalement opaques, CoinJoin n'impacte aucunement la transparence des transactions. De plus, CoinJoin fonctionne en surcouche et ne nécessite aucun changement dans les règles de consensus : la méthode est applicable depuis le 3 janvier 2009.
L'idée de base derrière CoinJoin est de combiner des transactions pour mélanger les pièces de cryptomonnaies : les sorties de la transaction résultante sont alors indiscernables les uns des autres. CoinJoin permet ainsi de brouiller les pistes en obscurcissant la chaîne de transactions de l'utilisateur. Toutes les transactions demeurent totalement claires : il y a toujours des adresses et des montants, mais les fonds des utilisateurs sont mélangés de telle sorte qu'une personne extérieure ne peut pas savoir à quelle adresse se trouvent leurs fonds respectifs.
Prenons par exemple deux utilisateurs qui souhaitent mélanger leurs fonds : l'un possède 50 bitcoins et l'autre 30 bitcoins (sous la forme de deux UTXO différents). Pour obscurcir leurs pièces, ils combinent deux transactions ayant chacune une sortie de 30 bitcoins : ils signent pour cela une transaction à trois entrées et trois sorties.
Il est clair que la sortie transactionnelle de 20 bitcoins appartient au premier utilisateur. En revanche, rien ne distingue les deux sorties de 30 bitcoins : pour quelqu'un qui ne fait qu'observer la chaîne, il est très difficile de savoir à qui appartient quelle sortie. Cette méthode a le mérite d'obscurcir considérablement les choses, notamment quand l'opération est répétée à de multiples reprises avec de nombreux utilisateurs.
Cependant, CoinJoin n'est pas infaillible ; loin de là. L'un des deux utilisateurs pourrait se trahir par la suite, ce qui permettrait de retrouver la trace de l'autre utilisateur : c'est pour cela que les mélanges de pièces ont lieu très souvent avec plus de participants. Par exemple, le 5 juin 2019, un mélange impliquant potentiellement plus de 100 personnes a été réalisé par l'intermédiaire du Wasabi Wallet.
De plus, CoinJoin est une technique extérieure au protocole Bitcoin : elle requiert que les participants soient mis en relation en dehors du réseau pair-à-pair pour qu'ils puissent contruire une transaction, ce qui peut dévoiler certaines informations sur eux et impacter leur anonymat.
Les différentes façons d'utiliser CoinJoin
CoinJoin est une manière élégante de rendre des fonds relativement anonymes en brouillant les pistes qu'une personne mal intentionnée pourrait être tentée de suivre. Cependant, comme on vient de le dire, il s'agit d'une technique abstraite qui est extérieure au protocole et il faut donc recourir à des méthodes de mise en relation afin que les utilisateurs puissent concrètement mélanger leurs fonds.
Les mélangeurs
La première solution est de faire confiance à quelqu'un pour procéder au mélange lui-même : les utilisateurs envoient leurs fonds à ce tiers qui se charge de procéder au mélange et de leur rendre les fonds mélangés. Il existe ainsi des services spécialisés dans le mélange de jetons appelés mélangeurs, mixeurs ou tumblers (« gobelets ») : vous pouvez lire notre article sur ces services pour plus d'informations. Veillez à utilisez Tor pour augmenter votre anonymat : la plupart de ces services possèdent une adresse .onion
en plus de leur adresse sur le clearnet.
Toutefois, le fait de faire confiance à un tiers implique certains inconvénients. D'abord, le tiers en question peut être malveillant et surveiller vos échanges pour revendre les informations ou en tirer profit plus directement. Ensuite, ce tiers peut tout simplement partir avec vos fonds : il y a en effet beaucoup d'arnaques dans le milieu, bien qu'on ne sache pas vraiment ce qu'il en est. Enfin, en raison du caractère potentiellement illégal de ces mélanges (« blanchiment » d'argent), ces services sont visés par les agences gouvernementales, à l'instar de BestMixer.io qui a été saisi en mai 2019 par les services fiscaux néerlandais et Europol.
Le Wasabi Wallet pour Bitcoin (BTC)
Des solutions plus décentralisées ont donc vu le jour. On citera ici le Wasabi Wallet (anciennement connu sous le nom de Hidden Wallet), qui est un portefeuille Bitcoin axé sur la confidentialité permettant notamment de mélanger des pièces. Le portefeuille utilise la solution Zerolink et ne fonctionne que sur réseau Tor. Zerolink permet aux participants d'être mis en relation anonymement via un coordinateur sans qu'aucune information fuite, ni qu'aucun bitcoin ne soit volé. Le solution se sert notamment des signatures aveugles de David Chaum pour le pré-mélange : c'est pour cela que certains parlent de Chaumian CoinJoin quand ils évoquent le Wasabi Wallet.
Attention cependant : le montant minimal de participation est très élevé (0.1 BTC à l'heure actuelle, soit environ 700 €) et les frais de mélange sont également plutôt élevés.
CashShuffle pour Bitcoin Cash (BCH)
Du côté de Bitcoin Cash, c'est une solution de surcouche assez similaire, bien que moins évoluée, qui a été développée : il s'agit de CashShuffle. CashShuffle est une évolution du protocole CoinShuffle, qui ajoute une couche de chiffrement à CoinJoin pour éviter que les participants ne connaissent les adresses de sortie des autres participants. CashShuffle met en place des serveurs spécialisés pour mettre en relation les participants. Là encore pas de risque de vol. Toutefois, un serveur pourrait vraisemblablement tirer certaines informations du mélange. CashShuffle a subi un audit de sécurité en mars 2019, avant d'être mis en application ces derniers mois.
CashShuffle a pour l'instant été implémenté dans le portefeuille Electron Cash et devrait être inclus prochainement dans le portefeuille de Bitcoin.com. Contrairement au cas du Wasabi Wallet, CashShuffle est automatique : dès que l'utilisateur reçoit des jetons non anonymisés, son portefeuille enclenche directement la procédure de mélange. Cela a pour effet de démultiplier l'anonymat apporté par CoinJoin : si une grande partie des utilisateurs mélangent leurs fonds, le traçage par analyse de la chaîne devient quasiment impossible.
PrivateSend pour Dash (DASH)
Un dernier exemple de l'utilisation de CoinJoin est celle qu'en fait Dash, qui base sa confidentialité dessus. Cette fonctionnalité, intégrée dans le protocole, est appelée PrivateSend. Un utilisateur envoie des dashs qui sont mélangés avec d'autres dashs, grâce à l'intervention des nœuds maîtres (masternodes). Ici ce seront plusieurs tours qui ont lieu : tous les fonds sont divisés en montants prédéfinis et passent par une multitude de transactions de mélange. Un exemple de transaction utilisée dans PrivateSend peut être trouvé ici.
Ainsi, la confidentialité offerte par Dash est correcte en permettant d'obscurcir les échanges, mais est néanmoins loin d'égaler celle de Monero, ou encore celle de Zcash.
Conclusion
CoinJoin se révèle donc très utile pour améliorer la confidentialité de Bitcoin, chose qui lui fait aujourd'hui cruellement défaut, surtout lorsqu'on sait que les États cherchent de plus en plus à savoir ce qui se passe sur la chaîne de blocs. Avec des innovations comme Taproot, ou les « transactions confidentielles » (Confidential Transactions), CoinJoin pourrait permettre à Bitcoin d'approcher un peu plus l'idéal d'anonymat cher aux crypto-anarchistes.
La technique sert aussi beaucoup aux autres cryptomonnaies. Bitcoin Cash l'utilise pleinement par le biais de sa solution de surcouche CashShuffle, et Dash l'utilise au sein de son protocole pour permettre les envois privés via PrivateSend.