Čeprav Satoshi Nakamoto bel papir nakazuje, da je bila zasebnost oblikovalski cilj protokola Bitcoin, analiza veriženja blokov pogosto lahko zlomi zasebnost uporabnikov. To je težava. Uporabniki Bitcoinov morda ne bodo želeli, da svet ve, kje trošijo svoj denar, kaj zaslužijo ali koliko imajo v lasti, medtem ko podjetja morda ne bodo želela razkrivati podrobnosti transakcij konkurentom – če naštejemo nekaj primerov.
Vendar obstajajo rešitve za ponovno pridobitev zasebnosti, kot je CoinJoin. Nekatere najbolj priljubljene mešalne rešitve, ki so danes na voljo, uporabljajo ta trik, vključno z denarnico Wasabi (ki uporablja ZeroLink) in denarnico Samourai (ki uporablja Whirlpool). V obeh primerih uporabniki sekajo svoje kovance v enake količine, da jih med seboj pomešajo. Uporaba enakih količin je ključni korak za učinkovito mešanje.
Vendar je bil imenovan nov mešalni protokol CashFusion, pri razvoju omrežja Bitcoin Cash izpodbija to predpostavko. Razvijalci protokola trdijo, da CashFusion ponuja zasebnost prek CoinJoins brez zahteve po mešanju le enakih količin. Če je res, bi to lahko drastično spremenilo naše razmišljanje tudi o zasebnosti v Bitcoinu.
Če je res …
CoinJoin
Začnimo na začetku. (Ali pa preskočite ta del, če veste, kaj je CoinJoin.)
Tipična transakcija bitcoinov ima enega ali več vhodov (v bistvu so naslovi, s katerih se pošiljajo kovanci) in enega ali več izhodov (v bistvu naslovi, na katere se pošiljajo kovanci). Če ima transakcija več kot en vhod, je to običajno zato, ker je pošiljatelj uporabil več kosov svojih kovancev (UTXO), da je prišel do zahtevanega zneska. Če ima transakcija več kot en izhod, je to običajno zato, ker se plača več ljudi hkrati (paketna transakcija) in / ali plačnik kot spremembo pošlje denar nazaj na enega od svojih naslovov (ker se deli niso seštevali) do natančno pravega zneska; to se pogosto zgodi).
Žal tipična transakcija, kot je opisana tukaj, razkriva marsikaj. Na primer, enostavno je sklepati, da vsi vhodni naslovi pripadajo isti osebi, kar omogoča združevanje naslovov v skupine. Transakcija tudi prikazuje, s katerih naslovov se na katere naslove premikajo kovanci, kar razkriva sled kovancev nad verigo blokov. Lahko je več (subtilnih) namigov in vsi škodujejo zasebnosti.
Najprej možna rešitev tega problema predlagano avtorja Bitcoin Coreja Gregoryja Maxwella leta 2013, se imenuje CoinJoin. Zamisel za CoinJoin je preprosta: več neodvisnih transakcij se združi v eno veliko transakcijo. Torej, če imata dve transakciji dva vhoda in dva izhoda, se to združi v eno samo transakcijo, ki ima štiri vhode in štiri izhode. To vsaj razbije domnevo, da vsi vhodni naslovi pripadajo isti osebi in bi lahko tudi pomagal prebiti sled kovancev.
Zakaj enaki zneski
Običajno se domneva, da bi bili koristi od zasebnosti CoinJoin, kot je opisano zgoraj, omejeni. V mnogih primerih se lahko zneski, poslani v vhodih, in zneski, prejeti v izhodih, zmedejo, da se znova odkrije, katere posamezne transakcije so šle v kombinirano transakcijo CoinJoin.
Na primer, vzemimo dve transakciji, eno od Alice do Carol in eno od Boba do Davea. Alice ima dva kovanca v vrednosti 2,3 in 1,4 bitcoina, Carol pa želi plačati 3,2 bitcoina. Bob ima koščke 3 in 2 bitcoina, Daveu pa želi plačati 4 bitcoine.
Poenostavljeno so te transakcije videti takole:
2,3 + 1,4 = 3,2 + 0,5
in
3 + 2 = 4 + 1
(Izhoda 0,5 BTC in 1 BTC se spremenita.)
Transakcija CoinJoin, združena skupaj, bi izgledala tako:
3 + 2,3 + 2 + 1,4 = 4 + 3,2 + 1 + 0,5
Čeprav so bile transakcije združene, je nepomembno znova odkriti, kateri vložki so plačali katere izhode, in zato tudi, katere vložke je mogoče ujemati skupaj, da pripadajo istemu pošiljatelju. Ob predpostavki, da veste, da obstajata dva plačnika, lahko zneske zmedete samo z eno potencialno konfiguracijo: prvotne transakcije.
Iz tega razloga so priljubljene rešitve za mešanje, kot sta ZeroLink in Whirlpool, omejene na mešanje enakih količin. Ne glede na to, kakšni zneski se dajo v mešanico kot vložki, se mešani izhodi med seboj ne razlikujejo, kar pomeni, da bi lahko kateri koli udeleženec prejel kakšen kos kovanca v določeni velikosti.
Če so fiksni zneski nastavljeni na 1 BTC, bi Alice, Bob, Carol in Dave’s CoinJoin izgledali takole:
3 + 2,3 + 2 + 1,4 = 1 + 1 + 1 + 1 +1 + 1 + 1 + 1 + 0,5 + 0,2
To je velik napredek, saj se lahko kateri koli del 1 zmede v eno od obeh prvotnih transakcij. Ni jasno, kateri od 1 BTC-jev pripada Alice, Bobu, Carol ali Daveu ali celo kateremu paru.
Vendar še vedno ni popoln, saj ostajajo neenaki izhodi. Te izhode, ravno zato, ker nimajo enakih zneskov, lahko še vedno povežemo s posebnimi vložki: Alice. To tudi pomeni, da se lahko Aliceini vložki povežejo med seboj. In če po več mešanicah nekdo združi neenake rezultate v naslednji transakciji, to škoduje tudi zasebnosti: različne koščke poveže z isto osebo. Poleg tega, če se neenaki izhodi pozneje uporabijo v kombinaciji z izhodi s fiksno količino, lahko to puščanje uniči sam postopek začetnega mešanja.
CashFusion
CashFusion, projekt razvijalcev Bitcoin Casha Marka Lundeberga in Jonalda Fyookballa, se je lotil reševanja problema “ostankov” izhodov. Sprva so to ustvarili kot dodatek k CashShuffle, ki je izvedba CoinShuffle za Bitcoin Cash in meša enake količine. Nekoliko presenetljiv potencial CashFusion bi lahko pomenil tudi, da postane lasten samostojni mešalni protokol.
Da bi razumeli ta potencial, si oglejmo še en niz transakcij. Recimo, da želi Alice plačati Carol 4 kovanca, ima pa dva UTXO v vrednosti 2 in 3 kovanca. Bob želi Daveu plačati 9 kovancev in ima dva UTXO v vrednosti 7 in 8 kovancev.
Poenostavljeno so te transakcije videti takole:
3 + 2 = 4 + 1
in
8 + 7 = 9 + 6
Transakcija CoinJoin, združena skupaj, bi izgledala tako:
8 + 7 + 3 + 2 = 9 + 6 + 4 + 1
Zdaj je iz te transakcije CoinJoin mogoče uganiti prvotni dve transakciji, seveda. Tudi če veste, da sta plačnika dva, je možnih tudi več drugih kombinacij.
Na primer:
8 + 2 = 9 + 1
in
7 + 3 = 6 + 4
Ali:
8 + 2 = 6 + 4
in
7 + 3 = 9 + 1
Ali:
7 + 2 = 9
in
8 + 3 = 6 + 4 + 1
Ali:
7 = 6 + 1
in
8 + 3 + 2 = 9 + 4
Zaradi poenostavitve je ta primer uporabil samo okrogla števila. To omogoča več potencialnih konfiguracij, vendar dejansko ne bo pogosto odražalo resničnosti. Na drugi strani je ta poenostavljeni primer uporabil samo dve izvirni transakciji. V resnici lahko CoinJoin sestavlja desetine ali celo stotine prvotnih transakcij. Čeprav je poenostavitev poenostavljena, pomaga in škoduje potencialu ustvarjanja več konfiguracij.
CashFusion temelji na teoriji, ki izhaja iz področja Kombinatorika, da bo dovolj velika transakcija CoinJoin pogosto (če ne vedno) ponudila več različnih rešitev sestavljanke, tudi če se uporabijo realni zneski. In ker je vključenih več vhodov in izhodov, je iz njega mogoče izpeljati več potencialnih konfiguracij. (To bi moralo veljati zlasti, če se zneski nahajajo v istem igrišču – na primer 1 BCH -, kar uporabnikom CashFusion priporočamo zaradi lastne zasebnosti.)
Ker obstaja več potencialnih rešitev za sestavljanko, bo analitik blockchain težje ugotovil, katera rešitev je bila prvotna konfiguracija. To bi moralo prebiti sled kovancev in otežiti povezovanje vhodov. Kot tak bi moral ponujati zasebnost.
Za izboljšanje tega potenciala CashFusion vključuje dodaten trik, s katerim je še težje sestaviti prvotno konfiguracijo: uporabnikom omogoča, da na pol naključno razrežejo svoje rezultate na več manjših izhodov. Torej, namesto da bi Alice plačala Carolu en izhod s 4 kovanci, bi lahko Alice na primer poslala izpuste Carol s 3 in 1 kovancem. Bob bi namesto, da bi plačal en izhod 9 kovancev, Daveu poslal izhode 5, 3 in 1 kovanca.
Medtem pa uporabnike spodbujamo, da predložijo tudi več vložkov, morda iz prejšnjih mešanic. To jim omogoča, da konsolidirajo svoje manjše kose v večji kos, ne da bi bilo to očitno na verigi blokov. (Alice bi na primer zagotovila vhode 2 + 2 + 1; Bob bi vložke 6 + 5 + 4.) Dejansko je bila konsolidacija neenakih ostankov kosov v večje izhode prvotna ideja in služi kot izvor protokola. ime: CashFusion.
Toda ali predpostavka zdrži?
Da bi vas razočarali, če berete tako daleč in iščete končni zaključek: ta članek ne bo dokončno odgovoril na vprašanje, ali predpostavke CashFusion držijo ali ne in v kakšnem obsegu. Zdi se, da dokončnega odgovora še ni. Predlog je bil doslej deležen razmeroma malo medsebojnega pregleda in čeprav razvijalci, ki stojijo za CashFusionom, verjamejo, da njihova rešitev ponuja zadostno zasebnost, so drugi videti nekoliko bolj dvomljivi.
Na prvi pogled se zdi pristop CashFusion zgrešen, saj so bile prej neenakomerne sheme mešanja, kot je Blockchain’s SharedCoin zdrobljen pred leti. Toda ključna razlika, po mnenju Lundeberga in Fyookballa zdaj, je, da bi transakcija CashFusion vključevala več vhodov in izhodov kot transakcija SharedCoin. Podobno kot pri drugih neintuitivnih matematičnih potegavščinah, kot je rojstni dan problem, število potencialnih konfiguracij eksponentno raste za vsak dodani vhod in izhod, s čimer se reši problem, ki ga je imel SharedCoin – čeprav se Lundeberg strinja, da bodo za pravilno potrditev potrebni boljši matematični dokazi.
Sam opis CashFusion vključuje tisto, kar Lundeberg samoumevno šteje za “prtično matematiko”, od tega je bila tudi nekoliko naprednejša različica objavljeno on na Redditu. Te ocene kažejo, da bi bilo tudi samo 10 udeležencev, od katerih ima vsak po 10 vhodov, ki jih je treba združiti v en izhod (za skupno 100 vhodov in 10 izhodov), število možnih konfiguracij v povprečju v območju 100 kvintiljonov. (To je tisto z dvajsetimi ničlami ali 10 ^ 20.) Tudi samo računanje vseh teh možnosti bi trajalo kar nekaj časa – ne glede na to, da bi pravilno vzpostavili prvotne transakcije.
V času pisanja tega članka poteka še več raziskav; Fyookball je nedavno objavil svojo lastno analizo v to objavo v spletnem dnevniku. Za zdaj so Lundeberg, Fyookball in drugi vsaj dovolj prepričani v protokol CashFusion, da ga želijo uvesti. Za testiranje je na voljo alfa odjemalec programske opreme CashFusion; popolna izdaja se pričakuje v nekaj mesecih.
Toda drugi niso tako prepričani. Kritika predloga je, da – tudi če številka 10 ^ 20 (približno) drži – ne bo vsak izhod CashFusion CoinJoin enako verjetno prišel iz vsakega vnosa. Z drugimi besedami, medtem ko lahko nekateri udeleženci pridobijo veliko zasebnosti, drugi pa lahko iz iste mešanice pridobijo veliko manj zasebnosti. In za vsakega posameznega uporabnika bi bilo težko ugotoviti, ali je prav on tisti, ki si pridobi veliko zasebnosti ali ne. (To kritiko in druge kritike najdete v ta nedavna bitcoin-dev e-poštna nit.)
Nasprotno pa enakovredno mešanje ponuja podobno zasebnost kot vsi udeleženci in povzroči največje število možnih konfiguracij. Na enak način mešanice z enako količino privedejo do “popolnega” CashFusion CoinJoin-a in so zato popolnoma boljše – če ignoriramo problem neenakih sprememb.
Kljub temu, da CashFusion nikoli ne bi popolnoma nadomestil mešanja enakih količin, bi lahko le pomagal rešiti vprašanje neenakih sprememb, kot je bilo prvotno namenjeno …
Opomba avtorja: V predlogu CashFusion je nekaj več, na primer o tem, kako je zgrajena transakcija CoinJoin. Pri zasebnosti obstaja tudi nekaj bolj subtilnih tveganj in kompromisov, na primer kako uporabniki ravnajo s svojimi kovanci pred mešanico in po njej. Zaradi enostavnosti in berljivosti se ta članek osredotoča le na osrednjo in verjetno najzanimivejšo idejo za CashFusion: mešanje neenake količine.
Hvala Marku Lundebergu za informacije in povratne informacije.
Drugi del tega članka bo zajemal drugo tehniko mešanja neenakih količin Nahrbtnik.