Wat is coin mixing en CoinJoin?

· 5 min read

Bitcoin wordt vaak digitaal geld genoemd, maar die vergelijking is discutabel. Als Alice contant 10 dollar aan Bob betaalt, weet Bob niet waar dat geld vandaan komt. Geeft Bob het briefje later aan Carol, dan kan zij niet afleiden dat het eerst van Alice was.

Bij Bitcoin ligt dat anders, juist door het open karakter ervan. De geschiedenis van een bepaalde coin – oftewel een niet-uitgegeven transactie-output of UTXO – is voor iedereen eenvoudig na te gaan. Het lijkt meer alsof je bij elk gebruik van een bitcoin het bedrag en de naam van de ontvanger op een factuur noteert.

Doordat er geen namen aan publieke adressen hangen, komt de identiteit van gebruikers niet zomaar aan het licht. Toch is Bitcoin allesbehalve volledig privé. Blockchain-analyse wordt steeds geavanceerder en slaagt er steeds beter in adressen aan identiteiten te koppelen. Naast dit soort monitoringtechnieken kan ook een dienst die zich hier specifiek mee bezighoudt de identiteit van cryptogebruikers blootleggen. Om dat te voorkomen zijn er door de jaren heen technieken ontstaan die het verband tussen transacties doorknippen.

Wat is coin mixing?

In algemene zin staat coin mixing voor transacties die tegoeden verhullen door ze om te ruilen voor andere tegoeden. In de cryptowereld verwijst de term echter meestal naar diensten van derde partijen. De aanbieder neemt de coins van de gebruiker in ontvangst (plus een kleine vergoeding) en stuurt andere coins terug die geen enkele link hebben met de ingestuurde. Deze diensten staan ook bekend als tumblers of mixers.

Uiteraard roepen zulke gecentraliseerde diensten vragen op over veiligheid en privacy. Niets garandeert dat een mixer de tegoeden daadwerkelijk terugstuurt, of dat de ontvangen coins geen problematische transactiegeschiedenis met zich meedragen. Nog iets om rekening mee te houden: IP-adressen en Bitcoin-adressen kunnen door een derde partij worden vastgelegd. Uiteindelijk vertrouwt de gebruiker zijn tegoeden aan iemand anders toe, in de hoop coins zonder verleden terug te krijgen.

Een interessantere aanpak zijn CoinJoin-transacties, die een aanzienlijke mate van geloofwaardige ontkenbaarheid creëren. Na een CoinJoin-transactie valt er namelijk geen bewijs meer te leveren dat sluitend een verband legt tussen een gebruiker en diens eerdere transacties. Veel CoinJoin-oplossingen zijn daarmee een decentraler alternatief voor mixers: gebruikers hoeven het beheer over hun tegoeden niet uit handen te geven, ook al kan er een coördinator bij het proces betrokken zijn.

Wat is CoinJoin?

CoinJoin-transacties werden in 2013 voor het eerst geïntroduceerd door Bitcoin-ontwikkelaar Gregory Maxwell. In zijn artikel beschreef hij kort hoe deze transacties zijn opgebouwd en hoe je er een grootschalige privacywinst mee kunt boeken zonder het protocol te wijzigen.

In de kern komt CoinJoin erop neer dat inputs van verschillende gebruikers in één transactie worden samengebracht. Voordat we uitleggen hoe (en waarom) dat werkt, eerst iets over de basisopbouw van een transactie.

Bitcoin-transacties bestaan uit inputs en outputs. Wil een gebruiker een transactie doen, dan gebruikt hij zijn UTXO's als inputs, bepaalt hij de outputs en ondertekent hij de inputs. Belangrijk daarbij: elke input wordt afzonderlijk ondertekend, en gebruikers kunnen meerdere outputs aanmaken – bedragen die naar verschillende adressen gaan.

Bekijken we een transactie met vier inputs (elk 0,2 BTC) en twee outputs (0,7 BTC en 0,09 BTC), dan kunnen we een paar aannames doen. De eerste: er wordt een betaling gedaan – de verzender stuurt een van de outputs naar iemand anders en het wisselgeld naar zichzelf. Omdat er vier inputs worden gebruikt, gaat de grootste output waarschijnlijk naar de ontvanger. Ontbreekt er 0,01 BTC in het totaal, dan is dat de transactiekosten voor de miner.

Even goed mogelijk is dat de verzender uit kleinere UTXO's één grote wil maken en de kleine inputs samenvoegt om op het gewenste bedrag van 0,7 BTC uit te komen.

Een andere aanname volgt uit het feit dat elke input afzonderlijk wordt ondertekend. De transactie kan ook zo tot stand zijn gekomen dat de inputs door vier verschillende partijen zijn ondertekend. Precies dat principe maakt CoinJoin effectief.

Hoe werkt CoinJoin?

Het idee is dat meerdere partijen samen een transactie opstellen door hun inputs en gewenste outputs kenbaar te maken. Zodra alle inputs zijn samengevoegd, valt niet meer met zekerheid te zeggen welke output bij welke gebruiker hoort. In het schema hieronder zie je het proces:

Hier zijn vier gebruikers die de link tussen hun transacties willen verbreken. Ze stemmen onderling af (of via een coördinator) om door te geven welke inputs en outputs ze willen inbrengen.

De coördinator verzamelt alle gegevens, bouwt daar een transactie mee en laat elke deelnemer die ondertekenen voordat hij hem naar het netwerk verstuurt. Zodra de gebruikers hebben getekend, is de transactie niet meer aan te passen zonder haar ongeldig te maken. Daarmee is het risico dat de coördinator er met de tegoeden vandoor gaat uitgesloten.

De transactie werkt als een black box waarin de coins worden gemengd. Om nieuwe UTXO's te maken, moeten de oude worden vernietigd. De enige schakel tussen oud en nieuw is de transactie zelf, maar op dat punt zijn de deelnemers niet meer van elkaar te onderscheiden. Hoogstens valt te zeggen dat een van de inputs door een bepaalde deelnemer is ingebracht en dat diegene de nieuwe eigenaar van de bijbehorende output zou kunnen zijn.

Maar zelfs dat biedt geen zekerheid. Kun je uit bovenstaande transactie wel concluderen dat er vier deelnemers zijn? Stuurt er misschien één persoon geld naar vier eigen adressen? Doen twee mensen twee verschillende aankopen en sturen ze allebei 0,2 BTC terug naar hun eigen adres? Of sturen vier mensen tegoeden naar anderen of naar zichzelf? Op geen van deze vragen is een sluitend antwoord te geven.

Privacy door ontkenbaarheid

Alleen al het bestaan van CoinJoin-toepassingen is genoeg om te twijfelen aan de methoden waarmee transacties worden geanalyseerd. Je kunt vaststellen dat CoinJoin in veel transacties wordt gebruikt, maar wie de outputs bezit weet je nog steeds niet. Naarmate deze toepassingen populairder werden, verzwakte de aanname dat alle inputs van dezelfde gebruiker zijn – een grote stap vooruit voor de privacy binnen het bredere ecosysteem.

In het vorige voorbeeld heeft de transactie een anonimiteitsset van 4: de eigenaar van de output kan elk van de vier betrokken gebruikers zijn. Hoe groter de anonimiteitsset, hoe lastiger het wordt een transactie aan haar oorspronkelijke eigenaar te koppelen. Gelukkig kunnen gebruikers dankzij de nieuwste CoinJoin-implementaties hun input zonder enige vorm van vertrouwen combineren met die van tientallen anderen, wat een hoge mate van ontkenbaarheid oplevert. Nog niet zo lang geleden werd een transactie met 100 deelnemers succesvol uitgevoerd.

Tot slot

Tools om coins te mengen zijn belangrijke hulpmiddelen voor iedereen die om privacy geeft. Anders dan bij andere privacy-updates (zoals Confidential Transactions) kun je ze gebruiken zonder dat het protocol in zijn huidige vorm hoeft te veranderen.

Voor wie vertrouwt op de integriteit en werkwijze van derde partijen, bieden mixdiensten een makkelijke oplossing. Wie de voorkeur geeft aan verifieerbare alternatieven zonder bewaring door derden, is met CoinJoin duidelijk beter af. Technisch onderlegde gebruikers kunnen zulke transacties handmatig opzetten; softwaretools nemen het gedoe met de complexe mechanismen uit handen. Een aantal van die tools bestaat al en ze worden steeds populairder naarmate gebruikers meer privacy verlangen.