COINJOIN
Le coinjoin est une technique permettant de casser le traçage des bitcoins. Il repose sur une transaction collaborative à la structure spécifique de même nom : la transaction coinjoin. Les transactions coinjoin permettent d’améliorer la protection de la vie privée des utilisateurs de Bitcoin en rendant l’analyse des transactions plus difficile pour les observateurs extérieurs. Cette structure permet de mixer plusieurs pièces en une seule transaction, rendant difficile la détermination des liens entre les adresses d’entrée et de sortie.
Le fonctionnement général du coinjoin est le suivant : différents utilisateurs souhaitant mixer déposent un montant en input d’une transaction. Ces inputs ressortiront en différents outputs de même montant. À la sortie de la transaction, il est donc impossible de déterminer quel output appartient à quel utilisateur. Il n’y a techniquement aucun lien entre les entrées et les sorties de la transaction coinjoin. Le lien entre chaque utilisateur et chaque UTXO est cassé, de la même manière que l’historique de chaque pièce.

Pour permettre le coinjoin sans qu’aucun utilisateur ne perde la main sur ses fonds à aucun moment, la transaction est d’abord construite par un coordinateur puis transmise à chaque utilisateur. Chacun d’eux signe alors la transaction de son côté en vérifiant qu’elle lui convient, puis toutes les signatures sont ajoutées à la transaction. Si un utilisateur ou le coordinateur tente de voler les fonds des autres en modifiant les outputs de la transaction coinjoin, alors les signatures seront invalides et la transaction sera refusée par les nœuds. Lorsque l’enregistrement de l’output des participants se fait à l’aide de signatures aveuglées de Chaum pour éviter le lien avec l’input, on parle de « Chaumian coinjoin ».
Ce mécanisme augmente la confidentialité des transactions sans nécessiter de modifications du protocole Bitcoin. Des implémentations spécifiques de coinjoin, telles que Whirlpool, JoinMarket ou Wabisabi, proposent des solutions pour faciliter le processus de coordination entre les participants et renforcer l’efficacité de la transaction coinjoin. Voici une transaction coinjoin par exemple :
323df21f0b0756f98336437aa3d2fb87e02b59f1946b714a7b09df04d429dec2
Il est difficile de déterminer avec certitude qui a introduit en premier l’idée du coinjoin sur Bitcoin, et qui a eu l’idée d’utiliser les signatures aveugles de David Chaum dans ce contexte. On pense souvent que c’est Gregory Maxwell qui en a parlé en premier dans un message sur BitcoinTalk en 2013 :
« En utilisant les signatures aveugles de Chaum : Les utilisateurs se connectent et fournissent des inputs (et des adresses de change) ainsi qu’une version cryptographiquement aveuglée de l’adresse vers laquelle ils souhaitent envoyer leurs pièces privées ; le serveur signe les jetons et les leur renvoie. Les utilisateurs se reconnectent anonymement, démasquent leurs adresses de sortie et les renvoient au serveur. Le serveur peut voir que toutes les sorties ont été signées par lui et que, par conséquent, toutes les sorties proviennent de participants valides. Plus tard, les personnes se reconnectent et signent. »
Maxwell, G. (2013, 22 août). CoinJoin: Bitcoin privacy for the real world. BitcoinTalk Forum. https://bitcointalk.org/index.php?topic=279249.0
Toutefois, il existe d’autres mentions antérieures, à la fois pour les signatures de Chaum dans le cadre du mixage, mais également pour les coinjoins. En juin 2011, Duncan Townsend présente sur BitcoinTalk un mélangeur qui utilise les signatures de Chaum d’une manière assez similaire aux coinjoins chaumiens modernes. Dans le même thread, on peut retrouver un message de hashcoin en réponse à Duncan Townsend pour améliorer son mélangeur. Ce message présente justement ce qui ressemble le plus aux coinjoins. On retrouve également une mention d’un système similaire dans un message d’Alex Mizrahi en 2012, alors qu’il conseillait les créateurs de Tenebrix. Le terme en lui-même de « coinjoin » n’aurait pas été inventé par Greg Maxwell, mais il viendrait d’une idée de Peter Todd.
Le terme de « coinjoin » ne dispose pas de traduction française. Certains bitcoiners utilisent également les termes de « mix », de « mixing » ou encore de « mixage » pour évoquer la transaction coinjoin. Le mixage est plutôt le processus utilisé au cœur du coinjoin. Aussi, il ne faut pas confondre le mixage par coinjoins et le mixage par un acteur central qui prend possession des bitcoins durant le processus. Cela n’a rien à voir avec le coinjoin où l’utilisateur ne perd à aucun moment la main sur ses bitcoins durant le processus.