Već dugo se zanimamo za temu anonimnosti u kriptovalutama i trudimo se pratiti razvoj tehnologija u ovom području. U svojim člancima već smo detaljno razrađivali principe rada u Moneru, a također smo analizirali tehnologije koje postoje u ovom polju. Međutim, sve anonimne kriptovalute do danas temelje se na modelu podataka koji je predložen u Bitcoinu — Unspent Transaction Output (dalje UTXO). Za blockchainer temeljen na računima poput Ethereuma postojeća rješenja za implementaciju anonimnosti i povjerljivosti (npr., ili ) pokušavali su ponoviti UTXO model u pametnim ugovorima.
U veljači 2019. godine, skupina istraživača sa Stanfordskog sveučilišta i Visa Research su izradili preprint "Zether: U susret privatnosti u svijetu pametnih ugovora". Autori su prvi put predložili pristup osiguranju anonimnosti u blockchains temeljenim na računima i predstavili dva varijante pametnog ugovora: za povjerljive (skrivanje stanja i iznosa prijenosa) i anonimne (skrivanje primatelja i pošiljatelja) transakcije. Smatramo predloženu tehnologiju zanimljivom i željeli bismo podijeliti njenu strukturu, kao i razgovarati o tome zašto je problem anonimnosti u blockchains temeljenim na računima vrlo složen i jesu li autori uspjeli riješiti ga u potpunosti.
O strukturi ovih modela podataka
U UTXO modelu, transakcija se sastoji od "ulaza" i "izlaza". Izravni analog "izlazima" su novčanice u vašem novčaniku: svaki "izlaz" ima neku vrijednost. Kada plaćate nekome (formirate transakciju), trošite jedan ili više "izlaza", pri čemu oni postaju "ulazi" transakcije, a blockchain ih označava kao potrošene. Pri tome, primatelj vaše uplate (ili vi sami, ako vam je potrebna kusur) dobiva ponovno generirane "izlaze". Shematski, to se može prikazati ovako:

Blockchains temeljen na računima funkcioniraju otprilike kao vaš bankovni račun. Oni upravljaju samo iznosom na vašem računu i iznosom prijenosa. Kada prebacujete neki iznos sa svog računa, ne uništavate nikakve "izlaze", mreži nije potrebno pamtiti koje su kovanice potrošene, a koje nisu. U najjednostavnijem slučaju provjera transakcije svodi se na provjeru potpisa pošiljatelja i iznosa na njegovom saldu:

Analiza tehnologije
Nastavit ćemo razgovor o tome kako Zether skriva iznos transakcija, primatelja i pošiljatelja. Tijekom opisivanja načina rada, istaknut ćemo razlike između povjerljivog i anonimnog pristupa. Budući da je lakše osigurati privatnost u blockchainima temeljenima na računima, neka od ograničenja koja proizlaze iz anonimnosti neće biti relevantna za povjerljivu verziju tehnologije.
Skrivanje bilance i iznosa prijenosa
Za šifriranje bilance i iznosa prijenosa u Zetheru koristi se šema šifriranja . Funkcionira na sljedeći način. Kada Alisa želi poslati Bobu b kovanice na adresu (njegovom javnom ključu) Y, odabire slučajan broj r i šifrira iznos:

gdje C — šifrirani iznos, D — pomoćna vrijednost potrebna za dešifriranje tog iznosa, G — fiksna točka na eliptičnoj krivulji, pomnožena s tajnim ključem, daje javni ključ.
Kada Bob primi te vrijednosti, jednostavno ih dodaje svojoj šifriranoj bilanci na isti način, što čini ovu shemu korisnom.
Na sličan način, Alisa oduzima iste vrijednosti od svoje bilance, samo što kao Y koristi svoj javni ključ.
Skrivanje primatelja i pošiljatelja
Miješanje "izlaza" u UTXO je nastalo još u ranim danima kriptovaluta i pomaže u skrivanju pošiljatelja. Za to, sam pošiljatelj prilikom prijenosa odabire slučajne "izlaze" iz blockchaina i miješa ih sa svojim. Zatim potpisuje "izlaze" prstenastim potpisom — kriptografskim mehanizmom koji omogućava uvjeravanje provjeritelja da među izmiješanim "izlazima" postoje kovanice pošiljatelja. Same izmiješane kovanice, naravno, ne troše se.
Međutim, za skrivanje primatelja ne možemo generirati lažne "izlaze". Stoga u UTXO svaki "izlaz" ima svoju jedinstvenu adresu, koja je kriptografski povezana s adresom primatelja tih kovanica. Trenutno ne postoji način da se utvrdi veza između jedinstvene adrese "izlaza" i adrese primatelja, bez poznavanja njegovih tajnih ključeva.
U modelu temeljenom na računima ne možemo koristiti jednokratne adrese (inače bi to već bila model „izlaza“). Stoga je potrebno miješati primatelja i pošiljatelja među ostalim računima u blockchainu. Pri tome se s mješovitih računa odbija enkriptiranih 0 kovanica (ili se dodaje 0 — u slučaju miješanja primatelja), što zapravo ne mijenja njihov stvarni saldo.
Kako pošiljatelj, tako i primatelj uvijek imaju stalnu adresu, ovdje se javlja potreba za korištenjem istih grupa za miješanje prilikom slanja na iste adrese. Lakše je to razmotriti na primjeru.
Recimo, Alisa je odlučila donirati Bobeovoj dobrotvornoj ustanovi, ali preferira da ovaj prijenos ostane anonimne za vanjske promatrače. Tada, kako bi se prikrila u polju pošiljatelja, upisuje još račune Adama i Adele. A kako bi prikrila Boba — u polje primatelja dodatno račune Bena i Billa. Prilikom sljedeće donacije, Alisa je odlučila pored sebe upisati Aleksa i Amandu, a pored Boba — Brusa i Benjendena. U ovom slučaju, prilikom analize blockchaina, u ove dvije transakcije naći će se samo jedan preklapajući par sudionika — Alisa i Bob, što deanonimizira ove transakcije.

Utrka transakcija
Kao što smo već spomenuli, kako bi prikrio svoj saldo u sustavima temeljenim na računima, korisnik enkriptira svoj saldo i iznos prijenosa. Pri tome mora dokazati da saldo na njegovom računu ostaje nenegativan. Problem je u tome što formirajući transakciju, korisnik gradi dokaz o svom trenutnom stanju računa. A što će se dogoditi ako Bob pošalje Alisi transakciju, a ona bude prihvaćena prije nego što je Alisa poslala svoju? Tada će se Alisina transakcija smatrati nevaljanom, jer je dokaz salda izgrađen prije prihvaćanja Bobove transakcije.

Prvo rješenje koje pada na pamet u takvoj situaciji je zamrznuti račun do izvršenja transakcije. No, ovaj pristup nije održiv, jer osim složenosti rješavanja takvog zadatka u distribuiranom sustavu, u anonimnom sustavu neće biti jasno čiji račun blokirati.
Kako bi se riješio ovaj problem, tehnologija dijeli dolazne i odlazne transakcije: potrošnja sredstava odmah utječe na stanje salda, dok je prihod odgođen. U tu svrhu uvodi se pojam 'epoha' - skupina blokova fiksne veličine. Trenutna 'epoha' određuje se dijeljenjem visine bloka s veličinom grupe. Obradom transakcije, mreža odmah ažurira saldo pošiljatelja, dok se sredstva primatelja pohranjuju u nazad. Akumulirana sredstva postaju dostupna primatelju plaćanja tek kada nastupi nova 'epoha'.
Kao rezultat, korisnik može slati transakcije bez obzira na to koliko često prima sredstva (naravno, koliko mu saldo dopušta). Veličinu epohe određuje se na temelju brzine širenja blokova kroz mrežu i koliko brzo transakcija ulazi u blok.
Ovo rješenje dobro funkcionira za povjerljive transfere, no s anonimnim transakcijama, kao što ćemo vidjeti dalje, stvara ozbiljne probleme.
Zaštita od replay napada
U blok chain-ima temeljenim na računima, svaka transakcija se potpisuje privatnim ključem pošiljatelja, što uvjerava provjeritelja da transakcija nije izmijenjena i da ju je stvorio vlasnik tog ključa. No što ako napadač, koji je prisluškivao komunikacijski kanal, presretne ovu poruku i pošalje posve istu drugu? Provjeriteljski će usporediti potpis transakcije i biti uvjeren u njezino podrijetlo, a mreža će ponovno skinuti istu svotu s salda pošiljatelja.
Ovaj napad se naziva replay napadom. 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 to odbacuje.
Kako bi se to spriječilo, u transakciju se ugrađuje polje sa slučajnim podacima, koje nazivamo nonce ili jednostavno 'sol'. Kada se transakcija ponovno šalje s 'solju', provjeritelj gleda je li ovaj nonce ranije korišten i, ako nije, smatra ovu transakciju valjanom. Kako ne bi pohranjivali cijelu povijest noncea korisnika u blockchainu, obično se u prvoj transakciji prihvaća da je jednak nuli, a zatim se povećava za jedan. Mreži ostaje samo provjeriti da se nonce nove transakcije razlikuje od prethodne za jedan.
U anonimnoj shemi prijenosa javlja se problem validacije nonce-a transakcija. Ne možemo eksplicitno povezati nonce s adresom pošiljatelja, jer bi, očito, to deanonimiziralo prijenos. Također, ne možemo dodavati jedan na nonce svih uključenih računa, jer bi to moglo biti u sukobu s drugim prijenosima koji su u obradi.
Autori Zethera predlažu generiranje nonce-a kriptografski — ovisno o "epohi". Na primjer:

Ovdje x — tajni ključ pošiljatelja, a Gepoch — dodatni generator za epohu, dobiven hashiranjem stringa u obliku 'Zether + '. Sada se čini da je problem riješen — ne otkrivamo nonce pošiljatelja i ne ometamo nonce nepostojećih sudionika. No, takav pristup postavlja ozbiljno ograničenje: jedan račun može poslati najviše jednu transakciju u "epohi". Ovaj problem, nažalost, ostaje nerešen i trenutno čini anonimnu verziju Zethera, po našem mišljenju, jedva prikladnom za korištenje.
Težina dokaza s nultim otkrivanjem
U UTXO pošiljatelj mora dokazati mreži da ne troši negativan iznos, inače postaje moguća generacija novih novčića iz zraka (zašto je to moguće, pisali smo u jednom od prethodnih ). Također mora potpisati "ulaze" prstenjastim potpisom kako bi dokazao da među mešanim novčićima postoje sredstva koja njemu pripadaju.
U anonimnoj verziji blockchain-a temeljenog na računima, izrazi za dokazivanje postaju mnogo složeniji. Pošiljatelj dokazuje da:
- Poslana svota je pozitivna;
- Bilanca ostaje nenegativna;
- Pošiljatelj je ispravno šifrovao iznose prijenosa (uključujući nula);
- Ostatak na bilanci se mijenja samo kod pošiljatelja i primatelja;
- Pošiljatelj posjeduje tajni ključ svog računa i on doista prisutan na listi pošiljatelja (među pomiješanim);
- Nonce korišten u transakciji je ispravno sastavljen.
Za takvo složeno dokazivanje, autori koriste mješavinu (jedan od autora, usput, sudjelovao je u njenom stvaranju) i , koji nazivaju Sigma-bullets. Formalno dokazivanje takvog tvrđenja — prilično je složen zadatak, i ono značajno ograničava broj kandidata koji se žele baviti implementacijom tehnologije.
Što na kraju?
Po našem mišljenju, dio Zethera koji donosi privatnost u blockchainove temeljen na računima može se već sada koristiti. Međutim, trenutna anonimna verzija tehnologije nameće ozbiljna ograničenja u njenoj upotrebi, dok njena složenost otežava implementaciju. Ipak, ne smijemo zaboraviti da su autori objavili ovu verziju prije samo nekoliko mjeseci i možda će netko drugi pronaći rješenje za trenutne probleme. Upravo tako funkcionira znanost.
Izvor: habr.com
