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.
Del en av denne miniserien dekket en ny miksingsprotokoll under utvikling for Bitcoin Cash kalt CashFusion, som utfordrer antagelsen om at like mengder er nødvendige for en vellykket blanding.
Men selv i 2017, i en papir analysere personvernet til ikke like mye CoinJoins i dybden, forskere fra RWTH Aachen University og Karlsruhe Institute of Technology foreslo en løsning for å få privatliv gjennom CoinJoin uten behov for å bruke like store mengder: ryggsekkblanding.
Forfatterens merknad: Hvis du ikke vet hva en CoinJoin-transaksjon er eller hvorfor det antas at like store mengder er nødvendige for miksing, bør du først lese del en av denne miniserien – eller i det minste lese de to første delene av den artikkelen.
Mixing Versus Paying
Som forklart i del en av denne miniserien, tilbyr nok mengde bitcoin-blanding sannsynligvis det beste oppnåelige personvernet på Bitcoin blockchain i dag. Men det gir brukerne utganger med ulik endring. Disse tilbyr ikke det samme personvernnivået og kan til og med være en personvernrisiko. CashFusion kan være med på å takle disse ulikhetene.
Men det er et annet problem. Kravet om å bruke like store beløp hindrer brukere i å foreta faktiske innbetalinger gjennom CoinJoin-transaksjoner: Det er lite sannsynlig at en selger vil belaste det nøyaktige beløpet som kreves i CoinJoin. Så i stedet brukes CoinJoins med samme beløp egentlig bare til miksing *: Deltakerne legger inn penger og får tilbake like mye penger. Dessverre betyr dette at miksing krever ekstra blockchain-transaksjoner, som koster transaksjonsgebyrer og tid.
Forskerne Felix Konstantin Maurer (fra RWTH Aachen-universitetet), Till Neudecker og Martin Florian (begge fra Karlsruhe teknologiske institutt) satte seg for å løse dette problemet i sin artikkel fra 2017 med tittelen “Anonyme mynttransaksjoner med vilkårlige verdier.”De foreslo en CoinJoin-løsning som kan være nyttig for faktiske innbetalinger – det vil si at den bruker ulike beløp – mens de fremdeles tilbyr privatliv.
Oppkalt etter ryggsekk problem, løsningen deres blir referert til som ryggsekkblanding.
Ryggsekkblanding
I likhet med CashFusion er kjerneideen bak knapsack-blanding å generere en CoinJoin-transaksjon som kan forvirres sammen i flere forskjellige konfigurasjoner av potensielle originale transaksjoner. Ulike konfigurasjoner vil koble forskjellige innganger til forskjellige utganger, og dermed bryte sporet av mynter på blockchain.
Knapsack-blanding oppnår dette ved å kutte de originale utgangene fra de opprinnelige transaksjonene til mindre utganger for CoinJoin-transaksjonen. Videre bruker den relativt enkle triks for å sikre at de mindre utgangene resulterer i at flere potensielle konfigurasjoner er mulig.
Maurer, Neudecker og Florians papir inneholder tre varianter av ryggsekkblanding. Den første varianten er den mest utfyllte i selve papirboken. Den andre og tredje versjonen er ganske like, hvor den tredje versjonen egentlig er en overlegen versjon av den andre versjonen. (Forfatterne av papiret kom bare med den tredje versjonen i et sent stadium av å skrive papiret; det hadde sannsynligvis fått en mer fremtredende plass i studien ellers.)
La oss se på de forskjellige variantene.
Variant One
For å forklare den første varianten av ryggsekkblanding, la oss ta et CoinJoin-eksempel fra den første artikkelen i denne miniserien. Alice vil betale Carol 3,2 mynter og har to innspill verdt henholdsvis 2,3 og 1,4 mynter. I mellomtiden ønsker Bob å betale Dave 4 mynter og har to innspill verdt henholdsvis 3 og 2 mynter.
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 da se slik ut:
3 + 2.3 + 2 + 1.4 = 4 + 3.2 + 1 + 0.5
Som påpekt i forrige artikkel, ble transaksjonene slått sammen, men forutsatt at du vet at det er to betalere, kan beløpene forvirres sammen i bare en konfigurasjon: de originale transaksjonene. Som sådan er det trivielt å gjenoppdage hvilke innganger som betalte hvilke utganger, og beseire poenget med å lage en CoinJoin.
Ryggsekkblanding endrer dette. Kort sagt bruker den verdiforskjellen mellom de to originale transaksjonene for å dele en originalutgang fra den største transaksjonen i mindre deler. Dette sikrer i det minste at det er to konfigurasjoner, der de fleste utganger kan kobles til hvilken som helst inngang.
La oss se på dette trinn for trinn. For det første legges den totale mengden utgangene sammen per transaksjon. For Alice og Carol’s transaksjon er dette 2,3 + 1,4 = 3,7. For Bob og Daves transaksjon er dette 3 + 2 = 5. Bob og Daves transaksjon er den største.
Deretter beregnes forskjellen mellom de to: 5 – 3,7 = 1,3. Deretter trekkes denne forskjellen fra den største transaksjonen. Bob and Dave’s er den største transaksjonen, og vi vil dele 4-utdataene, så: 4 – 1.3 = 2.7.
Derfor er de fire utgangene fra den største transaksjonen i CoinJoin delt i 1.3 og 2.7.
Denne gangen ser CoinJoin slik ut:
3 + 2.3 + 2 + 1.4 = 3.2 + 2.7 + 1.3 + 1 + 0,5
Nå kommer vi tilbake til forundrende …
Selvfølgelig er den opprinnelige konfigurasjonen fremdeles mulig. Det er bare at Dave nå mottar to utganger i stedet for en.
Dette vil se slik ut:
2,3 + 1,4 = 3,2 + 0,5
og
3 + 2 = 2.7 + 1.3 + 1
Men i tillegg er en helt ny konfigurasjon nå mulig:
2.3 + 1.4 = 2.7 + 1
og
3 + 2 = 3,2 + 1.3 + 0,5
Som et resultat kan blockchain-analytikere ikke lenger koble utgangene 3.2, 2.7, 1 eller 0.5 til noen innspill med sikkerhet! En velsignelse for personvern, selv om CoinJoin-transaksjonen ikke brukte like store mengder.
For å legge til en ny transaksjon i blandingen, vil verdien av alle tidligere transaksjoner (uttrykt annerledes: den eksisterende CoinJoin) bli lagt opp som om det var en transaksjon. Så, som første gang, ville verdiforskjellen mellom disse tidligere transaksjonene og den nye transaksjonen bli brukt til å dele en utdata. Og så videre for neste transaksjon og eventuell tilleggstransaksjon etter det.
Varianter to og tre
Mens variant en av ryggsekkblanding gjør en god jobb med å avkoble de fleste utgangene fra noen av inngangene, kan inngangene i seg selv fortsatt kobles til andre innganger. Disse settene er de samme for begge konfigurasjonene. Dette er heller ikke ideelt for personvern.
Blandingsvarianter to og tre med ryggsekk er spesielt designet for å koble fra inngangene. Variant to krever imidlertid at alle deltakere i CoinJoin lærer hverandres innganger og utganger, noe som betyr at det faktisk ikke gir mye privatliv: Variant tre løser dette. For formålet med artikkelen (som fokuserer på blockchain-personvern) er forskjellen liten nok til å dekke begge variantene samtidig.
Vi tar de samme eksemplene som ovenfor. Alice vil betale Carol 3,2 mynter, og Bob vil betale Dave 4 mynter.
Så:
2,3 + 1,4 = 3,2 + 0,5
og
3 + 2 = 4 + 1
For varianter to og tre genereres en “virtuell transaksjon”. Denne virtuelle transaksjonen eksisterer ellers ikke, men blockchain-analytikere vil bli lurt til å tro at den kan.
For å opprette denne virtuelle transaksjonen tas ett input fra hver originale transaksjon. Deretter legges verdien til disse inngangene sammen.
For eksempel slik:
1,4 + 2 = 3,4
Verdien på de valgte inngangene er 3,4. Derfor må verdien av utgangene til den virtuelle transaksjonen også være 3,4.
Dette er lett å oppnå. Vi tar igjen en produksjon fra den største originale transaksjonen, som i vårt eksempel er igjen 4. Vi ser også på utgangen den opprinnelig ble matchet med i denne opprinnelige transaksjonen: 1. Så delte vi den store produksjonen (4) så at en av halvdelene kan kombineres med sin opprinnelige kamp (1) for å generere den virtuelle verdien (3.4). I dette tilfellet betyr det at 4 er delt inn i 2.4 og 1.6. (Tross alt er 2,4 + 1 = 3,4.)
Nå ser CoinJoin slik ut:
3 + 2.3 + 2 + 1.4 = 3.2 + 2.4 + 1.6 + 1 + 0,5
Igjen, basert på denne CoinJoin, er den opprinnelige konfigurasjonen selvfølgelig fortsatt mulig. Det er bare det at Dave igjen mottar to utganger i stedet for en.
Dette vil se slik ut:
2,3 + 1,4 = 3,2 + 0,5
og
3 + 2 = 2.4 + 1.6 + 1
Men på toppen av det er en ny “virtuell konfigurasjon” også mulig:
3 + 2.3 = 3.2 + 1.6 + 0,5
og
2 + 1,4 = 2.4 + 1
Ikke bare samsvarer forskjellige konfigurasjoner med forskjellige innganger til forskjellige utganger, forskjellige konfigurasjoner samsvarer også med forskjellige innganger med hverandre!
Rapsvekkelser
Knapsack-blanding, basert på et enkelt triks, gir en betydelig forbedring av personvernet, spesielt sammenlignet med normale transaksjoner.
Likevel er ikke ryggsekkblanding like privat som like store mengder. Blandinger med samme mengde tillater i hovedsak maksimalt antall konfigurasjoner; nødvendigvis mer enn til og med den beste ryggsekkblandingen. Og kanskje mer spesielt, ryggsekkblanding tillater fortsatt noen sammenkoblinger av visse innganger og utganger – eller i det minste mer sannsynlige koblinger.
Faktisk, i eksemplene ovenfor, ble visse innganger og utganger matchet i begge potensielle konfigurasjoner. I variant en ble 1,3-utgangen matchet med 3 og 2 innganger på begge måter. Så selv om blockchain-analyse ikke ville avsløre hva de opprinnelige transaksjonene var, ville det fortsatt avsløre en kobling mellom 3 og 2 innganger og 1,3-utgangene. Variant to og tre tillater enda flere samsvar mellom innganger og utganger mens de kobler innganger fra hverandre.
Det er også verdt å påpeke at en ryggsekk CoinJoin for betaling krever ekstra utganger og derfor fortsatt vil koste flere avgifter enn vanlige transaksjoner eller til og med vanlige CoinJoin-transaksjoner. Det kan også kreve at selgere oppgir to adresser når de får betalt, i stedet for bare en.
Med andre ord, mens en forbedring i forhold til blanding av like store mengder når det gjelder blokkeringseffektivitet og avgifter, og en stor forbedring i forhold til vanlig transaksjon eller til og med vanlige CoinJoin-transaksjoner for personvern, kommer rugsekkblanding fremdeles med litt ekstra problemer og kostnader.
* Etter publisering av denne artikkelen ble det riktig påpekt at JoinMarket også tillater betaling via CoinJoin.
Forfatterens merknad: Det er litt mer til ryggsekkblandingsforslaget, 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 ryggsekkblanding: blanding med ulik mengde.