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
Februarja 2019 je skupina raziskovalcev z Univerze Stanford in Visa Research
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:
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:
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
č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.
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.
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:
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
V anonimni različici verige blokov, ki temelji na računu, so izrazi za dokaz veliko bolj zapleteni. Pošiljatelj dokazuje, da:
- Poslani znesek je pozitiven;
- Bilanca ostaja nenegativna;
- Pošiljatelj je pravilno šifriral zneske prenosa (vključno z ničlo);
- Stanje na stanju se spremeni samo za pošiljatelja in prejemnika;
- Pošiljatelj ima zasebni ključ svojega računa in je dejansko na seznamu pošiljateljev (med vpletenimi);
- Nonce, uporabljen v transakciji, je pravilno sestavljen.
Za tako kompleksen dokaz avtorji uporabljajo mešanico
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