O anonimnosti u blockchain-ovima zasnovanim na računima

Već dugo nas zanima tema anonimnosti u kriptovalutama i pokušavamo pratiti razvoj tehnologija u ovoj oblasti. U našim smo člancima već detaljno raspravljali o principima rada povjerljive transakcije u Moneru, a takođe i sprovedena uporedni pregled tehnologije koje postoje u ovoj oblasti. Međutim, sve anonimne kriptovalute danas su izgrađene na modelu podataka koji je predložio Bitcoin - Unspent Transaction Output (u daljem tekstu UTXO). Za blockchaine bazirane na nalogu kao što je Ethereum, postojeća rješenja za implementaciju anonimnosti i povjerljivosti (na primjer, Mobius ili astečki) pokušao da replicira UTXO model u pametnim ugovorima.

U februaru 2019. grupa istraživača sa Univerziteta Stanford i Visa Research pušten preprint "Zether: Ka privatnosti u svijetu pametnih ugovora." Autori su bili prvi koji su predložili pristup osiguravanju anonimnosti u blockchain-ovima baziranim na računima i predstavili dvije verzije pametnog ugovora: za povjerljive (skrivanje stanja i iznosa prijenosa) i anonimne (sakrivanje primatelja i pošiljatelja) transakcije. Predloženu tehnologiju smatramo zanimljivom i želimo da podelimo njen dizajn, kao i da razgovaramo o tome zašto se problem anonimnosti u blockchain-ovima na nalogu smatra veoma teškim i da li su autori uspeli da ga reše u potpunosti.

O strukturi ovih modela podataka

U UTXO modelu, transakcija se sastoji od "ulaza" i "izlaza". Direktan analog "izlaza" su novčanice u vašem novčaniku: svaki "izlaz" ima neku denominaciju. Kada nekome platite (formirate transakciju) trošite jedan ili više „izlaza“, u kom slučaju oni postaju „unosi“ transakcije, a blockchain ih označava kao potrošene. U tom slučaju, primalac vaše uplate (ili vi sami, ako vam je potrebna promjena) prima novogenerirane „izlaze“. Ovo se može shematski predstaviti ovako:

O anonimnosti u blockchain-ovima zasnovanim na računima

Blockchains zasnovani na računu strukturirani su slično kao i vaš bankovni račun. Oni se bave samo iznosom na vašem računu i iznosom transfera. Kada prenesete neki iznos sa svog računa, ne spaljujete nikakve „izlaze“, mreža ne mora pamtiti koji su novčići potrošeni, a koji ne. U najjednostavnijem slučaju, provjera transakcije se svodi na provjeru potpisa pošiljaoca i iznosa na njegovom stanju:

O anonimnosti u blockchain-ovima zasnovanim na računima

Analiza tehnologije

Zatim ćemo pričati o tome kako Zether skriva iznos transakcije, primaoca i pošiljaoca. Dok opisujemo principe njegovog rada, uočit ćemo razlike u povjerljivoj i anonimnoj verziji. Budući da je mnogo lakše osigurati povjerljivost u blockchain-ovima zasnovanim na računima, neka od ograničenja koja nameće anonimizacija neće biti relevantna za povjerljivu verziju tehnologije.

Skrivanje stanja i iznosa prijenosa

Šema šifriranja se koristi za šifriranje stanja i prijenosa iznosa u Zetheru El Gamal. Radi na sljedeći način. Kada Alice želi poslati Boba b kovanice po adresi (njegov javni ključ) Y, ona bira nasumični broj r i šifrira iznos:

O anonimnosti u blockchain-ovima zasnovanim na računima
gdje C - šifrirani iznos, D - pomoćna vrijednost neophodna za dešifriranje ovog iznosa, G - fiksna tačka na eliptičkoj krivulji, kada se pomnoži sa tajnim ključem, dobija se javni ključ.

Kada Bob primi ove vrijednosti, on ih jednostavno dodaje svom šifriranom saldu na isti način, zbog čega je ova šema zgodna.

Slično, Alice oduzima iste vrijednosti od svoje ravnoteže, samo kao Y koristi vaš javni ključ.

Skrivanje primaoca i pošiljaoca

Promjenjivanje "izlaza" u UTXO datira još iz ranih dana kriptovaluta i pomaže pri skrivanju pošiljatelja. Da bi to učinio, sam pošiljalac, prilikom prijenosa, prikuplja nasumične "izlazne podatke" u blockchain-u i miješa ih sa svojim vlastitim. Zatim, on potpisuje "izlaze" prstenastim potpisom - kriptografskim mehanizmom koji mu omogućava da uvjeri verifikatora da su kovanice pošiljaoca prisutne među uključenim "izlazima". Sami pomešani novčići se, naravno, ne troše.

Međutim, nećemo moći generirati lažne izlaze kako bismo sakrili primatelja. Dakle, u UTXO, svaki “izlaz” ima svoju jedinstvenu adresu i kriptografski je povezan sa adresom primaoca ovih kovanica. Trenutno ne postoji način da se identifikuje odnos između jedinstvene izlazne adrese i adrese primaoca bez poznavanja njenih tajnih ključeva.

U modelu zasnovanom na nalogu, ne možemo koristiti jednokratne adrese (inače će to već biti model „izlaza“). Stoga, primatelj i pošiljatelj moraju biti pomiješani između ostalih naloga u blockchainu. U ovom slučaju, šifrirani 0 novčića se naplaćuju sa mješovitih računa (ili se dodaje 0 ako je primalac mješovit), bez stvarne promjene njihovog stvarnog stanja.

Budući da i pošiljalac i primalac uvijek imaju stalnu adresu, postaje neophodno koristiti iste grupe za miješanje prilikom prijenosa na iste adrese. Lakše je ovo pogledati na primjeru.

Recimo da Alice odluči dati doprinos Bobovoj dobrotvornoj organizaciji, ali preferira da prijenos ostane anoniman za vanjskog posmatrača. Zatim, kako bi se maskirala u polju pošiljaoca, ulazi i u račune Adama i Adele. A da sakrijete Boba, dodajte račune Bena i Billa u polje primatelja. Dajući sledeći prilog, Alis je odlučila da pored sebe napiše Alex i Amanda, a pored Boba Bruce i Benjen. U ovom slučaju, kada se analizira blockchain u ove dvije transakcije, postoji samo jedan par sudionika koji se ukrštaju - Alice i Bob, koji te transakcije deanonimizira.

O anonimnosti u blockchain-ovima zasnovanim na računima

Transakcione trke

Kao što smo već spomenuli, da bi sakrio svoje stanje u sistemima baziranim na nalogu, korisnik šifrira svoje stanje i iznos transfera. Istovremeno, mora dokazati da stanje na njegovom računu nije negativno. Problem je što korisnik prilikom kreiranja transakcije gradi dokaz o svom trenutnom statusu računa. Šta se dešava ako Bob pošalje transakciju Alisi, a ona bude prihvaćena prije one koju je poslala Alisa? Tada će se Alisina transakcija smatrati nevažećom, budući da je dokaz stanja napravljen prije nego što je Bobova transakcija prihvaćena.

O anonimnosti u blockchain-ovima zasnovanim na računima

Prva odluka koja dolazi u takvoj situaciji je zamrzavanje računa dok se transakcija ne izvrši. Ali ovaj pristup nije prikladan, jer pored složenosti rješavanja takvog problema u distribuiranom sistemu, u anonimnoj šemi neće biti jasno čiji račun blokirati.

Kako bi riješila ovaj problem, tehnologija razdvaja dolazne i odlazne transakcije: potrošnja ima trenutni učinak na bilans stanja, dok primanja imaju odloženi efekat. Da biste to učinili, uvodi se koncept "epohe" - grupa blokova fiksne veličine. Trenutna "epoha" se određuje dijeljenjem visine bloka sa veličinom grupe. Prilikom obrade transakcije, mreža odmah ažurira stanje pošiljatelja i pohranjuje primateljeva sredstva u spremnik. Akumulirana sredstva se stavljaju na raspolaganje primaocu plaćanja tek kada počne nova „era“.

Kao rezultat, korisnik može slati transakcije bez obzira na to koliko često prima sredstva (naravno koliko mu stanje dozvoljava). Veličina epohe se određuje na osnovu toga koliko brzo se blokovi šire kroz mrežu i koliko brzo transakcija ulazi u blok.

Ovo rješenje dobro funkcionira za povjerljive transfere, ali kod anonimnih transakcija, kao što ćemo vidjeti kasnije, stvara ozbiljne probleme.

Zaštita od replay napada

U blockchain-ovima zasnovanim na nalogu, svaka transakcija je potpisana privatnim ključem pošiljaoca, koji uvjerava verifikatora da transakcija nije modificirana i da je kreirao vlasnik ovog ključa. Ali šta ako napadač koji je slušao kanal za prenos presretne ovu poruku i pošalje potpuno istu drugu? Verifikator će provjeriti potpis transakcije i uvjerit će se u njeno autorstvo, a mreža će ponovo otpisati isti iznos sa salda pošiljaoca.

Ovaj napad se naziva napadom ponavljanja. U UTXO modelu takvi napadi nisu relevantni, jer će napadač pokušati iskoristiti potrošene izlaze, što samo po sebi nije valjano i mreža ga odbija.

Kako bi se to spriječilo, u transakciju je ugrađeno polje sa nasumičnim podacima, koje se naziva nonce ili jednostavno "sol". Prilikom ponovnog slanja transakcije sa soli, verifikator gleda da li je nonce korišten prije i, ako nije, smatra transakciju valjanom. Kako se ne bi pohranila cijela povijest korisničkih nonces u blockchain, obično se u prvoj transakciji postavlja na nulu, a zatim se povećava za jedan. Mreža može samo provjeriti da li se nonce nove transakcije razlikuje od prethodne.

U šemi anonimnog prijenosa javlja se problem validacije transakcijskih nonces. Ne možemo eksplicitno vezati nonce za adresu pošiljaoca, jer, očigledno, ovo deanonimizira prijenos. Također ne možemo dodati jedan na nonces svih računa koji učestvuju, jer to može biti u sukobu s drugim transferima koji se obrađuju.

Autori Zethera predlažu da se nonce generira kriptografski, ovisno o „epohi“. Na primjer:

O anonimnosti u blockchain-ovima zasnovanim na računima
to je x je tajni ključ pošiljaoca, i Gepoch — dodatni generator za epohu, dobijen heširanjem niza u obliku 'Zether + '. Sada se čini da je problem riješen - ne otkrivamo pošiljaočeve nonce i ne miješamo se u noncese neuključenih sudionika. Ali ovaj pristup nameće ozbiljno ograničenje: jedan račun ne može poslati više od jedne transakcije po „epohi“. Ovaj problem, nažalost, ostaje neriješen i trenutno čini anonimnu verziju Zethera, po našem mišljenju, teško pogodnom za upotrebu.

Složenost dokaza bez znanja

U UTXO, pošiljatelj mora dokazati mreži da ne troši negativan iznos, inače postaje moguće generirati nove novčiće iz zraka (zašto je to moguće, pisali smo u jednom od prethodnih članci). I također potpišite "ulaz" prstenastim potpisom kako biste dokazali da među novčićima koji se miješaju postoje sredstva koja pripadaju njemu.

U anonimnoj verziji blockchaina zasnovanog na računu, izrazi za dokaz su mnogo složeniji. Pošiljalac dokazuje da:

  1. Poslani iznos je pozitivan;
  2. Bilans ostaje nenegativan;
  3. Pošiljalac je ispravno šifrirao iznose prijenosa (uključujući nulu);
  4. Stanje na saldu se menja samo za pošiljaoca i primaoca;
  5. Pošiljalac posjeduje privatni ključ svog naloga i on je zapravo na listi pošiljalaca (među uključenima);
  6. Nonce korišten u transakciji je ispravno sastavljen.

Za tako složen dokaz, autori koriste mješavinu neprobojan (jedan od autora je, inače, učestvovao u njegovom stvaranju) i Sigma protokol, koji se nazivaju Sigma-metci. Formalni dokaz takve izjave je prilično težak zadatak i uvelike ograničava broj ljudi koji su spremni da implementiraju tehnologiju.

Šta je na kraju?

Po našem mišljenju, dio Zether-a koji donosi privatnost blokčejnovima na računima može se koristiti upravo sada. Ali u ovom trenutku, anonimna verzija tehnologije nameće ozbiljna ograničenja njenoj upotrebi i njenu složenost u njenoj implementaciji. No, ne treba zanemariti da su ga autori objavili tek prije nekoliko mjeseci, a možda će neko drugi pronaći rješenje za probleme koji postoje danas. Na kraju krajeva, ovako se radi nauka.

izvor: www.habr.com

Dodajte komentar