Selvom Satoshi Nakamoto’s hvidt papir antyder, at privatlivets fred var et designmål for Bitcoin-protokollen, blockchain-analyse kan ofte bryde brugernes privatliv. Dette er et problem. Bitcoin-brugere vil måske ikke nødvendigvis have verden til at vide, hvor de bruger deres penge, hvad de tjener, eller hvor meget de ejer, mens virksomheder måske ikke ønsker at lække transaktionsoplysninger til konkurrenterne – for at nævne nogle eksempler.
Men der er løsninger til at genvinde privatlivets fred, som CoinJoin. Nogle af de mest populære blandeløsninger, der er tilgængelige i dag, bruger dette trick, herunder Wasabi Wallet (som udnytter ZeroLink) og Samourai Wallet (som udnytter Whirlpool). I begge tilfælde hugger brugerne deres mønter i lige store beløb for at blande dem med hinanden. Brug af lige store mængder betragtes som et afgørende trin for, at blandingen kan være effektiv.
Del en af denne miniserie dækkede en ny blandingsprotokol under udvikling for Bitcoin Cash kaldet CashFusion, som udfordrer antagelsen om, at lige store beløb er nødvendige for en vellykket blanding.
Men selv i 2017, i en papir analysere privatlivets fred for ikke-lige store CoinJoins i dybden, forskere fra RWTH Aachen University og Karlsruhe Institute of Technology foreslog en løsning for at få privatliv gennem CoinJoin uden behov for at bruge lige store mængder: rygsækblanding.
Forfatterens bemærkning: Hvis du ikke ved, hvad en CoinJoin-transaktion er, eller hvorfor det antages, at der er brug for lige store beløb til blanding, skal du først læse del et af denne miniserie – eller i det mindste læse de to første sektioner i den artikel.
Blanding versus betaling
Som forklaret i del en af denne miniserie tilbyder bitcoin-blanding med lige store mængder sandsynligvis det bedst mulige privatliv på Bitcoin blockchain i dag. Men det efterlader brugere med output med ulige ændringer. Disse tilbyder ikke det samme niveau af privatlivets fred og kan endda udgøre en privatlivsrisiko. CashFusion kan hjælpe med at håndtere disse ulige output.
Men der er et andet problem. Kravet om at bruge lige store beløb forhindrer brugere i at foretage faktiske betalinger gennem CoinJoin-transaktioner: Det er usandsynligt, at en købmand vil opkræve det nøjagtige beløb, der kræves i CoinJoin. Så i stedet bruges CoinJoins med lige store beløb kun til blanding *: Deltagerne lægger penge ind og får den samme mængde penge tilbage. Desværre betyder det, at blanding kræver ekstra blockchain-transaktioner, som koster transaktionsgebyrer og tid.
Forskerne Felix Konstantin Maurer (fra RWTH Aachen Universitet), Till Neudecker og Martin Florian (begge fra Karlsruhe Institute of Technology) satte sig for at løse dette problem i deres papir fra 2017 med titlen “Anonyme mønttransaktioner med vilkårlige værdier.”De foreslog en CoinJoin-løsning, der kunne være nyttig til faktiske betalinger – det vil sige, den bruger ulige beløb – mens de stadig tilbyder privatliv.
Opkaldt efter rygsæk problem, deres opløsning kaldes rygsækblanding.
Rygsækblanding
Ligesom CashFusion er kerneideen bag knapsack-blanding at generere en CoinJoin-transaktion, der kan forvirres sammen i flere forskellige konfigurationer af potentielle originale transaktioner. Forskellige konfigurationer ville forbinde forskellige input til forskellige output og derved bryde sporet af mønter på blockchain.
Knapsack-blanding opnår dette ved at skære de originale output fra de originale transaktioner i mindre output til CoinJoin-transaktionen. Desuden bruger den relativt enkle tricks for at sikre, at de mindre output resulterer i, at flere potentielle konfigurationer er mulige.
Maurer, Neudecker og Florians papir indeholder tre varianter af rygsækblanding. Den første variant er den mest udfasede i selve hvidbogen. Den anden og tredje version er ret ens, hvor den tredje version virkelig er en overlegen version af den anden version. (Forfatterne af papiret kom først med den tredje version i en sen fase med at skrive papiret; det ville sandsynligvis have fået en mere fremtrædende plads i undersøgelsen ellers.)
Lad os se på de forskellige varianter.
Variant en
For at forklare den første variant af rygsækblanding, lad os tage et CoinJoin-eksempel fra den første artikel i denne miniserie. Alice vil betale Carol 3,2 mønter og har to input til henholdsvis 2,3 og 1,4 mønter. I mellemtiden ønsker Bob at betale Dave 4 mønter og har to input til henholdsvis 3 og 2 mønter.
Forenklet ser disse transaktioner sådan ud:
2,3 + 1,4 = 3,2 + 0,5
og
3 + 2 = 4 + 1
(0,5 BTC- og 1 BTC-udgangene ændres.)
Fusioneret sammen ville CoinJoin-transaktionen så se sådan ud:
3 + 2,3 + 2 + 1,4 = 4 + 3,2 + 1 + 0,5
Som påpeget i den foregående artikel, blev transaktionerne flettet, men forudsat at du ved, at der er to betalere, kan beløbene forvirres sammen i kun en konfiguration: de originale transaktioner. Som sådan er det trivielt at genopdage, hvilke input der betales hvilke output, der besejrer pointen med at oprette en CoinJoin.
Blanding af rygsæk ændrer dette. Kort sagt bruger den værdiforskellen mellem de to originale transaktioner til at opdele en original output fra den største transaktion i mindre stykker. Dette sikrer i det mindste, at der er to konfigurationer, hvor de fleste output kan være knyttet til enhver input.
Lad os se på dette trin for trin. For det første tilføjes det samlede beløb af output pr. Transaktion. For Alice og Carol’s transaktion er dette 2,3 + 1,4 = 3,7. For Bob og Daves transaktion er dette 3 + 2 = 5. Bob og Daves transaktion er den største.
Dernæst beregnes forskellen mellem de to: 5 – 3,7 = 1,3. Derefter trækkes denne forskel fra den største transaktion. Bob og Daves er den største transaktion, og vi deler 4 output, så: 4 – 1.3 = 2.7.
Derfor er de fire output fra den største transaktion i CoinJoin opdelt i 1.3 og 2.7.
Denne gang ser CoinJoin sådan ud:
3 + 2,3 + 2 + 1,4 = 3,2 + 2.7 + 1.3 + 1 + 0,5
Nu vender vi tilbage til forvirrende …
Naturligvis er den oprindelige konfiguration stadig mulig. Det er bare, at Dave nu modtager to output i stedet for en.
Dette ville se sådan ud:
2,3 + 1,4 = 3,2 + 0,5
og
3 + 2 = 2.7 + 1.3 + 1
Men derudover er en helt ny konfiguration nu mulig:
2,3 + 1,4 = 2.7 + 1
og
3 + 2 = 3,2 + 1.3 + 0,5
Som et resultat kan blockchain-analytikere ikke længere linke output 3.2, 2.7, 1 eller 0.5 til ethvert input med sikkerhed! En velsignelse for privatlivets fred, selvom CoinJoin-transaktionen ikke brugte lige store beløb.
For at tilføje en ny transaktion til blandingen tilføjes værdien af alle tidligere transaktioner (udtrykt forskelligt: den eksisterende CoinJoin) som om det var en transaktion. Så som første gang ville værdiforskellen mellem disse tidligere transaktioner og den nye transaktion blive brugt til at opdele en output. Og så videre til den næste transaktion og enhver yderligere transaktion efter det.
Varianter to og tre
Mens variant 1 af rygsækblanding gør et godt stykke arbejde med at afkoble de fleste output fra nogen af indgangene, kan selve indgangene stadig være knyttet til andre indgange. Disse sæt er de samme for begge konfigurationer. Dette er heller ikke ideelt til privatlivets fred.
Blandingsvarianter to og tre til rygsæk er specielt designet til at fjerne forbindelsen mellem input. Variant to kræver dog, at alle deltagere i CoinJoin lærer hinandens input og output, hvilket betyder, at det faktisk ikke tilbyder meget privatliv: Variant tre løser dette. Men med henblik på artiklen (som fokuserer på blockchain-privatliv) er forskellen lille nok til at dække begge varianter på én gang.
Vi tager de samme eksempler som ovenfor. Alice vil betale Carol 3,2 mønter, og Bob vil betale Dave 4 mønter.
Så:
2,3 + 1,4 = 3,2 + 0,5
og
3 + 2 = 4 + 1
For varianter to og tre genereres en “virtuel transaktion”. Denne virtuelle transaktion eksisterer ellers ikke, men blockchain-analytikere vil blive narret til at tro, at det måske.
For at oprette denne virtuelle transaktion tages et input fra hver originale transaktion. Derefter tilføjes værdien af disse input.
For eksempel som sådan:
1,4 + 2 = 3,4
Værdien af vores valgte input er 3,4. Derfor skal værdien af output fra den virtuelle transaktion også være 3.4.
Dette er let at opnå. Vi tager endnu en gang en output fra den største originale transaktion, som i vores eksempel er igen 4. Vi ser også på den output, den oprindeligt blev matchet med i denne originale transaktion: 1. Derefter delte vi den store output (4) så at en af halvdelene kan kombineres med dens oprindelige match (1) for at generere den virtuelle værdi (3.4). I dette tilfælde betyder det, at 4 er opdelt i 2.4 og 1.6. (Når alt kommer til alt, 2,4 + 1 = 3,4.)
Nu ser CoinJoin sådan ud:
3 + 2,3 + 2 + 1,4 = 3,2 + 2.4 + 1.6 + 1 + 0,5
Igen, baseret på denne CoinJoin, er den oprindelige konfiguration naturligvis stadig mulig. Det er bare, at Dave igen modtager to output i stedet for en.
Dette ville se sådan ud:
2,3 + 1,4 = 3,2 + 0,5
og
3 + 2 = 2.4 + 1.6 + 1
Men derudover er en ny “virtuel konfiguration” også mulig:
3 + 2,3 = 3,2 + 1.6 + 0,5
og
2 + 1,4 = 2.4 + 1
Ikke kun matcher forskellige konfigurationer forskellige indgange til forskellige udgange, men forskellige konfigurationer matcher også forskellige indgange med hinanden!
Knapsack svagheder
Rygsækblanding, baseret på et simpelt trick, giver en betydelig forbedring af privatlivets fred, især sammenlignet med normale transaktioner.
Stadig blanding af rygsæk er ikke helt så privat som blandinger med samme mængde. Blandinger med lige store mængder muliggør i det væsentlige en maksimal mængde konfigurationer; nødvendigvis mere end selv den bedste rygsækmix. Og måske mere især giver blanding af rygsæk stadig mulighed for en vis sammenkædning af visse indgange og udgange – eller i det mindste mere sandsynlige forbindelser.
Faktisk blev der i eksemplerne ovenfor matchet visse input og output i begge potentielle konfigurationer. I variant en blev 1,3 output matchet med 3 og 2 indgange på begge måder. Så mens blockchain-analyse ikke afslørede, hvad de oprindelige transaktioner var, ville det stadig afsløre et link mellem 3 og 2 input og 1,3 output. Varianter to og tre giver mulighed for endnu flere matches mellem indgange og udgange, mens de afbryder indgangene fra hinanden.
Det er også værd at påpege, at en rygsæk CoinJoin til betaling kræver ekstra output og derfor stadig vil koste flere gebyrer end almindelige transaktioner eller endda almindelige CoinJoin-transaktioner. Det kan også kræve, at købmænd angiver to adresser, når de betales, i stedet for kun en.
Med andre ord, mens en forbedring i forhold til blanding af lige store beløb, når det kommer til blockspace-effektivitet og gebyrer, og en stor forbedring i forhold til almindelig transaktion eller endda regelmæssige CoinJoin-transaktioner for privatlivets fred, kommer der stadig lidt ekstra besvær og omkostninger med rygsækblanding..
* Efter offentliggørelsen af denne artikel blev det korrekt påpeget, at JoinMarket også tillader betalinger via CoinJoin.
Forfatterens bemærkning: Der er lidt mere til rygsækblandingsforslaget, som hvordan CoinJoin-transaktionen er konstrueret. Der er også flere subtile risici og kompromiser, når det kommer til privatlivets fred, som hvordan brugerne håndterer deres mønter før og efter blandingen. For enkelhed og læsbarhed fokuserer denne artikel kun på den centrale og uden tvivl mest interessante idé bag rygsækblanding: blanding med ulige beløb.