O anonymitě v blockchainech založených na účtech

Téma anonymity v kryptoměnách nás zajímá již delší dobu a snažíme se sledovat vývoj technologií v této oblasti. V našich článcích jsme již podrobně probrali principy fungování důvěrné transakce v Monero a také provedl srovnávací přehled technologií existujících v této oblasti. Všechny anonymní kryptoměny jsou však dnes postaveny na datovém modelu navrženém Bitcoinem – Unspent Transaction Output (dále jen UTXO). Pro blockchainy založené na účtech, jako je Ethereum, stávající řešení pro implementaci anonymity a důvěrnosti (např. Mobius nebo Aztécký) se pokusil replikovat model UTXO v chytrých kontraktech.

V únoru 2019 skupina výzkumníků ze Stanfordské univerzity a Visa Research propuštěn předtisk "Zether: Směrem k soukromí ve světě chytrých smluv." Autoři jako první navrhli přístup k zajištění anonymity v blockchainech založených na účtech a představili dvě verze inteligentní smlouvy: pro důvěrné (skrytí zůstatků a částek převodu) a anonymní (skrytí příjemce a odesílatele) transakce. Navrhovanou technologii považujeme za zajímavou a rádi bychom se s vámi podělili o její design a také o tom, proč je problém anonymity v blockchainech založených na účtech považován za velmi obtížný a zda se jej autorům podařilo plně vyřešit.

O struktuře těchto datových modelů

V modelu UTXO se transakce skládá ze „vstupů“ a „výstupů“. Přímou analogií „výstupů“ jsou účty ve vaší peněžence: každý „výstup“ má nějakou nominální hodnotu. Když někomu platíte (vytváříte transakci), utratíte jeden nebo více „výstupů“, v takovém případě se stanou „vstupy“ transakce a blockchain je označí jako utracené. V tomto případě příjemce vaší platby (nebo vy sami, pokud potřebujete změnu) obdrží nově vygenerované „výstupy“. To lze schematicky znázornit takto:

O anonymitě v blockchainech založených na účtech

Blockchainy založené na účtu jsou strukturovány podobně jako váš bankovní účet. Zabývají se pouze částkou na vašem účtu a částkou převodu. Když převedete nějakou částku z účtu, nespálíte žádné „výstupy“, síť si nemusí pamatovat, které coiny byly utraceny a které ne. V nejjednodušším případě ověření transakce spočívá v kontrole podpisu odesílatele a částky na jeho zůstatku:

O anonymitě v blockchainech založených na účtech

Analýza technologie

Dále si povíme, jak Zether skrývá částku transakce, příjemce a odesílatele. Při popisu principů jeho fungování si všimneme rozdílů v důvěrné a anonymní verzi. Protože je mnohem snazší zajistit důvěrnost v blockchainech založených na účtech, některá omezení uložená anonymizací nebudou pro důvěrnou verzi technologie relevantní.

Skrytí zůstatků a převodních částek

K šifrování zůstatků a převodů částek v Zetheru se používá šifrovací schéma El Gamal. Funguje následovně. Když Alice chce poslat Boba b mince podle adresy (jejího veřejného klíče) Y, vybere náhodné číslo r a zašifruje částku:

O anonymitě v blockchainech založených na účtech
kde C - zašifrované množství, D - pomocná hodnota nezbytná k dešifrování této částky, G - pevný bod na eliptické křivce, po vynásobení tajným klíčem se získá veřejný klíč.

Když Bob tyto hodnoty obdrží, jednoduše je stejným způsobem přidá ke svému zašifrovanému zůstatku, a proto je toto schéma výhodné.

Podobně Alice odečítá stejné hodnoty ze své bilance, pouze jako Y používá váš veřejný klíč.

Skrytí příjemce a odesílatele

Náhodné „výstupy“ v UTXO sahá až do počátků kryptoměn a pomáhá skrývat odesílatele. K tomu odesílatel sám při převodu shromažďuje náhodné „výstupy“ v blockchainu a míchá je se svými. Dále podepisuje „výstupy“ prstenovým podpisem – kryptografickým mechanismem, který mu umožňuje přesvědčit ověřovatele, že mezi zúčastněnými „výstupy“ jsou přítomny mince odesílatele. Samotné smíšené mince se samozřejmě neutrácejí.

Nebudeme však moci generovat falešné výstupy, abychom skryli příjemce. Proto má v UTXO každý „výstup“ svou unikátní adresu a je kryptograficky spojena s adresou příjemce těchto mincí. V tuto chvíli neexistuje způsob, jak identifikovat vztah mezi jedinečnou výstupní adresou a adresou příjemce, aniž bychom znali její tajné klíče.

V modelu založeném na účtu nemůžeme používat jednorázové adresy (jinak se již bude jednat o model „výstupů“). Proto musí být příjemce a odesílatel smícháni mezi ostatními účty v blockchainu. V tomto případě se ze smíšených účtů odečte zašifrovaná 0 mincí (nebo se přidá 0, pokud je příjemce smíšený), aniž by se skutečně změnil jejich skutečný zůstatek.

Vzhledem k tomu, že odesílatel i příjemce mají vždy trvalou adresu, je nutné při přenosu na stejné adresy používat pro míchání stejné skupiny. Je jednodušší se na to podívat na příkladu.

Řekněme, že se Alice rozhodne přispět na Bobovu charitu, ale dává přednost tomu, aby převod zůstal anonymní pro vnějšího pozorovatele. Poté, aby se zamaskovala v poli odesílatele, vstupuje také do účtů Adama a Adele. A chcete-li skrýt Boba, přidejte účty Bena a Billa do pole příjemce. Jako další příspěvek se Alice rozhodla napsat vedle sebe Alex a Amandu a vedle Boba Bruce a Benjena. V tomto případě při analýze blockchainu v těchto dvou transakcích existuje pouze jeden protínající se pár účastníků - Alice a Bob, který tyto transakce deanonymizuje.

O anonymitě v blockchainech založených na účtech

Transakční závody

Jak jsme již zmínili, pro skrytí vašeho zůstatku v systémech založených na účtu uživatel zašifruje svůj zůstatek a částku převodu. Zároveň musí prokázat, že zůstatek na jeho účtu zůstává nezáporný. Problém je v tom, že při vytváření transakce si uživatel sestaví doklad o aktuálním stavu účtu. Co se stane, když Bob pošle transakci Alici a ta bude přijata dříve, než ta odeslaná Alicí? Pak bude transakce Alice považována za neplatnou, protože doklad o zůstatku byl vytvořen před přijetím Bobovy transakce.

O anonymitě v blockchainech založených na účtech

Prvním rozhodnutím, které v takové situaci přichází, je zmrazení účtu, dokud nebude transakce provedena. Tento přístup ale není vhodný, protože kromě složitosti řešení takového problému v distribuovaném systému nebude v anonymním schématu jasné, čí účet zablokovat.

K vyřešení tohoto problému technologie odděluje příchozí a odchozí transakce: výdaje mají okamžitý účinek na rozvahu, zatímco příjmy mají zpožděný účinek. K tomu je zaveden koncept „epochy“ - skupina bloků pevné velikosti. Aktuální "epocha" je určena vydělením výšky bloku velikostí skupiny. Při zpracování transakce síť okamžitě aktualizuje zůstatek odesílatele a uloží prostředky příjemce do zásobníku. Nashromážděné prostředky jsou příjemci zpřístupněny pouze tehdy, když začíná nová „éra“.

Výsledkem je, že uživatel může odesílat transakce bez ohledu na to, jak často jsou prostředky přijímány (samozřejmě pokud to jeho zůstatek umožňuje). Velikost epochy je určena na základě toho, jak rychle se bloky šíří sítí a jak rychle transakce vstoupí do bloku.

Toto řešení funguje dobře pro důvěrné převody, ale u anonymních transakcí, jak uvidíme později, vytváří vážné problémy.

Ochrana proti replay útokům

V blockchainech založených na účtech je každá transakce podepsána soukromým klíčem odesílatele, který přesvědčí ověřovatele, že transakce nebyla upravena a byla vytvořena vlastníkem tohoto klíče. Ale co když útočník, který poslouchal přenosový kanál, zachytí tuto zprávu a odešle přesně stejnou druhou? Ověřovatel ověří podpis transakce a přesvědčí se o jejím autorství a síť znovu odepíše stejnou částku ze zůstatku odesílatele.

Tento útok se nazývá replay útok. V modelu UTXO nejsou takové útoky relevantní, protože se útočník pokusí využít utracené výstupy, což samo o sobě není platné a je sítí odmítnuto.

Aby se tomu zabránilo, je do transakce zabudováno pole s náhodnými daty, které se nazývá nonce nebo jednoduše „sůl“. Při opětovném odesílání transakce se solí ověřovatel zkontroluje, zda již bylo nonce použito, a pokud ne, považuje transakci za platnou. Aby se do blockchainu neukládala celá historie uživatelských nonces, obvykle se hned v první transakci nastaví na nulu a poté se zvýší o jedničku. Síť může pouze zkontrolovat, zda se neexistence nové transakce liší od předchozí transakce.

V anonymním převodním schématu vzniká problém validace transakčních nonces. Nemůžeme výslovně vázat nonce na adresu odesílatele, protože to samozřejmě deanonymizuje převod. Nemůžeme také přidat jeden k nonces všech zúčastněných účtů, protože to může být v konfliktu s jinými zpracovávanými převody.

Autoři Zetheru navrhují generovat nonce kryptograficky, v závislosti na „epochě“. Například:

O anonymitě v blockchainech založených na účtech
Zde x je tajný klíč odesílatele a Gepoch — další generátor pro epochu, získaný hašováním řetězce ve tvaru „Zether +“. Nyní se zdá, že problém je vyřešen – neodhalujeme nonce odesílatele a nezasahujeme do nonce nezúčastněných účastníků. Tento přístup však přináší vážné omezení: jeden účet nemůže odeslat více než jednu transakci za „epochu“. Tento problém bohužel zůstává nevyřešen a v současné době je podle našeho názoru anonymní verze Zether stěží vhodná k použití.

Složitost důkazů nulových znalostí

V UTXO musí odesílatel dokázat síti, že neutrácí zápornou částku, jinak bude možné generovat nové coiny ze vzduchu (proč je to možné, jsme psali v jednom z předchozích články). A také podepsat „vstupy“ prstenovým podpisem, aby prokázal, že mezi míchanými mincemi jsou finanční prostředky, které mu patří.

V anonymní verzi blockchainu založeného na účtu jsou výrazy pro důkaz mnohem složitější. Odesílatel dokazuje, že:

  1. Odeslaná částka je kladná;
  2. Zůstatek zůstává nezáporný;
  3. Odesílatel správně zašifroval částky převodu (včetně nuly);
  4. Zůstatek na zůstatku se mění pouze pro odesílatele a příjemce;
  5. Odesílatel vlastní soukromý klíč ke svému účtu a ve skutečnosti je na seznamu odesílatelů (mezi zúčastněnými);
  6. Nonce použitý v transakci je složen správně.

Pro takto komplexní důkaz autoři používají směs Neprůstřelný (na jeho vzniku se mimochodem podílel jeden z autorů) a Sigma protokol, které se nazývají Sigma-kulky. Formální důkaz takového prohlášení je poměrně obtížný úkol a značně omezuje počet lidí ochotných implementovat technologii.

Výsledek?

Podle našeho názoru lze část Zetheru, která přináší soukromí do blockchainů založených na účtech, použít právě teď. V současné době však anonymní verze technologie ukládá vážná omezení na její použití a složitost při implementaci. Nelze však slevit z toho, že jej autoři vydali teprve před pár měsíci a snad někdo jiný najde řešení problémů, které dnes existují. Ostatně takhle se dělá věda.

Zdroj: www.habr.com

Přidat komentář