O anonimnosti v blokchainih, ki temeljijo na računih

Že dolgo že spremljamo temo anonimnosti v kriptovalutah in se trudimo slediti razvoju tehnologij na tem področju. V svojih člankih smo že podrobno razpravljali o načelih delovanja zasebnih transakcij v Monero, prav tako smo opravili primerjalni pregled tehnologij, ki obstajajo na tem področju. Vse anonimne kriptovalute do danes temeljijo na modelu podatkov, ki ga je predlagal Bitcoin — Unspent Transaction Output (UTXO). Za blockchain-e, ki temeljijo na računih, kot je Ethereum, se obstoječe rešitve za implementacijo anonimnosti in zasebnosti (kot so Mobius ili Aztec) so poskušale ponoviti model UTXO v pametnih pogodbah.

Februarja 2019 je skupina raziskovalcev z Univerze Stanford in Visa Research izdali založila preprint "Zether: K zaupnosti v svetu pametnih pogodb". Avtorji so prvič predlagali pristop za zagotavljanje anonimnosti v blockchain-ih, ki temeljijo na računih, in predstavili dve vrsti pametnih pogodb: za zaupne (skritje stanj in zneskov prenosa) in anonimne (skritje prejemnika in pošiljatelja) transakcije. Predlagana tehnologija se nam zdi zanimiva in želeli bi deliti njeno delovanje ter spregovoriti o tem, zakaj je problem anonimnosti v blockchain-ih, ki temeljijo na računih, zelo zapleten in ali so avtorji to težavo uspešno rešili.

O delovanju teh modelov podatkov

Pri modelu UTXO transakcija sestavljajo "vhodne" in "izhodne" postavke. Neposredna analogija "izhodom" so bankovci v vašem denarnem kovčku: vsak "izhod" ima določeno nominalno vrednost. Ko plačujete nekemu drugemu (oblikujete transakcijo), porabite enega ali več "izhodov", ki postanejo "vhodni" v transakciji, in blockchain jih označi kot porabljene. Prejemnik vaše plačila (ali vi sami, če potrebujete drobiž) prejme nove "izhodne" postavke. To se lahko shematsko prikaže tako:

O anonimnosti v blokchainih, ki temeljijo na računih

Blockchain-i, ki temeljijo na računih, delujejo podobno kot vaš bančni račun. Ukvarjajo se le z zneskom na vašem računu in zneskom prenosa. Ko prenesete znesek s svojega računa, ne uničite nobenih "izhodov", omrežju ni treba pomniti, katere kovance ste porabili in katerih ne. V najpreprostejšem primeru se preverjanje transakcije zmanjša na preverjanje podpisa pošiljatelja in zneska na njegovem saldu:

O anonimnosti v blokchainih, ki temeljijo na računih

Analiza tehnologije

Nato bomo govorili o tem, kako Zether skriva zneske transakcij, prejemnike in pošiljatelje. Med opisovanjem načel njegovega delovanja bomo izpostavili razlike v zasebnem in anonimnem načinu. Ker je zagotavljanje zasebnosti v blockchainih, ki temeljijo na računih, bistveno lažje, nekatere omejitve, ki jih nalaga anonimizacija, ne bodo relevantne za zasebno različico tehnologije.

Skrivanje stanj in zneskov prenosa

Za šifriranje stanj in zneskov prenosa v Zetherju se uporablja šifrirna shema ElGamal. Deluje na naslednji način. Ko želi Alisa poslati Bobu b kovance na naslov (njegov javni ključ) Y, izbere naključno število r in šifrira znesek:

O anonimnosti v blokchainih, ki temeljijo na računih
kjer C — šifrirani znesek, D — pomožni podatek, potreben za dešifriranje tega zneska, G — fiksna točka na eliptični krivulji, pri množenju katerega s tajnim ključem dobimo javni ključ.

Ko Bob prejme te vrednosti, jih preprosto doda svojemu šifriranemu ravno tako, kar je prednost te sheme.

Na podoben način Alisa od svojega stanja odšteje enake vrednosti, pri čemer uporablja Y svoj javni ključ.

Skrivanje prejemnika in pošiljatelja

Mešanje 'izhodov' v UTXO se je pojavilo že na začetku kriptovalut in pomaga skriti pošiljatelja. Pošiljatelj pri prenosu izbere naključne 'izhode' v blockchainu in jih pomeša s svojimi. Nato 'izhode' podpiše s krožno podpisom — kriptografskim mehanizmom, ki omogoča preveritelju, da je prepričan, da so med pomešanimi 'izhodi' vključeni kovanci pošiljatelja. Samo pomešani kovanci se seveda ne porabijo.

Vendar pa za skrivanje prejemnika ne moremo ustvariti lažnih 'izhodov'. Zato ima v UTXO vsak 'izhod' svoj edinstven naslov, ki je kriptografsko povezan z naslovom prejemnika teh kovancev. Trenutno ne obstaja način za razkrivanje povezave med edinstvenim naslovom 'izhoda' in naslovom prejemnika, ne da bi poznali njegove tajne ključe.

V modelu, temeljenem na računih, ne moremo uporabljati enkratnih naslovov (sicer bi to že bila model 'izhodov'). Zato moramo prejemnika in pošiljatelja mešati med drugimi računi v blockchainu. Pri tem se z mešanih računov odšteje 0 encodiranih kovancev (ali se doda 0 – v primeru mešanja prejemnika), kar dejansko ne spremeni njihovega realnega stanja.

Ker imata tako pošiljatelj kot prejemnik vedno stalni naslov, se tu pojavi potreba, da pri nakazilih na iste naslove uporabljamo iste skupine za mešanje. Lažje je to razložiti s primerom.

Recimo, da se je Alisa odločila za donacijo v Bobov dobrodelni sklad, vendar želi, da to nakazilo ostane anonimno za zunanje opazovalce. Da bi se skrila na polju pošiljatelja, vpiše še račune Adama in Adele. Da bi skrila Boba - na polje prejemnika dodatno vpiše račune Bena in Billa. Ko bo naslednjič donirala, se je Alisa odločila, da zraven sebe vpiše Alex in Amando, zraven Boba pa Brusa in Benjina. V tem primeru bo pri analizi blockchaina v teh dveh transakcijah našla le en prekrivajoč se par udeležencev - Alisa in Bob, kar deanonimizira ti transakciji.

O anonimnosti v blokchainih, ki temeljijo na računih

Dirke transakcij

Kot smo že omenili, da bi skrila svoje stanje v sistemih, temelječe na računih, uporabnik šifrira svoje stanje in znesek nakazila. Pri tem mora dokazati, da ostanek na njegovem računu ostaja nenegativen. Težava je v tem, da uporabnik, ko oblikuje transakcijo, gradi dokaz o trenutnem stanju svojega računa. Kaj pa, če Bob pošlje Alisi transakcijo in ta pride prej, kot je Alisa poslala svojo? Takrat bo Alisina transakcija veljala za neveljavno, saj je bil dokaz stanja zgrajen pred sprejetjem Bobove transakcije.

O anonimnosti v blokchainih, ki temeljijo na računih

Prva rešitev, ki pride na misel v taki situaciji, je, da se račun zamrzne do izvedbe transakcije. A ta pristop ni ustrezen, saj poleg kompleksnosti reševanja take naloge v razdeljeni sistem, v anonimni shemi ne bo jasno, kateri račun blokirati.

Za rešitev tega problema tehnologija ločuje prihodnje in odhodne transakcije: poraba sredstev takoj vpliva na stanje bilance, medtem ko prihodki imajo odložen učinek. Za to se uvaja pojem "epoh" - skupin blokov fiksne velikosti. Trenutna "epoha" se določi z delitvijo višine bloka z velikostjo skupine. Ko obdeluje transakcijo, omrežje takoj posodobi ravnotežje pošiljatelja, sredstva prejemnika pa se dodajo v skladišče. Nabrana sredstva postanejo na voljo prejemniku plačila šele ob začetku nove "epoh".

Zaradi tega lahko uporabnik pošilja transakcije ne glede na to, kako pogosto prejema sredstva (kolikor mu to omogoča stanje, seveda). Velikost epoh se določi glede na to, kako hitro se bloki širijo po omrežju in kako hitro transakcija pride v blok.

Ta rešitev dobro deluje pri zaupnih prenosih, vendar pri anonimnih transakcijah, kot bomo kmalu videli, povzroča resne težave.

Zaščita pred replay napadi

V blokadnih verigah, temelječih na računih, je vsaka transakcija podpisana s privatnim ključem pošiljatelja, kar preveritelju zagotavlja, da transakcija ni bila spremenjena in da jo je ustvaril lastnik tega ključa. Ampak kaj, če zlonamernež, ki posluša prenosni kanal, prestreže to sporočilo in pošlje natančno enako drugo? Preveritelj bo preveril podpis transakcije in bo prepričan o njeni avtentičnosti, omrežje pa bo ponovno odštelo enako znesek z računa pošiljatelja.

To napad imenujemo replay napad. V UTXO modelu takšni napadi niso aktualni, ker zlonamernež poskuša uporabiti porabljene izhode, kar samo po sebi ni veljavno in ga omrežje zavrne.

Da bi do tega ne prišlo, se v transakcijo vgradi polje z naključnimi podatki, ki ga imenujemo nonce ali preprosto "sol". Ob ponovnem pošiljanju transakcije z "soljo" preveritelj preveri, ali je bil ta nonce prej uporabljen, in če ne, šteje to transakcijo za veljavno. Da ne bi hranili celotne zgodovine nonce-ov uporabnikov v blokadni verigi, se običajno v prvi transakciji sprejme vrednost nič, nato pa se povečuje za eno. Omrežju ostane le še preveriti, da se nonce nove transakcije razlikuje od prejšnjega za eno.

V anonimnem sistemu prenosa se pojavi problem validacije nonce-ov transakcij. Ne moremo izrecno povezati nonce-a z naslovom pošiljatelja, saj to očitno deanonimizira prenos. Prav tako ne moremo dodati enice k nonce-om vseh udeleženih računov, saj to lahko povzroči konflikte z drugimi prenosi, ki so v obdelavi.

Avtorji Zether predlagajo generiranje nonce-a na kriptografski način — odvisno od 'epoh'. Na primer:

O anonimnosti v blokchainih, ki temeljijo na računih
Tukaj x — skrivni ključ pošiljatelja in Gepoch — dodatni generator za epoh, pridobljen s hashiranjem niza v obliki 'Zether + '. Zdaj se zdi, da je težava rešana — ne razkrivamo nonce-a pošiljatelja in ne posegamo v nonce-e nepovezanih udeležencev. Vendar ta pristop nalaga resno omejitev: en račun lahko v 'epohi' pošlje največ eno transakcijo. Ta težava, žal, ostaja nerešena, in trenutno naša anonimna različica Zether po našem mnenju komajda deluje.

Težavnost dokazov z ničelnim razkrivanjem

V UTXO mora pošiljatelj dokazati omrežju, da ne porabi negativne količine, sicer postane mogoča generacija novih kovancev iz nič (zakaj je to mogoče, smo pisali v eni od prejšnjih članov). Prav tako mora podpisati 'vstopnice' s krožnim podpisom, da dokaže, da so med zamajenimi kovanci sredstva, ki pripadajo njemu.

V anonimni različici blockchain-a na osnovi računov so izrazi za dokazovanje veliko bolj zapleteni. Pošiljatelj dokazuje, da:

  1. Poslana količina je pozitivna;
  2. Stanje ostaja nenegativno;
  3. Pošiljatelj je pravilno zaklenil zneske prenosov (vključno z ničelnimi);
  4. Stanje na računu se spreminja le pri pošiljatelju in prejemniku;
  5. Pošiljatelj ima skrivni ključ svojega računa in je v resnici prisoten na seznamu pošiljateljev (med zamajenimi);
  6. Nonce, uporabljen v transakciji, je pravilno sestavljen.

Za tako zapleten dokaz avtorji uporabljajo mešanico Otporan na napade (eden od avtorjev je, mimogrede, sodeloval pri njenem ustvarjanju) in Sigma protocol, ki jo imenujejo Sigma-bullets. Formalno dokazovanje tovrstne trditve je precej zapleteno opravilo in močno omejuje število tistih, ki bi se lotili implementacije tehnologije.

Kaj na koncu?

Po našem mnenju lahko del Zetherja, ki prinaša zasebnost v blokchainih, temelji na računih, uporabljamo že zdaj. Vendar pa trenutna anonimna različica tehnologije nalaga resne omejitve za njeno uporabo, njen kompleksnost pa ovira izvajanje. Vendar ne smemo pozabiti, da so avtorji to izdali šele pred nekaj meseci in morda bo nekdo drug našel rešitev za trenutne težave. Tako se namreč razvija znanost.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster