Ačkoli Satoshi Nakamoto je bílý papír naznačuje, že ochrana soukromí byla designovým cílem bitcoinového protokolu, analýza blockchainu může často narušit soukromí uživatelů. Tohle je problém. Uživatelé bitcoinů nemusí nutně chtít, aby svět věděl, kde utrácejí peníze, co vydělávají nebo kolik vlastní, zatímco podniky možná nebudou chtít předávat podrobnosti transakcí konkurenci – abychom jmenovali několik příkladů.

Existují však řešení, jak získat zpět soukromí, jako je CoinJoin. Některá z nejpopulárnějších míchacích řešení, která jsou dnes k dispozici, používají tento trik, včetně peněženky Wasabi (která využívá ZeroLink) a peněženky Samourai (která využívá Whirlpool). V obou případech uživatelé rozsekávají své mince na stejné množství, aby je mohli navzájem míchat. Použití stejných částek je považováno za zásadní krok, aby byla kombinace efektivní.

Část jedna z této minisérie zahrnovala nový směšovací protokol ve vývoji pro Bitcoin Cash s názvem CashFusion, který zpochybňuje předpoklad, že pro úspěšnou kombinaci jsou nezbytné stejné částky.

Ale i v roce 2017, v a papír hloubkovou analýzou soukromí nerovného množství CoinJoins navrhli vědci z RWTH Aachen University a Karlsruhe Institute of Technology řešení pro získání soukromí prostřednictvím CoinJoin bez nutnosti používat stejné množství: batohové míchání.

Poznámka autora: Pokud nevíte, co je transakce CoinJoin nebo proč se pro mixování předpokládají stejné částky, měli byste si nejprve přečíst část jedné z této minisérie – nebo alespoň přečíst první dvě části tohoto článku.

Míchání versus placení

Jak bylo vysvětleno v první části této minisérie, míchání bitcoinů se stejnou částkou pravděpodobně dnes nabízí nejlepší dosažitelné soukromí na bitcoinovém blockchainu. Ale ponechává uživatelům výstupy s nestejnou změnou. Nenabízejí stejnou úroveň ochrany osobních údajů a mohou dokonce představovat riziko pro ochranu soukromí. CashFusion by mohl pomoci vyrovnat se s těmito nerovnými výstupy.

Ale je tu další problém. Požadavek na použití stejných částek brání uživatelům v provádění skutečných plateb prostřednictvím transakcí CoinJoin: Je nepravděpodobné, že by obchodník účtoval přesnou částku požadovanou v CoinJoin. Místo toho se tedy CoinJoins se stejnou částkou používají pouze k míchání *: Účastníci vkládají prostředky a získávají stejné množství prostředků zpět. To však bohužel znamená, že míchání vyžaduje další blockchainové transakce, což stojí transakční poplatky a čas.

Výzkumní pracovníci Felix Konstantin Maurer (z RWTH Aachen University), Till Neudecker a Martin Florian (oba z technologického institutu v Karlsruhe) se rozhodli tento problém vyřešit ve své práci z roku 2017 s názvem „Anonymní transakce CoinJoin s libovolnými hodnotami.„Navrhli řešení CoinJoin, které by mohlo být užitečné pro skutečné platby – to znamená, že používá nerovné částky – a přitom stále nabízí soukromí.

Pojmenoval podle batoh problém, jejich řešení se označuje jako batohové míchání.

Míchání batohu

Stejně jako CashFusion je hlavní myšlenkou mixování batohu generování transakce CoinJoin, kterou lze spojit do několika různých konfigurací potenciálních původních transakcí. Různé konfigurace by propojily různé vstupy s různými výstupy, čímž by se prolomila stopa mincí na blockchainu.

Knapsack míchání toho dosahuje tím, že původní transakce z původních transakcí rozřezá na menší výstupy pro transakci CoinJoin. Kromě toho používá relativně jednoduché triky k zajištění toho, že výsledkem menších výstupů je několik možných konfigurací.

Papír Maurer, Neudecker a Florian obsahuje tři varianty míchání batohu. První varianta je nejobsáhlejší v samotném bílém papíře. Druhá a třetí verze jsou si docela podobné, přičemž třetí verze je opravdu nadřazenou verzí druhé verze. (Autoři článku přišli s třetí verzí až v pozdní fázi psaní článku; jinak by pravděpodobně dostalo ve studii významnější místo.)

Podívejme se na různé varianty.

Varianta jedna

Abychom vysvětlili první variantu míchání batohu, vezměme si příklad CoinJoin z prvního článku této minisérie. Alice chce zaplatit Carol 3,2 mince a má dva vstupy v hodnotě 2,3, respektive 1,4 mince. Mezitím chce Bob zaplatit 4 mince Daveovi a má dva vstupy v hodnotě 3 a 2 mince.

Zjednodušeně tyto transakce vypadají takto:

2,3 + 1,4 = 3,2 + 0,5

a

3 + 2 = 4 + 1

(Výstupy 0,5 BTC a 1 BTC se mění.)

Spojení transakcí CoinJoin by pak vypadalo takto:

3 + 2,3 + 2 + 1,4 = 4 + 3,2 + 1 + 0,5

Jak bylo uvedeno v předchozím článku, transakce byly sloučeny, ale za předpokladu, že víte, že existují dva plátci, lze částky zmást dohromady pouze v jedné konfiguraci: původní transakce. Jako takové je triviální znovu objevit, které vstupy platí, které výstupy, což překonává smysl vytváření CoinJoin.

Míchání batohu to mění. Stručně řečeno, používá rozdíl hodnot mezi dvěma původními transakcemi k rozdělení původního výstupu z největší transakce na menší kousky. Tím se alespoň zajistí, že existují dvě konfigurace, kde by většina výstupů mohla být spojena s jakýmkoli vstupem.

Podívejme se na tento krok za krokem. Nejprve se sečte celková částka výstupů na transakci. U transakce Alice a Carol je to 2,3 + 1,4 = 3,7. Pro transakci Boba a Davea je to 3 + 2 = 5. Bob a Daveova transakce jsou největší.

Dále se vypočítá rozdíl mezi těmito dvěma: 5 – 3,7 = 1,3. Poté se tento rozdíl odečte od největší transakce. Bob a Dave’s jsou největší transakcí a 4 výstupy rozdělíme, takže: 4 – 1,3 = 2,7.

Čtyři výstupy z největší transakce jsou tedy v rozdělení CoinJoin na 1,3 a 2,7.

Tentokrát CoinJoin vypadá takto:

3 + 2,3 + 2 + 1,4 = 3,2 + 2.7 + 1.3 + 1 + 0,5

Nyní se vracíme k záhadám…

Původní konfigurace je samozřejmě stále možná. Je to jen to, že Dave nyní přijímá dva výstupy místo jednoho.

Vypadá to takto:

2,3 + 1,4 = 3,2 + 0,5

a

3 + 2 = 2.7 + 1.3 + 1

Ale navíc je nyní možná zcela nová konfigurace:

2,3 + 1,4 = 2.7 + 1

a

3 + 2 = 3.2 + 1.3 + 0,5

Výsledkem je, že analytici blockchainu již nemohou s jistotou propojit výstupy 3,2, 2,7, 1 nebo 0,5 s žádným vstupem! Požehnáním pro soukromí, přestože transakce CoinJoin nevyužila stejné částky.

Chcete-li do mixu přidat novou transakci, hodnota všech předchozích transakcí (jinak řečeno: existující CoinJoin) se sčítá, jako by to byla jedna transakce. Poté, stejně jako poprvé, se k rozdělení výstupu použije hodnotový rozdíl mezi těmito předchozími transakcemi a novou transakcí. A tak dále u další transakce a dalších transakcí po ní.

Varianty dva a tři

Zatímco varianta jednoho batohového mixování dělá dobrou práci při odpojování většiny výstupů z některého ze vstupů, samotné vstupy lze stále propojit s jinými vstupy. Tyto sady jsou stejné pro obě konfigurace. To není ideální ani pro soukromí.

Varianty mixování batohu dva a tři jsou speciálně navrženy tak, aby odpojily vstupy. Varianta dva však vyžaduje, aby se všichni účastníci CoinJoin navzájem učili vstupy a výstupy, což znamená, že ve skutečnosti nenabízí mnoho soukromí: Varianta tři to opravuje. Přesto je pro účely článku (který se zaměřuje na blockchainové soukromí) rozdíl dostatečně malý, aby pokryl obě varianty najednou.

Bereme stejné příklady jako výše. Alice chce zaplatit Carol 3,2 mince a Bob chce zaplatit Dave 4 mince.

Tak:

2,3 + 1,4 = 3,2 + 0,5

a

3 + 2 = 4 + 1

U variant dva a tři se generuje „virtuální transakce“. Tato virtuální transakce jinak neexistuje, ale analytici blockchainu budou podvedeni, aby si mysleli, že by mohla.

K vytvoření této virtuální transakce je odebrán jeden vstup z každé původní transakce. Poté se hodnota těchto vstupů sečte.

Například takto:

1,4 + 2 = 3,4

Hodnota našich vybraných vstupů je 3,4. Proto musí být hodnota výstupů virtuální transakce také 3,4.

Toho je snadné dosáhnout. Znovu vezmeme výstup z největší původní transakce, což je v našem příkladu opět 4. Podíváme se také na výstup, s nímž byla v této původní transakci původně spojena: 1. Poté rozdělíme velký výstup (4), takže že jedna z polovin může být kombinována s její původní shodou (1) pro vygenerování virtuální hodnoty (3.4). V tomto případě to znamená, že 4 je rozděleno na 2,4 a 1,6. (Koneckonců, 2,4 + 1 = 3,4.)

CoinJoin nyní vypadá takto:

3 + 2,3 + 2 + 1,4 = 3,2 + 2.4 + 1.6 + 1 + 0,5

Opět platí, že na základě tohoto CoinJoin je samozřejmě stále možná původní konfigurace. Je to jen to, že Dave opět dostává dva výstupy místo jednoho.

Vypadá to takto:

2,3 + 1,4 = 3,2 + 0,5

a

3 + 2 = 2.4 + 1.6 + 1

Kromě toho je však také možná nová „virtuální konfigurace“:

3 + 2,3 = 3,2 + 1.6 + 0,5

a

2 + 1,4 = 2.4 + 1

Nejen, že různé konfigurace odpovídají různým vstupům s různými výstupy, různé konfigurace také navzájem odpovídají různým vstupům!

Slabé stránky batohu

Míchání batohu, založené na jednoduchém triku, nabízí výrazné zlepšení soukromí, zejména ve srovnání s prováděním běžných transakcí.

Míchání batohu přesto není tak soukromé jako míchání stejného množství. Směsi se stejným množstvím v zásadě umožňují maximální množství konfigurací; nutně víc než ta nejlepší batohová směs. A možná ještě pozoruhodnější je, že míchání batohu stále umožňuje určité propojení určitých vstupů a výstupů – nebo alespoň pravděpodobnějších vazeb.

Ve výše uvedených příkladech byly určité vstupy a výstupy porovnány v obou potenciálních konfiguracích. V první variantě byl výstup 1,3 sladěn se vstupy 3 a 2 v obou směrech. Ačkoli analýza blockchainu neodhalí, jaké byly původní transakce, stále odhalí souvislost mezi 3 a 2 vstupy a 1,3 výstupy. Varianty dva a tři, zatímco oddělují vstupy od sebe navzájem, umožňují ještě více shod mezi vstupy a výstupy.

Za zmínku stojí také to, že batoh CoinJoin pro platbu vyžaduje další výstupy, a proto by stále stál více poplatků než běžné transakce nebo dokonce běžné transakce CoinJoin. Může také vyžadovat, aby obchodníci při placení poskytli dvě adresy, nikoli pouze jednu.

Jinými slovy, zatímco zlepšení oproti rovnoměrnému míchání, pokud jde o efektivitu a poplatky blockspace, a velké zlepšení oproti běžným transakcím nebo dokonce běžným transakcím CoinJoin pro soukromí, míchání batohu stále přichází s trochou potíží a nákladů navíc.

* Po zveřejnění tohoto článku bylo správně zdůrazněno, že JoinMarket umožňuje také platby prostřednictvím CoinJoin.

Poznámka autora: Návrh míchání batohu má něco víc, například to, jak je vytvořena transakce CoinJoin. Existuje také několik jemnějších rizik a kompromisů, pokud jde o soukromí, například způsob, jakým uživatelé zacházejí se svými mincemi před a po mixu. Pro jednoduchost a čitelnost se tento článek zaměřuje pouze na ústřední a pravděpodobně nejzajímavější myšlenku míchání batohu: míchání v nerovnoměrném množství.