Bitcoin just nu är inte riktigt anonym. Även om Bitcoin-adresser inte nödvändigtvis är kopplade till verkliga identiteter, kan de vara det. Övervakning av det okrypterade peer-to-peer-nätverket, analys av den offentliga blockchain och Know Your Customer (KYC) -policy eller anti-penningtvätt (AML) -regleringen kan avslöja mycket om vem som använder Bitcoin och för vad.
Detta är inte bra ur ett integritetsperspektiv. Bitcoin-användare vill inte nödvändigtvis att världen ska veta var de spenderar sina pengar, vad de tjänar eller hur mycket de äger, medan företag kanske inte vill läcka transaktionsinformation till konkurrenter – för att nämna några exempel.
Dessutom är bitcoins som kan spåras, eventuellt “fläckade” och potentiellt värda mindre än andra bitcoins i strid med fungibilitet. Detta kan till och med utmana Bitcoins värdeproposition som pengar.
Men det finns potentiella lösningar för att öka integriteten och förbättra fungibiliteten.
En lösning som har funnits ett tag är CoinJoin.
Bakgrund
Kärnan består av Bitcoin-protokollet av transaktioner. Alla dessa transaktioner är helt offentliga på blockchain, vilket innebär att vem som helst kan se vilka adresser som skickas bitcoins till vilka adresser. Om några av dessa adresser är kopplade till verkliga identiteter kan det avslöja vem som handlade med vem – eller vad för. Detta strider mot integritet och – särskilt – svaghet.
Dessutom spenderar varje enskild transaktion en eller flera “ingångar”, med hänvisning till adresserna som bitcoins skickas från. (Dessa ingångar spenderas till “utgångar”, med hänvisning till adresserna som bitcoins skickas till.) Detta utgör en annan utmaning för integritet och fungibilitet, eftersom alla ingångsadresser vanligtvis tillhör samma användare: avsändaren av transaktionen. Om till och med en av alla klustrade ingångsadresser kan länkas till en verklig identitet, så är alla det.
CoinJoin – föreslagen 2013 av Bitcoin Core och Blockstream utvecklare Gregory Maxwell – är utformad för att lösa båda dessa problem. Det döljer bitcoins spår och bryter antagandet att alla inmatningsadresser tillhör samma användare.
Idén
CoinJoin-konceptet är ganska enkelt.
I grund och botten låter CoinJoin flera användare kombinera alla in- och utgångar från flera transaktioner till en enda stor transaktion. Denna enda transaktion spenderar bitcoins från olika adresser till olika adresser – och eftersom ingen av de sändande adresserna betalar någon av de mottagande adresserna specifikt; det finns ingen länk mellan någon av dem.
(Detta kan jämföras med en grupp människor som slänger sina pengar och shoppar. Medan alla kunde se till att ingen spenderar mer än vad de borde, skulle kunden inte nödvändigtvis spendera de exakta räkningarna de ursprungligen lade i den delade plånboken själva .)
I Bitcoin kan detta åstadkommas helt säkert. Alla ingångar kräver en motsvarande signatur från respektive ägare, medan innehållet i en transaktion inte kan ändras efter att en signatur har lagts till. Som sådan meddelar deltagare i en CoinJoin-transaktion helt enkelt vilka in- och utgångar de vill inkludera i transaktionen och undertecknar endast aggregatet om dessa in- och utgångar är korrekt inkluderade. När alla deltagare har signerat (och bara en gång de har signerat) sänds transaktionen.
En nyckelfunktion i CoinJoin: när transaktionen sänds och ingår i blockchain finns det inget sätt att veta vilka bitcoins som gick vart; inte ens mottagarna av transaktionen vet från vilka adresser de fick betalt.
Dessutom förbättrar CoinJoin integriteten även för dem som inte använder det alls. Eftersom en kombination av ingångar inte längre nödvändigtvis innebär att alla ingångsadresserna tillhör samma användare, har klustring i allmänhet blivit ett mindre kraftfullt analysverktyg.
I praktiken
CoinJoin kräver inga ändringar av Bitcoin-protokollet, och det finns flera implementeringar av det redan. Huvudskillnaden mellan några av versionerna där ute är hur CoinJoin-transaktionen skapas.
Det enklaste sättet att skapa en CoinJoin-transaktion är via en dedikerad server. Den som vill använda CoinJoin ansluter helt enkelt till servern för att ange vilka in- och utgångar som transaktionen ska innehålla. Servern skapar sedan en stor samlad transaktion och skickar tillbaka den för alla deltagare att signera. DarkWallet – den integritetsfokuserade Bitcoin-plånboken som verkar fastna i sin alfafas – använder en serverbaserad modell, liksom den populära Blockchain webbplånbok, även om dess effektivitet har varit ifrågasatt förr.
Huvudproblemet med den serverbaserade modellen är att den som kontrollerar servern vanligtvis skulle ha tillgång till data som tillhandahålls av de enskilda deltagarna. Som sådan presenterar denna server en enda felpunkt ur ett integritets- och fungibilitetsperspektiv. Det finns potentiella lösningar för att kryptografiskt maskera transaktionsdata även från servern, men det är fortfarande teoretiskt.
Det finns också decentraliserade CoinJoin-lösningar som konstruerar CoinJoin-transaktioner peer-to-peer, eller åtminstone utan någon speciell central mellanhand. Det har gjorts flera försök i denna riktning, inklusive Coinmux, Coinjumble, CoinJoiner och tidigare DarkWallet-utvecklare Amir Taakis CoinJoin-verktyg. Men inget av dessa används i stor utsträckning och är därför inte särskilt användbart – “myntanslutning” är vettigt först när det finns någon att gå med i.
En nyare syn på CoinJoin-strategin som avser att ta itu med detta problem är Gå med på marknaden: en marknadsplats för CoinJoin-transaktioner. Användare kan erbjuda en plats i en CoinJoin-transaktion mot en mindre avgift – eller köpa tillgång till en CoinJoin-transaktion själva. Skaparna av JoinMarket tro att incitamentet att blanda mynt i utbyte mot avgifter bör generera tillräckligt med likviditet för att göra marknaden till en framgång – medan dess konkurrenskraft bör hålla avgifterna låga. Faktum är att JoinMarket används relativt bra jämfört med alternativ och beställa bok (i skrivande stund) erbjuder tusentals bitcoins att blanda med.
Slutligen en annan sekretessfokuserad plånbok, Samourai plånbok, innehåller för närvarande en typ av CoinJoin-imitation, utformad för att kasta bort den som analyserar blockchain-data. Detta alternativ gör att transaktioner ser ut som CoinJoin-transaktioner, medan i själva verket alla ingångar och utgångar tillhör samma användare. (Samourai Wallet planerar att utvidga alternativ för inbyggnad och blandning av plånböcker senare i år, vilket också kan använda CoinJoin-funktionalitet.)
Nackdelar och kompromisser
Medan CoinJoin kan vara användbart – det är inte perfekt.
Det viktigaste, även om CoinJoin gör ett bra jobb med att blanda in- och utgångar, är det inte tillräckligt om beloppen avslöjar. Om en ingång skickar 4,9 bitcoins, en annan ingång skickar 2,7 bitcoins och en tredje ingångar skickar 0,8 bitcoins, medan en utgång får 4,9 bitcoins, en får 2,7 bitcoins och en tredje får 0,8 bitcoins, då är det enkelt att ansluta ingångar till utgångar.
En potentiell lösning på detta problem är naturligtvis Konfidentiella transaktioner. Eftersom konfidentiella transaktioner maskerar de skickade beloppen (men inte in- och utgångarna) är CoinJoin och Confidential Transactions en potentiellt kraftfull kombination.
En annan risk är att Sybil-attacker. Till synes flera deltagare i en CoinJoin-transaktion kan verkligen vara en och samma enhet och övervaka en viss deltagare.
(Om nio av tio ingångar och utgångar tillhör en enda NSA-agent som skickar bitcoins till sig själv, skulle han veta vilken återstående produktion som skickade bitcoins till vilken återstående produktion.)
Det finns ingen enkel lösning för problemet med Sybil-attacker, men när fler äkta användare blandar sina mynt blir det betydligt svårare att få framgång.
Vilket tar oss till nästa punkt: CoinJoin är fortfarande ett besvär. Nästan inga plånböcker har den inbyggda, och de som inte används mycket (och förlitar sig på en central server.) JoinMarket är förmodligen den hittills mest framgångsrika implementeringen, men kräver fortfarande specialprogramvara och extra avgifter (även om de är små).
Men en intressant utveckling i horisonten kan förskjuta dessa incitament: Schnorr signaturer. Aktiverad av Segregated Witness, kunde Schnorr-signaturer möjliggöra aggregering av alla signaturer i en CoinJoin-transaktion till en enda signatur. Denna effektivitet bör leda till lägre transaktionsavgifter per insats, och kanske stimulera användningen av den mest privata och svampbarhetsvänliga lösningen.
Tack till Gregory Maxwell för extra feedback.