O anonimnosti v verigah blokov, ki temeljijo na računih

Tematika anonimnosti pri kriptovalutah nas zanima že dlje časa in poskušamo slediti razvoju tehnologij na tem področju. V naših člankih smo že podrobno obravnavali načela delovanja zaupne transakcije v Monero, in tudi izvedel primerjalni pregled tehnologije, ki obstajajo na tem področju. Vendar pa so vse današnje anonimne kriptovalute zgrajene na podatkovnem modelu, ki ga je predlagal Bitcoin – Unsent Transaction Output (v nadaljevanju UTXO). Za blokovne verige, ki temeljijo na računih, kot je Ethereum, obstoječe rešitve za izvajanje anonimnosti in zaupnosti (npr. Mobius ali Aztec) je poskušal ponoviti model UTXO v pametnih pogodbah.

Februarja 2019 je skupina raziskovalcev z Univerze Stanford in Visa Research izpuščen prednatis "Zether: Proti zasebnosti v svetu pametnih pogodb." Avtorja sta kot prva predlagala pristop k zagotavljanju anonimnosti v blokovnih verigah, ki temeljijo na računih, in predstavila dve različici pametne pogodbe: za zaupne (skrivanje stanja in zneskov nakazil) in anonimne (skrivanje prejemnika in pošiljatelja) transakcije. Predlagana tehnologija se nam zdi zanimiva in bi radi delili njeno zasnovo ter govorili o tem, zakaj se problem anonimnosti v blokovnih verigah, ki temeljijo na računih, šteje za zelo težkega in ali ga je avtorjem uspelo v celoti rešiti.

O strukturi teh podatkovnih modelov

V modelu UTXO je transakcija sestavljena iz "vhodov" in "izhodov". Neposredni analog "izhodov" so računi v vaši denarnici: vsak "izhod" ima določeno vrednost. Ko nekomu plačate (oblikujete transakcijo), porabite enega ali več "izhodov", v tem primeru postanejo "vhodi" transakcije, veriga blokov pa jih označi kot porabljene. V tem primeru prejemnik vašega plačila (ali vi sami, če potrebujete drobiž) prejme novo generirane “izhode”. To lahko shematično predstavimo takole:

O anonimnosti v verigah blokov, ki temeljijo na računih

Verige blokov, ki temeljijo na računu, so strukturirane podobno kot vaš bančni račun. Obravnavajo samo znesek na vašem računu in znesek nakazila. Ko prenesete nekaj zneska s svojega računa, ne porabite nobenih "izhodov", omrežju se ni treba spomniti, kateri kovanci so bili porabljeni in kateri ne. V najpreprostejšem primeru se preverjanje transakcije zmanjša na preverjanje podpisa pošiljatelja in zneska na njegovem stanju:

O anonimnosti v verigah blokov, ki temeljijo na računih

Analiza tehnologije

Nato bomo govorili o tem, kako Zether skrije znesek transakcije, prejemnika in pošiljatelja. Ko bomo opisovali principe njegovega delovanja, bomo opazili razlike med zaupno in anonimno različico. Ker je veliko lažje zagotoviti zaupnost v verigah blokov, ki temeljijo na računih, nekatere omejitve, ki jih nalaga anonimizacija, ne bodo pomembne za zaupno različico tehnologije.

Skrivanje stanja in zneskov prenosa

Shema šifriranja se uporablja za šifriranje stanja in zneskov prenosa v Zether El Gamal. Deluje na naslednji način. Ko Alice želi poslati Boba b kovanci po naslovu (njegov javni ključ) Y, izbere naključno število r in šifrira znesek:

O anonimnosti v verigah blokov, ki temeljijo na računih
če C - šifriran znesek, D - pomožna vrednost, potrebna za dešifriranje tega zneska, G - fiksna točka na eliptični krivulji, ko jo pomnožimo s tajnim ključem, dobimo javni ključ.

Ko Bob prejme te vrednosti, jih preprosto doda svojemu šifriranemu stanju na enak način, zato je ta shema priročna.

Podobno Alice odšteje iste vrednosti od svojega stanja, samo kot Y uporablja vaš javni ključ.

Skrivanje prejemnika in pošiljatelja

Mešanje »izhodov« v UTXO izvira iz zgodnjih dni kriptovalut in pomaga pri skrivanju pošiljatelja. Da bi to naredil, pošiljatelj sam pri nakazilu zbere naključne "izhode" v verigi blokov in jih pomeša s svojimi. Nato podpiše "izhode" z obročnim podpisom - kriptografskim mehanizmom, ki mu omogoča, da prepriča preveritelja, da so pošiljateljevi kovanci prisotni med vključenimi "izhodi". Sami mešani kovanci se seveda ne porabijo.

Vendar pa ne bomo mogli ustvariti lažnih izhodov, da bi skrili prejemnika. Zato ima v UTXO vsak "izhod" svoj edinstven naslov in je kriptografsko povezan z naslovom prejemnika teh kovancev. Trenutno ni mogoče identificirati razmerja med edinstvenim izhodnim naslovom in naslovom prejemnika, ne da bi poznali njegove skrivne ključe.

V modelu, ki temelji na računu, ne moremo uporabiti enkratnih naslovov (sicer bo to že model “izhodov”). Zato morata biti prejemnik in pošiljatelj pomešana med drugimi računi v verigi blokov. V tem primeru se šifrirani 0 kovanci bremenijo z mešanih računov (ali se dodajo 0, če je prejemnik mešan), ne da bi se dejansko spremenilo njihovo dejansko stanje.

Ker imata tako pošiljatelj kot prejemnik vedno stalni naslov, je treba pri prenosu na iste naslove uporabiti iste skupine za mešanje. To je lažje pogledati s primerom.

Recimo, da se Alice odloči prispevati za Bobovo dobrodelno organizacijo, vendar želi, da nakazilo ostane anonimno za zunanjega opazovalca. Nato, da bi se prikrila v polju pošiljatelja, vstopi tudi v račune Adama in Adele. In če želite skriti Boba, dodajte računa Bena in Billa v polje prejemnika. Pri naslednjem prispevku se je Alice odločila, da poleg sebe napiše Alex in Amanda, poleg Boba pa Bruce in Benjen. V tem primeru je pri analizi verige blokov v teh dveh transakcijah samo en križajoči se par udeležencev - Alice in Bob, kar te transakcije deanonimizira.

O anonimnosti v verigah blokov, ki temeljijo na računih

Transakcijske dirke

Kot smo že omenili, za skrivanje vašega stanja v sistemih, ki temeljijo na računu, uporabnik šifrira svoje stanje in znesek nakazila. Hkrati mora dokazati, da stanje na njegovem računu ostaja nenegativno. Težava je v tem, da uporabnik ob kreiranju transakcije gradi dokazilo o trenutnem stanju na računu. Kaj se zgodi, če Bob pošlje transakcijo Alice in je ta sprejeta pred tisto, ki jo pošlje Alice? Potem se bo Alicina transakcija štela za neveljavno, saj je bilo dokazilo o stanju zgrajeno, preden je bila Bobova transakcija sprejeta.

O anonimnosti v verigah blokov, ki temeljijo na računih

Prva odločitev, ki pride v takšni situaciji, je zamrznitev računa do izvedbe transakcije. Toda ta pristop ni primeren, saj poleg zapletenosti reševanja takšnega problema v porazdeljenem sistemu v anonimni shemi ne bo jasno, čigav račun blokirati.

Za rešitev tega problema tehnologija ločuje dohodne in odhodne transakcije: poraba ima takojšen učinek na bilanco stanja, medtem ko imajo prejemki učinek z zakasnitvijo. Da bi to naredili, je uveden koncept "epohe" - skupina blokov fiksne velikosti. Trenutna "epoha" se določi tako, da se višina bloka deli z velikostjo skupine. Pri obdelavi transakcije omrežje takoj posodobi pošiljateljevo stanje in shrani prejemnikova sredstva v hranilnik. Zbrana sredstva so na razpolago prejemniku plačila šele, ko se začne nova »era«.

Posledično lahko uporabnik pošilja transakcije ne glede na to, kako pogosto prejema sredstva (seveda kolikor mu to dovoljuje stanje). Velikost epohe je določena glede na to, kako hitro se bloki širijo po omrežju in kako hitro transakcija vstopi v blok.

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

Zaščita pred napadi ponovitve

V blokovnih verigah, ki temeljijo na računih, je vsaka transakcija podpisana z zasebnim ključem pošiljatelja, ki preveritelja prepriča, da transakcija ni bila spremenjena in da jo je ustvaril lastnik tega ključa. Kaj pa, če napadalec, ki je poslušal prenosni kanal, prestreže to sporočilo in pošlje popolnoma enako drugo? Verifikator bo preveril podpis transakcije in se prepričal o njenem avtorstvu, omrežje pa bo isti znesek znova odpisalo s stanja pošiljatelja.

Ta napad se imenuje napad ponovitve. V modelu UTXO takšni napadi niso relevantni, saj bo napadalec poskušal uporabiti porabljene izhode, kar samo po sebi ni veljavno in ga omrežje zavrne.

Da se to ne bi zgodilo, je v transakcijo vgrajeno polje z naključnimi podatki, ki se imenuje nonce ali preprosto »sol«. Pri ponovni predložitvi transakcije s soljo preveritelj preveri, ali je bil nonce uporabljen že prej, in če ni, obravnava transakcijo kot veljavno. Da ne bi shranili celotne zgodovine uporabniških nonce v blockchain, se običajno v prvi transakciji nastavi na nič, nato pa se poveča za ena. Omrežje lahko samo preveri, ali se nonce nove transakcije razlikuje od prejšnje.

V shemi anonimnega prenosa se pojavi težava pri potrjevanju neenotnih transakcij. Nonce ne moremo izrecno povezati z naslovom pošiljatelja, saj to očitno de-anonimizira prenos. Prav tako ne moremo dodati enega v nonce vseh sodelujočih računov, ker je to lahko v nasprotju z drugimi prenosi, ki se obdelujejo.

Avtorji Zether predlagajo generiranje nonce kriptografsko, odvisno od "epohe". Na primer:

O anonimnosti v verigah blokov, ki temeljijo na računih
Tukaj x je tajni ključ pošiljatelja in Gepoch — dodatni generator za epoho, dobljen z zgoščevanjem niza v obliki 'Zether +'. Zdaj se zdi, da je problem rešen - ne razkrivamo pošiljateljevih nonce in ne posegamo v nonce nevpletenih udeležencev. Toda ta pristop nalaga resno omejitev: en račun lahko pošlje največ eno transakcijo na "epoho". Ta težava na žalost ostaja nerešena in trenutno anonimno različico Zetherja po našem mnenju komaj primerna za uporabo.

Kompleksnost dokazov brez znanja

V UTXO mora pošiljatelj omrežju dokazati, da ne troši negativnega zneska, sicer postane mogoče ustvariti nove kovance iz nič (zakaj je to mogoče, smo pisali v enem od prejšnjih članki). In tudi podpišite "vnose" z obročastim podpisom, da dokažete, da so med kovanci, ki se mešajo, sredstva, ki pripadajo njemu.

V anonimni različici verige blokov, ki temelji na računu, so izrazi za dokaz veliko bolj zapleteni. Pošiljatelj dokazuje, da:

  1. Poslani znesek je pozitiven;
  2. Bilanca ostaja nenegativna;
  3. Pošiljatelj je pravilno šifriral zneske prenosa (vključno z ničlo);
  4. Stanje na stanju se spremeni samo za pošiljatelja in prejemnika;
  5. Pošiljatelj ima zasebni ključ svojega računa in je dejansko na seznamu pošiljateljev (med vpletenimi);
  6. Nonce, uporabljen v transakciji, je pravilno sestavljen.

Za tako kompleksen dokaz avtorji uporabljajo mešanico Bulletproof (mimogrede, eden od avtorjev je sodeloval pri njegovem ustvarjanju) in Sigma protokol, ki se imenujejo Sigma-krogle. Formalno dokazovanje takšne izjave je precej težka naloga in močno omejuje število ljudi, ki so pripravljeni implementirati tehnologijo.

Kakšen je rezultat?

Po našem mnenju je del Zetherja, ki prinaša zasebnost v blokovne verige, ki temeljijo na računih, mogoče uporabiti prav zdaj. Toda trenutno anonimna različica tehnologije nalaga resne omejitve pri njeni uporabi in njena kompleksnost pri izvajanju. Vendar ne gre zanemariti, da so jo avtorji izdali šele pred nekaj meseci in morda bo še kdo našel rešitev za današnje težave. Navsezadnje se tako dela znanost.

Vir: www.habr.com

Dodaj komentar