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 byl mix efektivní.
Byl však nazván nový směšovací protokol CashFusion, při vývoji sítě Bitcoin Cash zpochybňuje tento předpoklad. Vývojáři, kteří stojí za protokolem, tvrdí, že CashFusion nabízí soukromí prostřednictvím CoinJoins bez požadavku smíchat pouze stejné částky. Pokud je to pravda, mohlo by to drasticky změnit i to, jak si myslíme o soukromí v bitcoinech.
Pokud je to pravda …
CoinJoin
Začněme na začátku. (Nebo tuto část přeskočte, pokud víte, co je CoinJoin.)
Typická bitcoinová transakce má jeden nebo více vstupů (v podstatě jsou odesílány adresy, ze kterých jsou mince odesílány) a jeden nebo několik výstupů (v podstatě jsou zasílány adresy, na které jsou mince zasílány). Pokud má transakce více než jeden vstup, je to obvykle proto, že odesílatel použil několik kusů svých mincí (UTXO) k získání požadované částky. Pokud má transakce více než jeden výstup, je to obvykle proto, že je placeno několik lidí najednou (dávková transakce) a / nebo plátce zasílá peníze zpět na jednu ze svých vlastních adres jako změnu (protože bloky se nesčítaly) na přesnou správnou částku; často tomu tak je).
Typická transakce, jak je zde uvedeno, bohužel odhalí mnoho. Je například snadné dojít k závěru, že všechny vstupní adresy patří stejné osobě, což umožňuje shlukování adres. Transakce také ukazuje, ze kterých adres se adresy pohybují, což odhaluje stopu mincí přes blockchain. Může existovat více (jemných) rad a všechny jsou špatné pro soukromí.
Nejprve potenciální řešení tohoto problému navrhováno přispěvatelem Bitcoin Core Gregory Maxwell v roce 2013, se nazývá CoinJoin. Myšlenka CoinJoin je jednoduchá: Několik nezávislých transakcí je sloučeno do jedné velké transakce. Takže pokud dvě transakce mají každý dva vstupy a dva výstupy, je to spojeno do jedné transakce, která má čtyři vstupy a čtyři výstupy. To alespoň ruší předpoklad, že všechny vstupní adresy patří stejné osobě, a mohlo by to také pomoci prolomit stopu mincí.
Proč stejné částky
Obvykle se předpokládá, že zisky na soukromí CoinJoin, jak je popsáno výše, by však byly omezené. V mnoha případech lze částky zaslané na vstupech a částky přijaté na výstupech zmást dohromady, aby bylo možné znovu zjistit, které jednotlivé transakce šly do kombinované transakce CoinJoin..
Vezměme si například dvě transakce, jednu od Alice po Carol a jednu od Boba po Davea. Alice má dva kusy mincí v hodnotě 2,3 a 1,4 bitcoinu a chce zaplatit Carol 3,2 bitcoinu. Bob má kousky 3 a 2 bitcoiny a chce zaplatit Daveovi 4 bitcoiny.
Zjednodušeně tyto transakce vypadají takto:
2,3 + 1,4 = 3,2 + 0,5
a
3 + 2 = 4 + 1
(0,5 BTC a 1 BTC výstup se mění.)
Spojení transakcí CoinJoin by vypadalo takto:
3 + 2,3 + 2 + 1,4 = 4 + 3,2 + 1 + 0,5
Přestože byly transakce sloučeny, je triviální znovu objevit, které vstupy zaplatily, které výstupy, a tedy také které vstupy lze spojit dohromady jako patřící stejnému odesílateli. Za předpokladu, že víte, že existují dva plátci, lze částky zmást společně pouze s jednou potenciální konfigurací: původními transakcemi.
Z tohoto důvodu jsou populární řešení míchání jako ZeroLink a Whirlpool omezena na míchání stejných množství. Bez ohledu na to, jaké částky jsou vloženy do mixu jako vstupy, jsou smíšené výstupy navzájem nerozeznatelné, což znamená, že kterýkoli účastník mohl obdržet jakýkoli kus mince pevné velikosti.
Pokud jsou pevné částky nastaveny na 1 BTC, Alice, Bob, Carol a Dave’s CoinJoin vypadají takto:
3 + 2,3 + 2 + 1,4 = 1 + 1 + 1 + 1 +1 + 1 + 1 + 1 + 0,5 + 0,2
To je velké zlepšení, protože kterýkoli z bloků 1 mohl být zmaten zpět dohromady do jedné ze dvou původních transakcí. Není jasné, které z 1 BTC patří Alice, Bobovi, Carol nebo Daveovi, a dokonce ani kterému páru.
Stále to však není dokonalé, protože zbývají nerovné výstupy. Tyto výstupy, právě proto, že nemají stejné částky, lze stále propojit s konkrétními vstupy: Alice. To také znamená, že Aliceho vstupy mohou být navzájem propojeny. A pokud po několika mixech někdo spojí nerovné výstupy v další transakci, poškodí to také soukromí: propojí různé bloky se stejnou osobou. Kromě toho, pokud budou nerovné výstupy později použity v kombinaci s výstupy s pevným množstvím, tyto úniky by mohly zničit samotný počáteční proces míchání.
CashFusion
CashFusion, projekt vývojářů Bitcoin Cash Mark Lundeberg a Jonald Fyookball, se pustil do řešení problému „zbylých“ výstupů. Zpočátku to vytvořili jako doplněk k CashShuffle, což je implementace CoinShuffle pro Bitcoin Cash a míchá stejné částky. Poněkud překvapivý potenciál CashFusion by také mohl znamenat, že se stane jeho vlastním samostatným směšovacím protokolem.
Abychom pochopili tento potenciál, podívejme se na další sadu transakcí. Řekněme, že Alice chce zaplatit Carol 4 coiny a má dvě UTXO v hodnotě 2 a 3 coiny. Mezitím chce Bob zaplatit Daveovi 9 mincí a má dvě UTXO v hodnotě 7 a 8 mincí.
Zjednodušeně tyto transakce vypadají takto:
3 + 2 = 4 + 1
a
8 + 7 = 9 + 6
Spojení transakcí CoinJoin by vypadalo takto:
8 + 7 + 3 + 2 = 9 + 6 + 4 + 1
Nyní je z této transakce CoinJoin samozřejmě možné spojit dohromady původní dvě transakce. I když však víte, že existují dva plátci, je možné i několik dalších kombinací.
Například:
8 + 2 = 9 + 1
a
7 + 3 = 6 + 4
Nebo:
8 + 2 = 6 + 4
a
7 + 3 = 9 + 1
Nebo:
7 + 2 = 9
a
8 + 3 = 6 + 4 + 1
Nebo:
7 = 6 + 1
a
8 + 3 + 2 = 9 + 4
V zájmu jednoduchosti tento příklad použil pouze kulatá čísla. To umožňuje více potenciálních konfigurací, ale ve skutečnosti nebude velmi často odrážet realitu. Na druhé straně tento zjednodušený příklad použil pouze dvě původní transakce. Ve skutečnosti by CoinJoin mohl sestávat z desítek nebo dokonce stovek původních transakcí. Takže i když je zjednodušení zjednodušené, toto zjednodušení pomáhá i poškozuje potenciál vytváření více konfigurací.
CashFusion je postaven na teorii odvozené z oblasti Kombinatorika, že dostatečně velká transakce CoinJoin často (pokud ne vždy) nabídne několik různých řešení hádanky, i když jsou použity realistické částky. A protože je zahrnuto více vstupů a výstupů, lze z toho odvodit více potenciálních konfigurací. (To by mělo platit zejména v případě, že se částky pohybují na stejném hřišti – například 1 BCH – což se uživatelům CashFusion doporučuje kvůli jejich vlastnímu soukromí.)
Jelikož existuje více potenciálních řešení této hádanky, analytik blockchainu bude mít těžší čas zjistit, které řešení bylo původní konfigurací. To by mělo zlomit stopu mincí a ztížit propojení vstupů. Jako takový by měl poskytovat soukromí.
Abychom tento potenciál vylepšili, obsahuje CashFusion další trik, díky kterému je ještě obtížnější spojit dohromady původní konfiguraci: Umožňuje uživatelům semi-náhodně rozdělit jejich výstupy na několik menších výstupů. Takže místo toho, aby Alice zaplatila Carol jeden výstup 4 mincí, mohla Alice například poslat Carol výstupy 3 a 1 mince. Bob místo toho, aby zaplatil jeden výstup z 9 mincí, mohl poslat Daveovy výstupy s 5, 3 a 1 mincí.
Mezitím se uživatelům doporučuje, aby poskytli také několik vstupů, snad z předchozích mixů. To jim umožňuje konsolidovat své menší kousky do většího kusu, aniž by to bylo na blockchainu zřejmé. (Alice by například poskytla vstupy 2 + 2 + 1; Bob by poskytl vstupy 6 + 5 + 4.) Skutečnost, že sloučení nerovných zbylých částí do větších výstupů, byla původní myšlenkou a sloužila jako původ protokolu název: CashFusion.
Ale drží se předpoklad?
Chcete-li vás zklamat, pokud čtete tak daleko a hledáte konečný závěr: Tento článek neposkytne definitivní odpověď na otázku, zda předpoklady CashFusion vydrží nebo ne, nebo do jaké míry. Zdá se, že zatím neexistuje definitivní odpověď. Návrh zatím prošel relativně malým recenzním řízením, a zatímco vývojáři za CashFusion věří, že jejich řešení nabízí dostatečné soukromí, ostatní vypadají trochu skeptičtěji.
Na první pohled se zdá, že přístup CashFusion je zavádějící, protože dřívější režimy míchání nerovného množství, jako je Blockchain’s SharedCoin, byly zlomený před lety. Rozhodující rozdíl, který nyní věří Lundeberg a Fyookball, je však ten, že transakce CashFusion bude obsahovat více vstupů a výstupů než transakce SharedCoin. Podobně jako jiné neintuitivní matematické vtípky, jako je narozeninový problém, počet potenciálních konfigurací exponenciálně roste pro každý přidaný vstup a výstup, čímž se vyřeší problém, který měl SharedCoin – ačkoli Lundeberg souhlasí s tím, že k řádnému potvrzení bude zapotřebí lepších matematických důkazů.
Samotný popis CashFusion zahrnuje to, co Lundeberg sám považuje za „ubrouskovou matematiku“, jejíž mírně pokročilejší verze byla také zveřejněno jím na Redditu. Tyto odhady naznačují, že i když má pouze 10 účastníků, z nichž každý poskytuje 10 vstupů, které mají být sloučeny do jednoho výstupu (celkem 100 vstupů a 10 výstupů), počet možných konfigurací by se v průměru pohyboval v rozmezí 100 kvintilionů. (To je jedna s dvaceti nulami, nebo 10 ^ 20.) I pouhý výpočet všech těchto možností by trval docela dost času – nikdy nevadí správné obnovení původních transakcí.
V době psaní tohoto článku probíhá další výzkum; Fyookball nedávno publikoval svou vlastní analýzu v tento blogový příspěvek. Prozatím jsou Lundeberg, Fyookball a další alespoň dostatečně přesvědčeni o protokolu CashFusion, aby jej chtěli nasadit. K testování je k dispozici alfa klient softwaru CashFusion; úplné vydání se očekává během několika měsíců.
Ale ostatní nejsou tak přesvědčeni. Kritika návrhu je, že – i když číslo 10 ^ 20 (zhruba) vydrží – ne každý výstup CashFusion CoinJoin bude stejně pravděpodobně pocházet ze všech vstupů. Jinými slovy, zatímco někteří účastníci mohou získat značné soukromí, jiní by mohli získat mnohem méně soukromí ze stejné kombinace. A pro každého jednotlivého uživatele by bylo obtížné zjistit, zda právě ony získávají větší soukromí, nebo ne. (Tuto kritiku a další kritiku najdete v toto nedávné e-mailové vlákno bitcoin-dev.)
Naproti tomu míchání ve stejném množství nabízí všem účastníkům podobné soukromí a vede k maximálnímu počtu možných konfigurací. Svým způsobem směsi se stejným množstvím vedou k „dokonalému“ CashFusion CoinJoin, a jsou tedy přísně lepší – pokud je problém s nerovnou změnou ignorován.
Přestože CashFusion nikdy úplně nenahradí míchání ve stejné výši, mohlo by to jen pomoci vyřešit problém nerovných změn, jak bylo původně zamýšleno …
Poznámka autora: Návrh CashFusion obsahuje 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 stojící za CashFusion: míchání nerovného množství.
Děkujeme Markovi Lundebergovi za informace a zpětnou vazbu.
Část druhá tohoto článku se bude zabývat další technikou míchání nerovného množství Batoh.