Även om Satoshi Nakamoto vitt papper föreslår att integritet var ett designmål för Bitcoin-protokollet, blockchain-analys kan ofta bryta användarnas integritet. Det här är ett problem. 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.
Men det finns lösningar för att återfå integriteten, som CoinJoin. Några av de mest populära blandningslösningarna som finns idag använder detta trick, inklusive Wasabi Wallet (som utnyttjar ZeroLink) och Samourai Wallet (som utnyttjar Whirlpool). I båda fallen hugger användare sina mynt i lika stora mängder för att blanda dem med varandra. Att använda lika mängder anses vara ett avgörande steg för att mixen ska bli effektiv.
Emellertid kallas ett nytt blandningsprotokoll CashFusion, under utveckling för Bitcoin Cash-nätverket, utmanar detta antagande. Utvecklarna bakom protokollet hävdar att CashFusion erbjuder integritet genom CoinJoins utan kravet att bara blanda lika stora mängder. Om det är sant kan detta också drastiskt förändra hur vi tänker på integritet i Bitcoin.
Om sant…
CoinJoin
Låt oss börja från början. (Eller hoppa över den här delen om du vet vad CoinJoin är.)
En typisk bitcoin-transaktion har en eller flera ingångar (i princip skickas adressmynt från) och en eller flera utgångar (i princip adressmynt skickas till). Om en transaktion har mer än en inmatning beror det vanligtvis på att avsändaren använde flera bitar av sina mynt (UTXO) för att komma till önskat belopp. Om en transaktion har mer än en utgång beror det vanligtvis på att flera personer får betalt samtidigt (en grupptransaktion) och / eller betalaren skickar tillbaka pengar till en av sina egna adresser som förändring (eftersom bitarna inte lägger till till exakt rätt belopp; detta är ofta fallet).
Tyvärr avslöjar en typisk transaktion som beskrivs här mycket. Det är till exempel lätt att dra slutsatsen att alla inmatningsadresser tillhör samma person, vilket möjliggör adresskluster. Transaktionen visar också från vilka adresser till vilka adresser mynt rör sig, vilket avslöjar ett spår av mynt över blockkedjan. Det kan finnas fler (subtila) tips, och alla är dåliga för integriteten.
En potentiell lösning på detta problem först föreslagen av Bitcoin Core-bidragsgivare Gregory Maxwell 2013, heter CoinJoin. Idén bakom CoinJoin är enkel: Flera oberoende transaktioner slås samman till en stor transaktion. Så om två transaktioner har två ingångar och två utgångar vardera, kombineras detta till en enda transaktion som har fyra ingångar och fyra utgångar. Detta bryter åtminstone antagandet att alla inmatningsadresser tillhör samma person och kan hjälpa till att bryta spåret av mynt också.
Varför lika stora belopp
Det antas vanligtvis att sekretessvinsterna för CoinJoin som beskrivs ovan skulle dock vara begränsade. I många fall kan de belopp som skickas i ingångarna och beloppen som mottagits i utgångarna förbryllas tillsammans för att återupptäcka vilka enskilda transaktioner som gick in i den kombinerade CoinJoin-transaktionen..
Låt oss till exempel ta två transaktioner, en från Alice till Carol och en från Bob till Dave. Alice har två bitar mynt värda 2,3 och 1,4 bitcoin, och hon vill betala Carol 3,2 bitcoin. Bob har bitar av 3 och 2 bitcoin och vill betala Dave 4 bitcoin.
Förenklat ser dessa transaktioner ut så här:
2,3 + 1,4 = 3,2 + 0,5
och
3 + 2 = 4 + 1
(Utgångarna på 0,5 BTC och 1 BTC är förändrade.)
Sammanlagt skulle CoinJoin-transaktionen se ut så:
3 + 2,3 + 2 + 1,4 = 4 + 3,2 + 1 + 0,5
Även om transaktionerna slogs samman är det trivialt att återupptäcka vilka ingångar som betalade vilka utdata, och därför också vilka ingångar som kan matchas tillsammans som tillhörande samma avsändare. Förutsatt att du vet att det finns två betalare kan beloppen förbryllas tillsammans med bara en potentiell konfiguration: de ursprungliga transaktionerna.
Av denna anledning är populära blandningslösningar som ZeroLink och Whirlpool begränsade till att blanda lika stora mängder. Oavsett vilka belopp som läggs i en blandning som insignaler, kan de blandade utgångarna inte skiljas från varandra, vilket innebär att alla deltagare kunde ha fått någon bit mynt i fast storlek.
Om de fasta beloppen är satt till 1 BTC skulle Alice, Bob, Carol och Daves CoinJoin se ut så:
3 + 2.3 + 2 + 1.4 = 1 + 1 + 1 + 1 +1 + 1 + 1 + 1 + 0.5 + 0.2
Detta är en stor förbättring, eftersom någon av bitarna av 1 kan förbryllas ihop i någon av de två ursprungliga transaktionerna. Det är inte klart vilken av de 1 BTC som tillhör Alice, Bob, Carol eller Dave eller till och med till vilket par.
Det är dock fortfarande inte perfekt eftersom det finns ojämna resultat kvar. Dessa utgångar, exakt för att de inte har lika stora belopp, kan fortfarande kopplas till specifika ingångar: Alice. Detta innebär också att Alice’s ingångar kan kopplas till varandra. Och om någon efter flera mixar kombinerar de ojämna resultaten i nästa transaktion, så skadar det också integriteten: det länkar de olika bitarna till samma person. Dessutom, om de ojämna utgångarna senare används i kombination med utgångarna med fast belopp, kan dessa läckor förstöra själva den ursprungliga blandningsprocessen.
CashFusion
CashFusion, ett projekt av Bitcoin Cash-utvecklarna Mark Lundeberg och Jonald Fyookball, gick ut på att hantera utmatningsproblemet ”leftover”. De skapade ursprungligen detta som ett tillägg till CashShuffle, som är en implementering av CoinShuffle för Bitcoin Cash och blandar lika stora belopp. Den något överraskande potentialen med CashFusion kan dock också innebära att det blir sitt eget fristående blandningsprotokoll.
För att förstå denna potential, låt oss titta på en annan uppsättning transaktioner. Låt oss säga att Alice vill betala Carol 4 mynt, och hon har två UTXO-värden på 2 och 3 mynt. Under tiden vill Bob betala 9 mynt till Dave, och han har två UTXO-värden värda 7 och 8 mynt.
Förenklat ser dessa transaktioner ut så här:
3 + 2 = 4 + 1
och
8 + 7 = 9 + 6
Sammanlagt skulle CoinJoin-transaktionen se ut så:
8 + 7 + 3 + 2 = 9 + 6 + 4 + 1
Nu, från denna CoinJoin-transaktion, är det naturligtvis möjligt att pussla ihop de två ursprungliga transaktionerna. Men även om du vet att det finns två betalare är det också möjligt med flera andra kombinationer.
Till exempel:
8 + 2 = 9 + 1
och
7 + 3 = 6 + 4
Eller:
8 + 2 = 6 + 4
och
7 + 3 = 9 + 1
Eller:
7 + 2 = 9
och
8 + 3 = 6 + 4 + 1
Eller:
7 = 6 + 1
och
8 + 3 + 2 = 9 + 4
För enkelhets skull använde detta exempel bara runda nummer. Detta möjliggör fler potentiella konfigurationer men kommer faktiskt inte att spegla verkligheten så ofta. På baksidan använde detta förenklade exempel bara två originaltransaktioner. I själva verket kan en CoinJoin bestå av dussintals eller till och med hundratals originaltransaktioner. Så även om det är förenklat, hjälper den förenklingen både och skadar potentialen att skapa flera konfigurationer.
CashFusion bygger på teorin, härledd från fältet Kombinatorik, att en tillräckligt stor CoinJoin-transaktion ofta (om inte alltid) kommer att erbjuda flera olika lösningar på pusslet, även när realistiska belopp används. Och att, eftersom fler ingångar och utgångar ingår, kan fler potentiella konfigurationer härledas från den. (Detta bör vara särskilt sant om beloppen är i samma ballpark – som 1 BCH – som CashFusion-användare uppmuntras att göra för sin egen integritet.)
Eftersom det finns fler potentiella lösningar på pusslet kommer en blockchain-analytiker att ha svårare att ta reda på vilken lösning som var den ursprungliga konfigurationen. Detta bör bryta spåren av mynt och göra det svårare att länka ingångarna. Som sådan bör det erbjuda integritet.
För att förbättra denna potential innehåller CashFusion ett extra trick för att göra det ännu svårare att pussla ihop den ursprungliga konfigurationen: Det låter användare semi-slumpmässigt hugga upp sina utgångar i flera mindre utgångar. Så istället för att Alice betalar Carol en produktion på 4 mynt, kan Alice till exempel skicka Carol-utgångar på 3 och 1 mynt. Bob kunde istället för att betala en utgång på 9 mynt skicka Dave-utgångar på 5, 3 och 1 mynt.
Under tiden uppmuntras användare att tillhandahålla flera ingångar också, kanske från tidigare mixar. Detta gör att de kan konsolidera sina mindre bitar till en större bit, utan att det är uppenbart i blockchain. (Alice skulle till exempel tillhandahålla ingångar på 2 + 2 + 1; Bob skulle tillhandahålla ingångar på 6 + 5 + 4.) Faktum är att konsolidering av de ojämna kvarvarande bitarna till större utgångar var den ursprungliga idén och fungerar som ursprung för protokollets namn: CashFusion.
Men klarar antagandet?
För att göra dig besviken om du läser så här långt och letar efter en slutlig slutsats: Den här artikeln kommer inte att ge ett definitivt svar på frågan om CashFusions antaganden håller eller inte, eller i vilken utsträckning. Det verkar som om det inte finns något definitivt svar än. Förslaget har gått igenom relativt lite peer review hittills, och medan utvecklarna bakom CashFusion tror att deras lösning erbjuder tillräcklig integritet, verkar andra lite mer skeptiska.
På det hela taget verkar CashFusions tillvägagångssätt missvisat, eftersom tidigare ojämna blandningsplaner som Blockchains SharedCoin var bruten för flera år sedan. Men den avgörande skillnaden, tror Lundeberg och Fyookball nu, är att en CashFusion-transaktion skulle innehålla mer in- och utdata än en SharedCoin-transaktion gjorde. Liknar andra icke-intuitiva matematiska särdrag som födelsedag problem, antalet potentiella konfigurationer växer exponentiellt för varje tillförd input och output, vilket löser problemet som SharedCoin hade – även om Lundeberg håller med om att bättre matematiska bevis kommer att behövas för att korrekt bekräfta detta.
Själva CashFusion-beskrivningen inkluderar vad Lundeberg självklart anser som “servettmatematik”, varav en något mer avancerad version också var publicerad av honom på Reddit. Dessa uppskattningar antyder att även med endast 10 deltagare, som vardera tillhandahåller 10 ingångar som ska konsolideras i en utgång (för totalt 100 ingångar och 10 utgångar), skulle antalet möjliga konfigurationer i genomsnitt ligga i intervallet 100 quintillion. (Det är en med tjugo nollor, eller 10 ^ 20.) Till och med att bara beräkna alla dessa möjligheter skulle ta en hel del tid – nevermind korrekt återupprätta de ursprungliga transaktionerna.
När denna artikel skrivs pågår mer forskning; Fyookball publicerade nyligen sin egen analys i detta blogginlägg. För nu är Lundeberg, Fyookball och andra åtminstone tillräckligt övertygade om CashFusion-protokollet för att kunna distribuera det. En alfa-klient av CashFusion-programvaran är tillgänglig för testning; en fullständig release förväntas inom några månader.
Men andra är inte lika övertygade. En kritik av förslaget är att – även om 10 ^ 20-talet (ungefär) håller ihop – kommer inte alla utdata från ett CashFusion CoinJoin lika sannolikt att ha kommit från varje insats. Med andra ord, medan vissa deltagare kan få betydande integritet, kan andra få mycket mindre integritet från samma mix. Och för varje enskild användare skulle det vara svårt att säga om det är de som får mycket integritet eller inte. (Denna kritik och andra kritiker finns i den här senaste bitcoin-dev-e-posttråden.)
Däremot erbjuder lika mängd blandning liknande integritet för alla deltagare och resulterar i ett maximalt antal möjliga konfigurationer. På ett sätt resulterar blandningar av lika stora belopp i ett “perfekt” CashFusion CoinJoin och är därför strikt bättre – om det ojämna förändringsproblemet ignoreras.
Ändå, även om CashFusion aldrig skulle ersätta blandning av lika belopp, kan det bara hjälpa till att lösa problemet med ojämn förändring, som ursprungligen tänkt …
Författarens anmärkning: Det finns lite mer i CashFusion-förslaget, som hur CoinJoin-transaktionen är uppbyggd. Det finns också flera mer subtila risker och avvägningar när det gäller integritet, som hur användare hanterar sina mynt före och efter mixen. För enkelhet och läsbarhet fokuserar den här artikeln bara på den centrala och förmodligen mest intressanta idén bakom CashFusion: blandning av ojämlik mängd.
Tack till Mark Lundeberg för information och feedback.
Del två i denna artikel kommer att täcka en annan blandningsteknik som inte är lika stor Ryggsäck.