Apie anonimiškumą paskyros pagrindu veikiančiose blokų grandinėse

Jau seniai domimės kriptovaliutų anonimiškumo tema ir stengiamės sekti technologijų raidą šioje srityje. Savo straipsniuose mes jau išsamiai išanalizavome darbo principus konfidencialūs sandoriai Monero mieste, taip pat vyko lyginamoji apžvalga technologijos šioje srityje. Tačiau visos anoniminės kriptovaliutos šiandien yra sukurtos remiantis Bitcoin pasiūlytu duomenų modeliu – Nepanaudotų sandorių išvestimi (toliau – UTXO). Paskyra pagrįstoms blokų grandinėms, tokioms kaip Ethereum, esami anonimiškumo ir privatumo sprendimai (pvz., Mobiusas arba actekų kalba) bandė atkartoti UTXO modelį išmaniosiose sutartyse.

2019 m. vasario mėn. Stanfordo universiteto ir „Visa Research“ mokslininkų komanda paleistas išankstinis spausdinimas „Zether: link privatumo išmaniųjų sutarčių pasaulyje“. Autoriai pirmą kartą pasiūlė anonimiškumo užtikrinimo būdą sąskaitomis pagrįstose blokų grandinėse ir pateikė dvi išmaniosios sutarties galimybes: konfidencialioms (slepiant likučius ir pervedimo sumas) ir anoniminėms (gavėjo ir siuntėjo slėpimui) operacijoms. Siūloma technologija mums atrodo įdomi ir norėtume pasidalinti jos dizainu, taip pat pakalbėti, kodėl anonimiškumo problema sąskaitų pagrindu veikiančiose blokų grandinėse yra laikoma labai sunkia ir ar autoriams pavyko ją išspręsti iki galo.

Apie šių duomenų modelių struktūrą

UTXO modelyje operacija susideda iš „įvesties“ ir „išvesties“. Tiesioginis „išvedimų“ analogas yra banknotai jūsų piniginėje: kiekvienas „išėjimas“ turi tam tikrą nominalą. Kai kam nors sumokate (sudarote sandorį), išleidžiate vieną ar daugiau „išėjimų“, o jie tampa operacijos „įvestimis“, o „blockchain“ pažymi juos kaip išleistus. Tokiu atveju jūsų mokėjimo gavėjas (arba jūs pats, jei reikia pakeitimų) gauna naujai sugeneruotas „išvestis“. Schematiškai tai gali būti pavaizduota taip:

Apie anonimiškumą paskyros pagrindu veikiančiose blokų grandinėse

Sąskaita pagrįstos blokų grandinės nustatomos panašiai kaip jūsų banko sąskaita. Jie veikia tik pagal jūsų sąskaitoje esančią sumą ir pervedimo sumą. Kai pervedate tam tikrą sumą iš savo sąskaitos, nedegate jokių „išvadų“, tinklui nereikia atsiminti, kurios monetos išleidžiamos, o kurios ne. Paprasčiausiu atveju tikrinant operaciją reikia patikrinti siuntėjo parašą ir sumą jo balanse:

Apie anonimiškumą paskyros pagrindu veikiančiose blokų grandinėse

Technologijų analizė

Toliau kalbėsime apie tai, kaip Zether paslepia operacijų sumą, gavėją ir siuntėją. Aprašydami jos veikimo principus, atkreipsime dėmesį į konfidencialios ir anoniminės versijos skirtumus. Kadangi paskyromis pagrįstose blokų grandinėse privatumą užtikrinti daug lengviau, kai kurie anonimizacijos keliami apribojimai nebus svarbūs konfidencialiajai technologijos versijai.

Slėpti likučius ir pervedimo sumas

Zether naudoja šifravimo schemą likučiams ir sumoms užšifruoti El Gamalas. Tai veikia taip. Kai Alisa nori išsiųsti Bobą b monetos pagal adresą (jos viešasis raktas) Y, ji pasirenka atsitiktinį skaičių r ir užšifruoja sumą:

Apie anonimiškumą paskyros pagrindu veikiančiose blokų grandinėse
kur C - užšifruota suma, D - pagalbinė vertė, reikalinga šiai sumai iššifruoti, G - fiksuotas elipsės kreivės taškas, kai padauginamas slaptasis raktas, iš kurio gaunamas viešasis raktas.

Kai Bobas gauna šias reikšmes, jis tiesiog prideda jas į savo balansą, užšifruotą tokiu pačiu būdu, kuris yra patogus šiai schemai.

Panašiai Alisa iš savo balanso atima tas pačias reikšmes, tik kaip Y naudoja savo viešąjį raktą.

Adresato ir siuntėjo slėpimas

„Išvedimų“ maišymas UTXO pasirodė kriptovaliutų aušroje ir padeda paslėpti siuntėją. Norėdami tai padaryti, pats siuntėjas, atlikdamas pervedimą, blokų grandinėje surenka atsitiktinius „išėjimus“ ir sumaišo juos su savo. Tada jis pasirašo „išvestis“ žiediniu parašu, kriptografiniu mechanizmu, leidžiančiu įtikinti tikrintoją, kad siuntėjo monetos yra tarp susijusių „išėjimų“. Pačios monetos, žinoma, neišleidžiamos.

Tačiau norėdami paslėpti gavėją, negalėsime generuoti netikrų „išvadų“. Todėl UTXO kiekviena „išvestis“ turi savo unikalų adresą ir yra kriptografiškai susieta su šių monetų gavėjo adresu. Šiuo metu niekaip nepavyksta atskleisti ryšio tarp unikalaus „išėjimo“ adreso ir gavėjo adreso, nežinant jo slaptųjų raktų.

Paskyra pagrįstame modelyje negalime naudoti vienkartinių adresų (kitaip tai jau bus „išėjimų“ modelis). Todėl gavėjas ir siuntėjas turi būti sumaišyti tarp kitų blokų grandinės paskyrų. Tuo pačiu metu iš mišrių sąskaitų atimama užšifruota 0 monetų (arba pridedama 0, jei gavėjas yra sumaišytas), faktiškai nekeičiant jų tikrojo likučio.

Kadangi ir siuntėjas, ir gavėjas visada turi nuolatinį adresą, čia atsiranda būtinybė maišymui naudoti tas pačias grupes perkeliant į tuos pačius adresus. Tai lengviau pamatyti pateikus pavyzdį.

Tarkime, Alisa nusprendžia paaukoti Bobo labdaros fondui, bet nori, kad šis pervedimas liktų anonimiškas išoriniam stebėtojui. Tada, norėdama užsimaskuoti siuntėjo lauke, ji patenka ir į Adomo ir Adelės sąskaitas. Ir paslėpti Bobą gavėjo lauke, papildomai Beno ir Billo sąskaitas. Atlikdama kitą dalį, Alisa nusprendė šalia jos parašyti Aleksą ir Amandą, o šalia Bobo – Bruce'ą ir Benjeną. Šiuo atveju, analizuojant blokų grandinę šiuose dviejuose sandoriuose, yra tik viena susikertanti dalyvių pora - Alisa ir Bobas, kuri deanonimizuoja šias operacijas.

Apie anonimiškumą paskyros pagrindu veikiančiose blokų grandinėse

Sandorių lenktynės

Kaip jau minėjome, norėdamas paslėpti savo likutį sąskaitomis pagrįstose sistemose, vartotojas užšifruoja savo likutį ir pervedimo sumą. Tuo pačiu jis turi įrodyti, kad jo sąskaitos likutis išlieka neneigiamas. Problema ta, kad sudarydamas operaciją vartotojas sukuria įrodymą apie jo einamosios sąskaitos būseną. Bet kas atsitiks, jei Bobas atsiųs sandorį Alisai ir jis bus priimtas anksčiau nei Alisa? Tada Alisos sandoris bus laikomas negaliojančiu, nes balanso įrodymas buvo sukurtas prieš priimant Bobo sandorį.

Apie anonimiškumą paskyros pagrindu veikiančiose blokų grandinėse

Pirmas sprendimas, atsirandantis tokioje situacijoje, yra sąskaitos užšaldymas, kol bus atlikta operacija. Tačiau šis metodas netinka, nes be tokios problemos sprendimo sudėtingumo paskirstytoje sistemoje, anoniminėje schemoje nebus aišku, kieno paskyrą blokuoti.

Kad išspręstų šią problemą, technologija atskiria įeinančias ir išeinančias operacijas: lėšų išleidimas iš karto veikia balansą, o įplaukos – atidėtą. Tam įvedama „epochos“ sąvoka – fiksuoto dydžio blokų grupė. Dabartinė „epocha“ nustatoma padalijus bloko aukštį iš grupės dydžio. Apdorojant operaciją, tinklas nedelsdamas atnaujina siuntėjo likutį, o gavėjo lėšas prideda prie kaupimo. Sukauptos lėšos gavėjui prieinamos tik prasidėjus naujai „epochai“.

Dėl to vartotojas gali siųsti operacijas nepriklausomai nuo to, kaip dažnai jis gauna lėšų (žinoma, kiek leidžia jo likutis). Epochos dydis nustatomas atsižvelgiant į tai, kaip greitai blokai plinta tinkle ir kaip greitai operacija patenka į bloką.

Šis sprendimas gerai veikia konfidencialių pervedimų atveju, tačiau atliekant anoniminius sandorius, kaip matysime vėliau, kyla rimtų problemų.

Apsauga nuo pakartotinių atakų

Sąskaita pagrįstose blokų grandinėse kiekviena operacija pasirašoma siuntėjo privačiu raktu, kuris įtikina tikrintoją, kad operacija nebuvo pakeista ir ją sukūrė šio rakto savininkas. Bet ką daryti, jei užpuolikas, kuris klausėsi perdavimo kanalo, perima šį pranešimą ir išsiunčia lygiai tą patį antrą? Tikriklis patikrins operacijos parašą ir įsitikins jos autoryste, o tinklas vėl nurašys tą pačią sumą iš siuntėjo likučio.

Ši ataka vadinama pakartojimo ataka. UTXO modelyje tokios atakos nėra aktualios, nes užpuolikas bandys panaudoti panaudotus išėjimus, kurie savaime negalioja ir yra tinklo atmesti.

Kad taip nenutiktų, į operaciją įterpiamas laukas su atsitiktiniais duomenimis, kuris vadinamas nonce arba tiesiog „druska“. Iš naujo siųsdamas operaciją su „druska“, tikrintojas patikrina, ar šis nebuvimas buvo naudojamas anksčiau, ir, jei ne, mano, kad ši operacija yra tinkama. Kad „blockchain“ nebūtų saugoma visa vartotojo nonces istorija, pačioje pirmojoje operacijoje ji paprastai prilyginama nuliui, o vėliau padidinama vienu. Tinklui tereikia patikrinti, ar naujos operacijos nonce skiriasi nuo ankstesnės.

Anoniminio pervedimo schemoje iškyla sandorių nebuvimo patvirtinimo problema. Negalime tiesiogiai susieti nonce su siuntėjo adresu, nes akivaizdu, kad tai deanonimizuoja perdavimą. Taip pat negalime pridėti vieno prie visų dalyvaujančių paskyrų, nes tai gali prieštarauti kitiems vykdomiems pervedimams.

Zether autoriai siūlo generuoti nonce kriptografiškai, priklausomai nuo „epochos“. Pavyzdžiui:

Apie anonimiškumą paskyros pagrindu veikiančiose blokų grandinėse
Čia x yra slaptasis siuntėjo raktas ir Gepochas — papildomas epochos generatorius, gaunamas sumaišius eilutę, pvz., „Zether +“. Dabar problema lyg ir išspręsta – mes neatskleidžiame siuntėjo nebuvimo ir nesikišame į neįsitraukusių dalyvių niekšybes. Tačiau šis metodas nustato rimtą apribojimą: viena sąskaita gali siųsti ne daugiau kaip vieną operaciją per „epochą“. Ši problema, deja, lieka neišspręsta ir šiuo metu anoniminė Zether versija, mūsų nuomone, yra sunkiai tinkama naudoti.

Nulinių žinių įrodymų sudėtingumas

UTXO siuntėjas turi įrodyti tinklui, kad neišleidžia neigiamos sumos, kitaip tampa įmanoma iš oro generuoti naujas monetas (kodėl tai įmanoma, rašėme viename iš ankstesnių straipsniai). Taip pat žiediniu parašu pasirašyti „įėjimus“, įrodančius, kad tarp minkomų monetų yra ir jam priklausančių lėšų.

Anoniminėje sąskaitomis pagrįstos blokų grandinės versijoje įrodomosios išraiškos yra daug sudėtingesnės. Siuntėjas įrodo, kad:

  1. Siunčiama suma yra teigiama;
  2. Likutis išlieka neneigiamas;
  3. Siuntėjas teisingai užšifravo pervedimo sumas (įskaitant nulius vienetų);
  4. Likučio likutis keičiasi tik siuntėjui ir gavėjui;
  5. Siuntėjas turi slaptą savo paskyros raktą ir jis tikrai yra siuntėjų sąraše (tarp dalyvaujančių);
  6. Sandorio metu naudota noce yra teisinga.

Tokiam sudėtingam įrodymui autoriai naudoja mišinį Bulletproof (vienas iš autorių, beje, dalyvavo jį kuriant) ir Sigma protokolas, kuris vadinamas Sigma kulkomis. Formalus tokio teiginio įrodymas yra gana sudėtinga užduotis ir tai labai apriboja žmonių, norinčių įdiegti technologiją, skaičių.

Rezultatas?

Mūsų nuomone, „Zether“ dalis, kuri suteikia privatumą paskyros blokų grandinėms, gali būti naudojama dabar. Tačiau šiuo metu anoniminė technologijos versija nustato rimtus jos naudojimo apribojimus ir jos įgyvendinimo sudėtingumą. Tačiau nereikia nuvertinti, kad autoriai jį išleido tik prieš kelis mėnesius ir galbūt kas nors kitas ras sprendimą šiandien egzistuojančioms problemoms. Juk taip daromas mokslas.

Šaltinis: www.habr.com

Добавить комментарий