O anonymite v blockchainoch založených na účtoch

Téma anonymity v kryptomenách nás zaujíma už dlhšie a snažíme sa sledovať vývoj technológií v tejto oblasti. V našich článkoch sme už podrobne rozobrali princípy fungovania dôverné transakcie v Monero, a tiež vykonaná porovnávací prehľad existujúce technológie v tejto oblasti. Všetky anonymné kryptomeny sú však dnes postavené na dátovom modeli, ktorý navrhuje Bitcoin – Unspent Transaction Output (ďalej len UTXO). Pre blockchainy založené na účtoch, ako je Ethereum, existujúce riešenia na implementáciu anonymity a dôvernosti (napr. Mobius alebo aztécky) sa pokúsili replikovať model UTXO v smart kontraktoch.

Vo februári 2019 skupina výskumníkov zo Stanfordskej univerzity a Visa Research prepustený predtlač "Zether: Smerom k súkromiu vo svete inteligentných zmlúv." Autori ako prví navrhli prístup k zabezpečeniu anonymity v blockchainoch založených na účtoch a predstavili dve verzie inteligentnej zmluvy: pre dôverné (skrytie zostatkov a čiastok prevodu) a anonymné (skrytie príjemcu a odosielateľa) transakcie. Navrhovanú technológiu považujeme za zaujímavú a radi by sme sa podelili o jej dizajn, ako aj o tom, prečo je problém anonymity v blockchainoch založených na účtoch považovaný za veľmi zložitý a či sa ho autorom podarilo úplne vyriešiť.

O štruktúre týchto dátových modelov

V modeli UTXO sa transakcia skladá zo „vstupov“ a „výstupov“. Priamou analógiou „výstupov“ sú účty vo vašej peňaženke: každý „výstup“ má nejakú nominálnu hodnotu. Keď niekomu zaplatíte (vytvoríte transakciu), miniete jeden alebo viacero „výstupov“, v takom prípade sa stanú „vstupmi“ transakcie a blockchain ich označí ako vynaložené. V tomto prípade prijímateľ vašej platby (alebo vy sami, ak potrebujete zmenu) dostáva novovygenerované „výstupy“. Schematicky to možno znázorniť takto:

O anonymite v blockchainoch založených na účtoch

Blockchainy založené na účtoch sú štruktúrované podobne ako váš bankový účet. Zaoberajú sa len sumou na vašom účte a sumou prevodu. Keď prevediete nejakú sumu z účtu, nespálite žiadne „výstupy“, sieť si nemusí pamätať, ktoré coiny boli minulé a ktoré nie. V najjednoduchšom prípade overenie transakcie spočíva v kontrole podpisu odosielateľa a sumy na jeho zostatku:

O anonymite v blockchainoch založených na účtoch

Analýza technológie

Ďalej si povieme, ako Zether skrýva sumu transakcie, príjemcu a odosielateľa. Pri popise princípov jej fungovania si všimneme rozdiely v dôvernej a anonymnej verzii. Keďže je oveľa jednoduchšie zabezpečiť dôvernosť v blockchainoch založených na účtoch, niektoré obmedzenia uložené anonymizáciou nebudú pre dôvernú verziu technológie relevantné.

Skrytie zostatkov a prevodných súm

Na šifrovanie zostatkov a prevodu čiastok v Zether sa používa šifrovacia schéma El Gamal. Funguje to nasledovne. Keď Alice chce poslať Boba b mince podľa adresy (jeho verejný kľúč) Y, vyberie náhodné číslo r a zašifruje množstvo:

O anonymite v blockchainoch založených na účtoch
kde C - zašifrované množstvo, D - pomocná hodnota potrebná na dešifrovanie tohto množstva, G - pevný bod na eliptickej krivke, po vynásobení tajným kľúčom sa získa verejný kľúč.

Keď Bob dostane tieto hodnoty, jednoducho ich pridá do svojho zašifrovaného zostatku rovnakým spôsobom, a preto je táto schéma vhodná.

Podobne Alice odpočítava rovnaké hodnoty zo svojej bilancie, iba ako Y používa váš verejný kľúč.

Skrytie príjemcu a odosielateľa

Miešanie „výstupov“ v UTXO sa datuje do začiatkov kryptomien a pomáha skrývať odosielateľa. Za týmto účelom odosielateľ sám pri prevode zhromažďuje náhodné „výstupy“ v blockchaine a mieša ich so svojimi vlastnými. Ďalej podpíše „výstupy“ kruhovým podpisom – kryptografickým mechanizmom, ktorý mu umožňuje presvedčiť overovateľa, že medzi „výstupmi“ sú prítomné aj mince odosielateľa. Samotné zmiešané mince sa, samozrejme, neutrácajú.

Nebudeme však môcť generovať falošné výstupy na skrytie príjemcu. Preto má v UTXO každý „výstup“ svoju jedinečnú adresu a je kryptograficky prepojená s adresou príjemcu týchto mincí. V súčasnosti neexistuje spôsob, ako identifikovať vzťah medzi jedinečnou výstupnou adresou a adresou príjemcu bez znalosti jej tajných kľúčov.

V modeli založenom na účte nemôžeme použiť jednorazové adresy (inak to už bude model „výstupov“). Preto musí byť príjemca a odosielateľ zmiešaný medzi ostatnými účtami v blockchaine. V tomto prípade sa zo zmiešaných účtov odpíše zašifrovaná 0 mincí (alebo sa pridá 0, ak je príjemca zmiešaný), bez toho, aby sa skutočne zmenil ich skutočný zostatok.

Keďže odosielateľ aj príjemca majú vždy trvalú adresu, je potrebné pri prenose na rovnaké adresy použiť rovnaké skupiny na miešanie. Je ľahšie sa na to pozrieť na príklade.

Povedzme, že Alice sa rozhodne prispieť na Bobovu charitu, ale uprednostňuje, aby prevod zostal anonymný pre vonkajšieho pozorovateľa. Potom, aby sa zamaskovala v poli odosielateľa, vstupuje aj do účtov Adama a Adele. A ak chcete skryť Boba, pridajte účty Bena a Billa do poľa príjemcu. Ako ďalší príspevok sa Alice rozhodla napísať vedľa seba Alexa a Amandu a vedľa Boba Brucea a Benjena. V tomto prípade pri analýze blockchainu v týchto dvoch transakciách existuje iba jeden pretínajúci sa pár účastníkov - Alice a Bob, ktorý tieto transakcie deanonymizuje.

O anonymite v blockchainoch založených na účtoch

Transakčné preteky

Ako sme už spomenuli, na skrytie vášho zostatku v systémoch založených na účtoch používateľ zašifruje svoj zostatok a sumu prevodu. Zároveň musí preukázať, že zostatok na jeho účte zostáva nezáporný. Problém je v tom, že pri vytváraní transakcie si používateľ vytvorí dôkaz o aktuálnom stave účtu. Čo sa stane, ak Bob pošle transakciu Alici a tá bude prijatá skôr, ako tá, ktorú poslala Alice? Potom sa Alicina transakcia bude považovať za neplatnú, pretože doklad o zostatku bol zostavený pred prijatím Bobovej transakcie.

O anonymite v blockchainoch založených na účtoch

Prvým rozhodnutím, ktoré v takejto situácii prichádza, je zmrazenie účtu, kým sa transakcia neuskutoční. Tento prístup však nie je vhodný, pretože okrem zložitosti riešenia takéhoto problému v distribuovanom systéme nebude v anonymnej schéme jasné, koho účet zablokovať.

Na vyriešenie tohto problému technológia oddeľuje prichádzajúce a odchádzajúce transakcie: výdavky majú okamžitý vplyv na súvahu, zatiaľ čo príjmy majú oneskorený účinok. Na tento účel sa zavádza pojem „epocha“ - skupina blokov pevnej veľkosti. Aktuálna „epocha“ sa určí vydelením výšky bloku veľkosťou skupiny. Pri spracovaní transakcie sieť okamžite aktualizuje zostatok odosielateľa a ukladá prostriedky príjemcu do zásobníka. Nahromadené prostriedky sú k dispozícii príjemcovi až vtedy, keď sa začne nová „éra“.

Výsledkom je, že používateľ môže odosielať transakcie bez ohľadu na to, ako často prostriedky prijíma (samozrejme, pokiaľ to jeho zostatok dovoľuje). Veľkosť epochy sa určuje na základe toho, ako rýchlo sa bloky šíria sieťou a ako rýchlo transakcia vstúpi do bloku.

Toto riešenie funguje dobre pre dôverné prevody, ale pri anonymných transakciách, ako uvidíme neskôr, spôsobuje vážne problémy.

Ochrana proti opakovaným útokom

V blockchainoch založených na účtoch je každá transakcia podpísaná súkromným kľúčom odosielateľa, ktorý presvedčí overovateľa, že transakcia nebola upravená a bola vytvorená vlastníkom tohto kľúča. Čo ak však útočník, ktorý počúval prenosový kanál, zachytí túto správu a odošle presne tú istú druhú? Overovateľ overí podpis transakcie a presvedčí sa o jej autorstve a sieť opäť odpíše rovnakú sumu zo zostatku odosielateľa.

Tento útok sa nazýva opakovaný útok. V modeli UTXO nie sú takéto útoky relevantné, pretože útočník sa pokúsi využiť vyčerpané výstupy, čo samo o sebe nie je platné a sieť to odmietne.

Aby sa tomu zabránilo, je do transakcie zabudované pole s náhodnými údajmi, ktoré sa nazýva nonce alebo jednoducho „soľ“. Pri opätovnom odoslaní transakcie so soľou overovateľ zisťuje, či sa už predtým použil nonce, a ak nie, považuje transakciu za platnú. Aby sa do blockchainu neukladala celá história používateľských nonces, zvyčajne sa pri prvej transakcii nastaví na nulu a potom sa zvýši o jednotku. Sieť môže kontrolovať iba to, či sa nová transakcia nelíši od predchádzajúcej po jednej.

V schéme anonymného prevodu vzniká problém validácie transakcií. Nemôžeme výslovne viazať nonce na adresu odosielateľa, pretože to samozrejme deanonymizuje prevod. Nemôžeme tiež pridať jeden k nonces všetkých zúčastnených účtov, pretože to môže byť v konflikte s inými spracovávanými prevodmi.

Autori Zetheru navrhujú generovať nonce kryptograficky v závislosti od „epochy“. Napríklad:

O anonymite v blockchainoch založených na účtoch
Tu x je tajný kľúč odosielateľa a Gepoch — dodatočný generátor pre epochu získaný hašovaním reťazca v tvare „Zether + “. Teraz sa zdá, že problém je vyriešený – neodhaľujeme nonce odosielateľa a nezasahujeme do nonce nezúčastnených účastníkov. Tento prístup však predstavuje vážne obmedzenie: jeden účet nemôže odoslať viac ako jednu transakciu za „epochu“. Tento problém, žiaľ, zostáva nevyriešený a v súčasnosti je podľa nášho názoru anonymná verzia Zether ťažko vhodná na použitie.

Zložitosť dôkazov nulových znalostí

V UTXO musí odosielateľ dokázať sieti, že neutráca zápornú sumu, inak bude možné generovať nové coiny z ničoho (prečo je to možné, sme písali v jednom z predchádzajúcich články). A tiež podpíšte „vstupy“ prsteňovým podpisom, aby ste dokázali, že medzi miešanými mincami sú finančné prostriedky, ktoré mu patria.

V anonymnej verzii blockchainu založeného na účtoch sú výrazy pre dôkaz oveľa zložitejšie. Odosielateľ dokazuje, že:

  1. Odoslaná suma je kladná;
  2. Zostatok zostáva nezáporný;
  3. Odosielateľ správne zašifroval sumy prevodu (vrátane nuly);
  4. Zostatok na zostatku sa mení iba pre odosielateľa a príjemcu;
  5. Odosielateľ vlastní súkromný kľúč k svojmu účtu a v skutočnosti je na zozname odosielateľov (medzi zúčastnenými);
  6. Hodnota Noce použitá v transakcii je zložená správne.

Na takýto komplexný dôkaz autori používajú zmes nepriestrelný (na jej tvorbe sa mimochodom podieľal jeden z autorov) a Sigma protokol, ktoré sa nazývajú Sigma-guľky. Formálny dôkaz takéhoto tvrdenia je pomerne náročná úloha a značne obmedzuje počet ľudí ochotných implementovať technológiu.

Výsledok?

Podľa nášho názoru sa časť Zether, ktorá prináša súkromie do blockchainov založených na účtoch, dá použiť práve teraz. V súčasnosti však anonymná verzia technológie ukladá vážne obmedzenia na jej používanie a zložitosť jej implementácie. Netreba však podceňovať, že ju autori vydali len pred pár mesiacmi a možno ešte niekto nájde riešenie problémov, ktoré dnes existujú. Veď takto sa robí veda.

Zdroj: hab.com

Pridať komentár