Ä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.
Del ett av detta miniserie täckte ett nytt mixningsprotokoll under utveckling för Bitcoin Cash som heter CashFusion, vilket utmanar antagandet att lika stora belopp är nödvändiga för en framgångsrik mix.
Men även under 2023, i en papper analysera integriteten för icke-lika mycket CoinJoins på djupet, forskare från RWTH Aachen University och Karlsruhe Institute of Technology föreslog en lösning för att få integritet genom CoinJoin utan att behöva använda lika stora mängder: ryggsäckblandning.
Författarens anmärkning: Om du inte vet vad en CoinJoin-transaktion är eller varför lika stora belopp antas vara nödvändiga för blandning, bör du först läsa del en av detta miniserie – eller åtminstone läsa de två första avsnitten i den artikel.
Blandning kontra betalning
Som förklaras i del en av denna miniserie, erbjuder lika mycket bitcoin-blandning förmodligen den bästa uppnåeliga integriteten på Bitcoin blockchain idag. Men det gör att användare lämnar utgångar med ojämn förändring. Dessa erbjuder inte samma nivå av integritet och kan till och med utgöra en integritetsrisk. CashFusion kan hjälpa till att hantera dessa ojämna resultat.
Men det finns ett annat problem. Kravet på att använda lika stora belopp hindrar användare från att göra faktiska betalningar genom CoinJoin-transaktioner: Det är osannolikt att en handlare skulle ta ut det exakta belopp som krävs i CoinJoin. Så istället används lika mycket CoinJoins bara för att blanda *: Deltagarna lägger in pengar och får tillbaka samma mängd pengar. Tyvärr betyder det att blandning kräver extra blockchain-transaktioner, vilket kostar transaktionsavgifter och tid.
Forskarna Felix Konstantin Maurer (från RWTH Aachen University), Till Neudecker och Martin Florian (båda från Karlsruhe Institute of Technology) satte sig för att lösa detta problem i sin uppsats 2023 med titeln ”Anonyma myntJoin-transaktioner med godtyckliga värden.”De föreslog en CoinJoin-lösning som kan vara användbar för faktiska betalningar – det vill säga den använder olika belopp – samtidigt som de fortfarande erbjuder integritet.
Uppkallad efter ryggsäck problem, deras lösning kallas ryggsäckblandning.
Blandning av ryggsäck
Liksom CashFusion är kärnidén bakom ryggsäckblandning att generera en CoinJoin-transaktion som kan förbryllas i flera olika konfigurationer av potentiella originaltransaktioner. Olika konfigurationer skulle länka olika ingångar till olika utgångar och därigenom bryta spåret av mynt på blockchain.
Knapsack-mixning uppnår detta genom att skära ut originalutmatningarna från de ursprungliga transaktionerna till mindre utgångar för CoinJoin-transaktionen. Dessutom använder den relativt enkla knep för att säkerställa att de mindre utgångarna resulterar i att flera potentiella konfigurationer är möjliga.
Maurer, Neudecker och Florians tidning innehåller tre varianter av ryggsäckblandning. Den första varianten är den mest utplånade i själva vitboken. Den andra och tredje versionen är ganska lika, där den tredje versionen verkligen är en överlägsen version av den andra versionen. (Författarna till tidningen kom bara fram till den tredje versionen i ett sent skede av att skriva papperet; det skulle antagligen ha fått en mer framträdande plats i studien annars.)
Låt oss titta på de olika varianterna.
Variant One
För att förklara den första varianten av ryggsäckblandning, låt oss ta ett CoinJoin-exempel från den första artikeln i denna miniserie. Alice vill betala Carol 3,2 mynt och har två ingångar till ett värde av 2,3 respektive 1,4 mynt. Under tiden vill Bob betala 4 mynt till Dave och har två ingångar värda 3 respektive 2 mynt.
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.)
Sammanfogade skulle CoinJoin-transaktionen då se ut så:
3 + 2,3 + 2 + 1,4 = 4 + 3,2 + 1 + 0,5
Som påpekades i föregående artikel slogs transaktionerna samman, men förutsatt att du vet att det finns två betalare kan beloppen förbryllas tillsammans i endast en konfiguration: de ursprungliga transaktionerna. Som sådan är det trivialt att återupptäcka vilka ingångar som betalade vilka utgångar, vilket besegrar poängen att skapa ett CoinJoin.
Blandning av ryggsäckar ändrar detta. Kort sagt använder den värdeskillnaden mellan de två originaltransaktionerna för att dela en originalutmatning från den största transaktionen i mindre bitar. Detta garanterar åtminstone att det finns två konfigurationer, där de flesta utgångar kan kopplas till vilken ingång som helst.
Låt oss titta på det här steg för steg. För det första läggs det totala beloppet på utgångarna samman per transaktion. För Alice och Carols transaktion är detta 2,3 + 1,4 = 3,7. För Bob och Daves transaktion är detta 3 + 2 = 5. Bob och Daves transaktion är den största.
Därefter beräknas skillnaden mellan de två: 5 – 3,7 = 1,3. Sedan subtraheras denna skillnad från den största transaktionen. Bob och Daves är den största transaktionen, och vi delar upp 4-utdata, så: 4 – 1,3 = 2,7.
Följaktligen är de fyra resultaten från den största transaktionen i CoinJoin uppdelad i 1.3 och 2.7.
Den här gången ser CoinJoin så ut:
3 + 2,3 + 2 + 1,4 = 3,2 + 2.7 + 1.3 + 1 + 0,5
Nu återgår vi till förbryllande …
Naturligtvis är den ursprungliga konfigurationen fortfarande möjlig. Det är bara att Dave nu får två utgångar istället för en.
Det här skulle se ut så:
2,3 + 1,4 = 3,2 + 0,5
och
3 + 2 = 2.7 + 1.3 + 1
Men utöver det är nu en helt ny konfiguration möjlig:
2,3 + 1,4 = 2.7 + 1
och
3 + 2 = 3,2 + 1.3 + 0,5
Som ett resultat kan blockchain-analytiker inte längre länka utgångarna 3.2, 2.7, 1 eller 0.5 till någon ingång med säkerhet! En välsignelse för integritet, även om CoinJoin-transaktionen inte använde lika stora mängder.
För att lägga till en ny transaktion i mixen, kommer värdet av alla tidigare transaktioner (uttryckt annorlunda: befintlig CoinJoin) att läggas till som om det vore en transaktion. Därefter, som första gången, skulle värdeskillnaden mellan dessa tidigare transaktioner och den nya transaktionen användas för att dela en utdata. Och så vidare för nästa transaktion och eventuella ytterligare transaktioner efter det.
Varianter två och tre
Medan variant 1 av ryggsäckblandning gör ett bra jobb med att avmarkera de flesta utgångarna från någon av ingångarna, kan själva ingångarna fortfarande kopplas till andra ingångar. Dessa uppsättningar är desamma för båda konfigurationerna. Det här är inte heller idealt för integritet.
Blandningsvarianter två och tre för ryggsäck är särskilt utformade för att koppla bort ingångarna. Variant två kräver dock att alla deltagare i CoinJoin lär sig varandras ingångar och utgångar, vilket innebär att det faktiskt inte ger mycket integritet: Variant tre fixar detta. Ändå, i syfte med artikeln (som fokuserar på blockchain-integritet) är skillnaden tillräckligt liten för att täcka båda varianterna på en gång.
Vi tar samma exempel som ovan. Alice vill betala Carol 3,2 mynt och Bob vill betala Dave 4 mynt.
Så:
2,3 + 1,4 = 3,2 + 0,5
och
3 + 2 = 4 + 1
För varianterna två och tre genereras en ”virtuell transaktion”. Denna virtuella transaktion finns annars inte, men blockchain-analytiker kommer att luras att tro att det kan.
För att skapa den här virtuella transaktionen tas en ingång från varje originaltransaktion. Därefter adderas värdet på dessa ingångar.
Till exempel som så:
1,4 + 2 = 3,4
Värdet på våra valda ingångar är 3,4. Därför måste värdet på utmatningarna från den virtuella transaktionen också vara 3,4.
Detta är lätt att åstadkomma. Vi tar återigen en produktion från den största originaltransaktionen, som i vårt exempel är återigen 4. Vi tittar också på den produktion den ursprungligen matchades med i den här ursprungliga transaktionen: 1. Sedan delade vi den stora produktionen (4) så att en av halvorna kan kombineras med sin ursprungliga matchning (1) för att generera det virtuella värdet (3.4). I det här fallet betyder det att 4 är uppdelad i 2.4 och 1.6. (När allt kommer omkring 2,4 + 1 = 3,4.)
Nu ser CoinJoin ut så här:
3 + 2,3 + 2 + 1,4 = 3,2 + 2.4 + 1.6 + 1 + 0,5
Återigen, baserat på denna CoinJoin, är den ursprungliga konfigurationen naturligtvis fortfarande möjlig. Det är bara att Dave återigen får två utgångar istället för en.
Det här skulle se ut så:
2,3 + 1,4 = 3,2 + 0,5
och
3 + 2 = 2.4 + 1.6 + 1
Men utöver det är en ny “virtuell konfiguration” också möjlig:
3 + 2,3 = 3,2 + 1.6 + 0,5
och
2 + 1,4 = 2.4 + 1
Olika konfigurationer matchar inte bara olika ingångar till olika utgångar, olika konfigurationer matchar också olika ingångar med varandra!
Knapsack svagheter
Knapsack-mixning, baserat på ett enkelt trick, erbjuder en betydande integritetsförbättring, särskilt jämfört med att göra normala transaktioner.
Ändå är blandning av ryggsäck inte riktigt lika privat som lika stora blandningar. Blandningar med lika stor mängd möjliggör i huvudsak en maximal mängd konfigurationer; nödvändigtvis mer än till och med den bästa ryggsäckmixen. Och kanske framför allt, blandning av ryggsäck möjliggör fortfarande en viss koppling av vissa in- och utgångar – eller åtminstone mer sannolika länkar.
I exemplen ovan matchades faktiskt vissa in- och utgångar i båda potentiella konfigurationerna. I variant ett matchades 1,3-utgången med 3 och 2 ingångar på något sätt. Så medan blockchain-analys inte skulle avslöja vad de ursprungliga transaktionerna var, skulle det fortfarande avslöja en länk mellan 3 och 2 ingångarna och 1,3-utgångarna. Varianterna två och tre, samtidigt som ingångarna från varandra delinkas, möjliggör ännu fler matchningar mellan ingångar och utgångar.
Det är också värt att påpeka att en ryggsäck CoinJoin för betalning kräver extra utdata och därför därför fortfarande skulle kosta mer avgifter än vanliga transaktioner eller till och med vanliga CoinJoin-transaktioner. Det kan också kräva att handlare anger två adresser när de får betalt, istället för bara en.
Med andra ord, medan en förbättring jämfört med lika stora blandningar när det gäller blockpace-effektivitet och avgifter, och en stor förbättring jämfört med vanlig transaktion eller till och med vanliga CoinJoin-transaktioner för sekretess, kommer ryggsäckblandning fortfarande med lite extra krångel och kostnad.
* Efter publiceringen av denna artikel påpekades det korrekt att JoinMarket också möjliggör betalningar via CoinJoin.
Författarens anmärkning: Det finns lite mer i förslaget om blandning av ryggsäck, 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 ryggsäckblandning: blandning med ojämn mängd.