Selv om Satoshi Nakamoto’s hvitt papir antyder at personvern var et designmål for Bitcoin-protokollen, blockchain-analyse kan ofte bryte brukernes privatliv. Dette er et problem. Bitcoin-brukere vil kanskje ikke nødvendigvis at verden skal vite hvor de bruker pengene sine, hva de tjener eller hvor mye de eier, mens bedrifter kanskje ikke vil lekke transaksjonsdetaljer til konkurrentene – for å nevne noen eksempler.
Men det er løsninger for å gjenvinne personvernet, som CoinJoin. Noen av de mest populære blandeløsningene som er tilgjengelige i dag, bruker dette trikset, inkludert Wasabi Wallet (som utnytter ZeroLink) og Samourai Wallet (som utnytter Whirlpool). I begge tilfeller hugger brukerne myntene sine i like store mengder for å blande dem med hverandre. Å bruke like mengder anses å være et avgjørende trinn for at miksen skal være effektiv.
Imidlertid kalt en ny blandingsprotokoll CashFusion, i utvikling for Bitcoin Cash-nettverket, utfordrer denne antagelsen. Utviklerne bak protokollen hevder at CashFusion tilbyr privatliv gjennom CoinJoins uten krav om å bare blande like store mengder. Hvis det er sant, kan dette også drastisk endre hvordan vi tenker på personvern i Bitcoin.
Hvis sant…
CoinJoin
La oss starte i begynnelsen. (Eller hopp over denne delen hvis du vet hva CoinJoin er.)
En typisk bitcoin-transaksjon har en eller flere innganger (i utgangspunktet adressemyntene sendes fra) og en eller flere utganger (i utgangspunktet blir adressemyntene sendt til). Hvis en transaksjon har mer enn ett inngang, er det vanligvis fordi avsenderen brukte flere biter av myntene sine (UTXOer) for å komme til ønsket beløp. Hvis en transaksjon har mer enn en utgang, er det vanligvis fordi flere personer blir betalt samtidig (en batch-transaksjon) og / eller betaleren sender penger tilbake til en av sine egne adresser som endring (fordi biter ikke ble sammen til nøyaktig riktig beløp; dette er ofte tilfelle).
Dessverre avslører en typisk transaksjon som beskrevet her mye. For eksempel er det enkelt å konkludere med at alle inngangsadressene tilhører samme person, noe som gir mulighet for adresseklynging. Transaksjonen viser også fra hvilke adresser til hvilke adresser mynter beveger seg, og avslører et spor med mynter over blockchain. Det kan være flere (subtile) hint, og alt er dårlig for personvernet.
En potensiell løsning på dette problemet, først foreslått av Bitcoin Core-bidragsyter Gregory Maxwell i 2013, heter CoinJoin. Ideen bak CoinJoin er enkel: Flere uavhengige transaksjoner slås sammen til en stor transaksjon. Så hvis to transaksjoner har to innganger og to utganger hver, kombineres dette til en enkelt transaksjon som har fire innganger og fire utganger. Dette bryter i det minste antagelsen om at alle inngangsadresser tilhører samme person og kan også bidra til å bryte myntsporet.
Hvorfor like store beløp
Det antas vanligvis at fortrolighetsgevinstene til CoinJoin som beskrevet ovenfor vil være begrenset. I mange tilfeller kan beløpene som sendes i inngangene og beløpene som mottas i utgangene bli forvirret sammen for å gjenoppdage hvilke individuelle transaksjoner som gikk inn i den kombinerte CoinJoin-transaksjonen..
La oss for eksempel ta to transaksjoner, en fra Alice til Carol og en fra Bob til Dave. Alice har to biter av mynter verdt 2,3 og 1,4 bitcoin, og hun vil betale Carol 3,2 bitcoin. Bob har biter av 3 og 2 bitcoin, og vil betale Dave 4 bitcoin.
Forenklet, disse transaksjonene ser slik ut:
2,3 + 1,4 = 3,2 + 0,5
og
3 + 2 = 4 + 1
(0,5 BTC- og 1 BTC-utgangene endres.)
Fusjonert sammen vil CoinJoin-transaksjonen se slik ut:
3 + 2.3 + 2 + 1.4 = 4 + 3.2 + 1 + 0.5
Selv om transaksjonene ble slått sammen, er det trivielt å gjenoppdage hvilke innganger som betalte hvilke utganger, og derfor også hvilke innganger som kan matches sammen som tilhørende samme avsender. Forutsatt at du vet at det er to betalere, kan beløpene forvirres sammen med bare en potensiell konfigurasjon: de originale transaksjonene.
Av denne grunn er populære blandeløsninger som ZeroLink og Whirlpool begrenset til å blande like store mengder. Uansett hvilke beløp som settes i en blanding som innganger, kan de blandede utgangene ikke skilles fra hverandre, noe som betyr at enhver deltaker kunne ha mottatt en mengde myntbiter i fast størrelse.
Hvis de faste beløpene er satt til 1 BTC, vil Alice, Bob, Carol og Daves CoinJoin se ut slik:
3 + 2.3 + 2 + 1.4 = 1 + 1 + 1 + 1 +1 + 1 + 1 + 1 + 0.5 + 0.2
Dette er en stor forbedring, siden noen av biter av 1 kan bli forvirret sammen i en av de to originale transaksjonene. Det er ikke klart hvilken av de 1 BTC-ene som tilhører Alice, Bob, Carol eller Dave, eller til hvilket par.
Imidlertid er det fortsatt ikke perfekt, fordi det er ulik utgang igjen. Disse utgangene, akkurat fordi de ikke har like store beløp, kan fortsatt knyttes til spesifikke innganger: Alice’s. Dette betyr også at Alice’s innganger kan knyttes til hverandre. Og hvis noen, etter flere mikser, kombinerer de ulike resultatene i en neste transaksjon, skader det også personvernet: det knytter de forskjellige biter til samme person. Videre, hvis de ulige utgangene senere blir brukt i kombinasjon med utgangene med fast beløp, kan disse lekkasjene ødelegge selve den første blandingsprosessen.
CashFusion
CashFusion, et prosjekt av Bitcoin Cash-utviklerne Mark Lundeberg og Jonald Fyookball, satte seg for å håndtere problemet med “leftover”. De opprinnelig opprettet dette som et tillegg til CashShuffle, som er en implementering av CoinShuffle for Bitcoin Cash, og blander like store mengder. Det noe overraskende potensialet til CashFusion kan også bety at det blir sin egen frittstående blandingsprotokoll.
For å forstå dette potensialet, la oss se på et annet sett med transaksjoner. La oss si at Alice vil betale Carol 4 mynter, og hun har to UTXO-er verdt 2 og 3 mynter. I mellomtiden vil Bob betale Dave 9 mynter, og han har to UTXOer til en verdi av 7 og 8 mynter.
Forenklet, disse transaksjonene ser slik ut:
3 + 2 = 4 + 1
og
8 + 7 = 9 + 6
Fusjonert sammen vil CoinJoin-transaksjonen se slik ut:
8 + 7 + 3 + 2 = 9 + 6 + 4 + 1
Fra denne CoinJoin-transaksjonen er det selvfølgelig mulig å puslespill sammen de to opprinnelige transaksjonene. Selv om du vet at det er to betalere, er det imidlertid også flere andre kombinasjoner mulig.
For eksempel:
8 + 2 = 9 + 1
og
7 + 3 = 6 + 4
Eller:
8 + 2 = 6 + 4
og
7 + 3 = 9 + 1
Eller:
7 + 2 = 9
og
8 + 3 = 6 + 4 + 1
Eller:
7 = 6 + 1
og
8 + 3 + 2 = 9 + 4
For enkelhets skyld brukte dette eksemplet bare runde tall. Dette muliggjør flere potensielle konfigurasjoner, men vil faktisk ikke gjenspeile virkeligheten veldig ofte. På baksiden brukte dette forenklede eksemplet bare to originale transaksjoner. I virkeligheten kan en CoinJoin bestå av dusinvis eller hundrevis av originale transaksjoner. Så selv om det er forenklet, hjelper og forringer denne forenklingen potensialet i å lage flere konfigurasjoner.
CashFusion er bygget opp rundt teorien, avledet fra feltet Kombinatorikk, at en stor nok CoinJoin-transaksjon ofte (om ikke alltid) vil tilby flere forskjellige løsninger på puslespillet, selv når det brukes realistiske beløp. Og at ettersom flere innganger og utganger er inkludert, kan flere potensielle konfigurasjoner hentes fra den. (Dette bør være spesielt sant hvis beløpene er i samme ballpark – som 1 BCH – som CashFusion-brukere oppfordres til å gjøre for deres eget privatliv.)
Siden det er flere potensielle løsninger på puslespillet, vil en blockchain-analytiker ha vanskeligere for å finne ut hvilken løsning som var den opprinnelige konfigurasjonen. Dette bør bryte sporet av mynter og gjøre det vanskeligere å koble innganger sammen. Som sådan bør det tilby privatliv.
For å forbedre dette potensialet inkluderer CashFusion et ekstra triks for å gjøre det enda vanskeligere å pusle sammen den opprinnelige konfigurasjonen: Det lar brukerne semi-tilfeldig hogge utgangene sine i flere mindre utganger. Så i stedet for at Alice betalte Carol en utgang på 4 mynter, kunne Alice for eksempel sende Carol-utganger på 3 og 1 mynt. Bob, i stedet for å betale en utgang på 9 mynter, kunne sende Dave-utganger på 5, 3 og 1 mynt.
I mellomtiden oppfordres brukerne til å gi flere innganger også, kanskje fra tidligere mikser. Dette gjør at de kan konsolidere sine mindre biter i en større del, uten at det er tydelig på blockchain. (Alice ville for eksempel gi innspill på 2 + 2 + 1; Bob ville gi innspill på 6 + 5 + 4.) Faktisk var det å konsolidere de ulige restene av biter i større utganger den opprinnelige ideen og fungerer som opprinnelsen til protokollens navn: CashFusion.
Men holder antakelsen?
For å skuffe deg hvis du leser så langt på jakt etter en endelig konklusjon: Denne artikkelen vil ikke gi et definitivt svar på spørsmålet om CashFusions antagelser holder eller ikke, eller i hvilken grad. Det ser ut til at det ikke er et definitivt svar ennå. Forslaget har gått gjennom relativt lite fagfellevurdering så langt, og mens utviklerne bak CashFusion mener løsningen deres gir tilstrekkelig privatliv, virker andre litt mer skeptiske.
På forsiden virker CashFusions tilnærming misforstått, da tidligere ulik mengdeblandingsordninger som Blockchains SharedCoin var gått i stykker År siden. Men den avgjørende forskjellen, mener Lundeberg og Fyookball nå, er at en CashFusion-transaksjon vil inkludere flere input og output enn en SharedCoin-transaksjon gjorde. I likhet med andre ikke-intuitive matematiske særegenheter som bursdagsproblem, antall potensielle konfigurasjoner vokser eksponentielt for hver ekstra input og output, og løser problemet SharedCoin hadde – selv om Lundeberg er enig i at bedre matte bevis vil være nødvendig for å bekrefte dette riktig.
Selve CashFusion-beskrivelsen inkluderer det Lundeberg selvsagt anser som “serviettmatematikk”, hvorav en litt mer avansert versjon også var publisert av ham på Reddit. Disse estimatene antyder at selv om bare 10 deltakere, som hver gir 10 innganger som skal konsolideres i en utgang (for totalt 100 innganger og 10 utganger), vil antallet mulige konfigurasjoner i gjennomsnitt ligge i området 100 kvintillioner. (Det er en med tjue nuller, eller 10 ^ 20.) Selv bare å beregne alle disse mulighetene vil ta litt tid – nevermind riktig å gjenopprette de opprinnelige transaksjonene.
Når denne artikkelen skrives, pågår mer forskning; Fyookball publiserte nylig sin egen analyse i dette blogginnlegget. For nå er Lundeberg, Fyookball og andre i det minste tilstrekkelig overbevist om CashFusion-protokollen til å ønske å distribuere den. En alfa-klient av CashFusion-programvaren er tilgjengelig for testing; en full utgivelse forventes innen måneder.
Men andre er ikke like overbeviste. En kritikk av forslaget er at – selv om 10 ^ 20-tallet (omtrent) holder seg – vil ikke alle utdataene fra en CashFusion CoinJoin være like sannsynlig å ha kommet fra alle innspill. Med andre ord, mens noen deltakere kan få betydelig personvern, kan andre få mye mindre privatliv fra den samme blandingen. Og for enhver enkelt bruker vil det være vanskelig å fortelle om det er de som får mye privatliv eller ikke. (Denne kritikken og andre kritikker finnes i denne nylige e-posttråden for bitcoin-dev.)
Derimot gir blanding av like mengder lignende personvern til alle deltakere og resulterer i et maksimalt antall mulige konfigurasjoner. På en måte resulterer miks i like mengder i en “perfekt” CashFusion CoinJoin og er derfor strengt bedre – hvis problemet med ulik endring blir ignorert.
Likevel, selv om CashFusion aldri ville erstatte blanding av like mengder, kan det bare bidra til å løse problemet med ulik endring, som opprinnelig ment …
Forfatterens merknad: Det er litt mer i CashFusion-forslaget, som hvordan CoinJoin-transaksjonen er konstruert. Det er også flere subtile risikoer og kompromisser når det gjelder personvern, som hvordan brukere håndterer myntene sine før og etter blandingen. For enkelhet og lesbarhet fokuserer denne artikkelen bare på den sentrale og uten tvil mest interessante ideen bak CashFusion: blanding av ulik mengde.
Takk til Mark Lundeberg for informasjon og tilbakemelding.
Del to av denne artikkelen vil dekke en annen blandingsteknikk som ikke er like stor Ryggsekk.