За анонимноста во блокчејновите базирани на сметки

Долго време сме заинтересирани за темата за анонимност во криптовалутите и се обидуваме да го следиме развојот на технологиите во оваа област. Во нашите написи веќе детално разговаравме за принципите на работа доверливи трансакции во Монеро, а исто така се врши компаративен преглед технологии кои постојат во оваа област. Сепак, сите анонимни криптовалути денес се изградени на моделот на податоци предложен од Биткоин - Излез на непотрошени трансакции (во натамошниот текст UTXO). За блокчејнови базирани на сметки како Ethereum, постоечките решенија за спроведување на анонимност и доверливост (на пример, Mobius или Ацтеките) се обиде да го реплицира моделот UTXO во паметните договори.

Во февруари 2019 година, група истражувачи од Универзитетот Стенфорд и Visa Research ослободен предпечатење „Зетер: Кон приватноста во светот на паметните договори“. Авторите беа првите кои предложија пристап за обезбедување анонимност во блокчејновите базирани на сметки и претставија две верзии на паметен договор: за доверливи (криење салда и износи на трансфер) и анонимни (криење на примачот и испраќачот) трансакции. Сметаме дека предложената технологија е интересна и би сакале да го споделиме нејзиниот дизајн, како и да разговараме за тоа зошто проблемот со анонимноста во блокчејновите базирани на сметки се смета за многу тежок и дали авторите успеале целосно да го решат.

За структурата на овие модели на податоци

Во моделот UTXO, трансакцијата се состои од „влезни“ и „излези“. Директен аналог на „излези“ се сметките во вашиот паричник: секој „излез“ има одредена деноминација. Кога плаќате некому (формирате трансакција), трошите еден или повеќе „излези“, во кој случај тие стануваат „влезни“ на трансакцијата, а блокчејнот ги означува како потрошени. Во овој случај, примачот на вашата уплата (или вие самите, доколку ви треба промена) ги добиваат новогенерираните „излези“. Ова шематски може да се претстави вака:

За анонимноста во блокчејновите базирани на сметки

Блокчејновите базирани на сметки се структурирани слично како вашата банкарска сметка. Тие се занимаваат само со износот на вашата сметка и износот на трансферот. Кога префрлате одредена сума од вашата сметка, не согорувате никакви „излези“, мрежата не треба да запомни кои монети се потрошени, а кои не. Во наједноставниот случај, проверката на трансакцијата се сведува на проверка на потписот на испраќачот и износот на неговото салдо:

За анонимноста во блокчејновите базирани на сметки

Анализа на технологијата

Следно, ќе разговараме за тоа како Zether ги крие износот на трансакцијата, примачот и испраќачот. Додека ги опишуваме принципите на неговото функционирање, ќе ги забележиме разликите во доверливите и анонимните верзии. Бидејќи е многу полесно да се обезбеди доверливост во блокчејновите базирани на сметки, некои од ограничувањата наметнати со анонимизација нема да бидат релевантни за доверливата верзија на технологијата.

Сокривање салда и износи на трансфери

Шема за шифрирање се користи за шифрирање на салда и пренос на износи во Zether Ел Гамал. Работи на следниов начин. Кога Алис сака да го испрати Боб b монети по адреса (неговиот јавен клуч) Y, таа избира случаен број r и ја шифрира сумата:

За анонимноста во блокчејновите базирани на сметки
каде што C - шифрирана сума, D - помошна вредност неопходна за дешифрирање на оваа сума, G - фиксна точка на елиптичната крива, кога ќе се помножи со тајниот клуч, се добива јавниот клуч.

Кога Боб ги добива овие вредности, тој едноставно ги додава на шифрираната рамнотежа на ист начин, поради што оваа шема е погодна.

Слично на тоа, Алиса ги одзема истите вредности од нејзината рамнотежа, само како Y го користи вашиот јавен клуч.

Сокривање на примачот и испраќачот

Мешањето на „излези“ во UTXO датира од раните денови на криптовалутите и помага да се скрие испраќачот. За да го направите ова, самиот испраќач, кога прави трансфер, собира случајни „излези“ во блокчејнот и ги меша со своите. Потоа, тој ги потпишува „излезите“ со прстенест потпис - криптографски механизам што му овозможува да го убеди проверувачот дека монетите на испраќачот се присутни меѓу вклучените „излези“. Самите измешани монети, се разбира, не се трошат.

Сепак, нема да можеме да генерираме лажни излези за да го скриеме примачот. Затоа, во UTXO, секој „излез“ има своја единствена адреса и криптографски е поврзан со адресата на примачот на овие монети. Во моментов, не постои начин да се идентификува врската помеѓу единствената излезна адреса и адресата на примачот без да се знаат нејзините тајни клучеви.

Во моделот базиран на сметка, не можеме да користиме еднократни адреси (во спротивно, тој веќе ќе биде модел за „излез“). Затоа, примачот и испраќачот треба да се мешаат меѓу другите сметки во блокчејнот. Во овој случај, шифрирани монети од 0 се задолжуваат од мешаните сметки (или 0 се додаваат ако примачот е измешан), без всушност да се промени нивното вистинско салдо.

Бидејќи и испраќачот и примачот секогаш имаат постојана адреса, станува неопходно да се користат истите групи за мешање при префрлање на истите адреси. Полесно е да се погледне ова со пример.

Да речеме дека Алис одлучила да придонесе во добротворната организација на Боб, но претпочита трансферот да остане анонимен за надворешен набљудувач. Потоа, за да се маскира во полето на испраќачот, влегува и во сметките на Адам и Адел. И за да го скриете Боб, додајте ги сметките на Бен и Бил во полето на примачот. Правејќи го следниот придонес, Алис реши да ги напише Алекс и Аманда до неа, а Брус и Бенџен до Боб. Во овој случај, кога се анализира блокчејнот, во овие две трансакции има само еден вкрстен пар учесници - Алиса и Боб, што ги деанонимизира овие трансакции.

За анонимноста во блокчејновите базирани на сметки

Трансакциски трки

Како што веќе споменавме, за да го скриете вашето салдо во системите засновани на сметка, корисникот го шифрира своето салдо и износот на трансферот. Во исто време, тој мора да докаже дека состојбата на неговата сметка останува ненегативна. Проблемот е што при креирањето на трансакција, корисникот гради доказ за статусот на неговата тековна сметка. Што ќе се случи ако Боб испрати трансакција до Алиса, и таа биде прифатена пред онаа што ја испратила Алис? Тогаш трансакцијата на Алис ќе се смета за неважечка, бидејќи доказот за рамнотежа бил изграден пред да биде прифатена трансакцијата на Боб.

За анонимноста во блокчејновите базирани на сметки

Првата одлука што доаѓа во таква ситуација е да се замрзне сметката додека не се изврши трансакцијата. Но, овој пристап не е соодветен, бидејќи покрај сложеноста на решавање на таков проблем во дистрибуиран систем, во анонимна шема нема да биде јасно чија сметка да се блокира.

За да се реши овој проблем, технологијата ги одделува дојдовните и појдовните трансакции: трошењето има моментален ефект врз билансот на состојба, додека приходите имаат задоцнет ефект. За да го направите ова, се воведува концептот на „епоха“ - група блокови со фиксна големина. Тековната „епоха“ се одредува со делење на висината на блокот со големината на групата. Кога обработува трансакција, мрежата веднаш го ажурира билансот на испраќачот и ги складира средствата на примачот во резервоар за складирање. Акумулираните средства се ставаат на располагање на примачот само кога започнува нова „ера“.

Како резултат на тоа, корисникот може да испраќа трансакции без оглед на тоа колку често се примаат средства (колку што му дозволува салдото, се разбира). Големината на епохата се одредува врз основа на тоа колку брзо блоковите се шират низ мрежата и колку брзо трансакцијата влегува во блок.

Ова решение добро функционира за доверливи трансфери, но со анонимните трансакции, како што ќе видиме подоцна, создава сериозни проблеми.

Заштита од напади со повторување

Во блокчејновите базирани на сметка, секоја трансакција е потпишана од приватниот клуч на испраќачот, што го убедува проверувачот дека трансакцијата не е изменета и дека е креирана од сопственикот на овој клуч. Но, што ако напаѓачот кој го слушал каналот за пренос ја пресретне оваа порака и ја испрати токму истата втора? Проверувачот ќе го потврди потписот на трансакцијата и ќе се увери во неговото авторство, а мрежата повторно ќе ја отпише истата сума од билансот на испраќачот.

Овој напад се нарекува напад со повторување. Во моделот UTXO, таквите напади не се релевантни, бидејќи напаѓачот ќе се обиде да користи потрошени излези, што само по себе не е валидно и е одбиено од мрежата.

За да се спречи тоа да се случи, во трансакцијата е вградено поле со случајни податоци, кое се нарекува нонс или едноставно „сол“. Кога повторно испраќа трансакција со сол, верификаторот гледа дали нонсата била користена претходно и, ако не, ја смета трансакцијата валидна. За да не се складира целата историја на кориснички нонси во блокчејнот, обично во првата трансакција се поставува еднаква на нула, а потоа се зголемува за еден. Мрежата може само да провери дали нестабилноста на новата трансакција се разликува од претходната една по една.

Во шемата за анонимни трансфери, се јавува проблемот на валидација на трансакциските нонсови. Не можеме експлицитно да го врземе нонцето за адресата на испраќачот, бидејќи, очигледно, ова го деанонимизира преносот. Ние, исто така, не можеме да додадеме една на нецелите на сите сметки што учествуваат, бидејќи тоа може да биде во конфликт со другите трансфери што се обработуваат.

Авторите на Zether предлагаат да се генерира нонцето криптографски, во зависност од „епохата“. На пример:

За анонимноста во блокчејновите базирани на сметки
Тука x е тајниот клуч на испраќачот и Гепоч — дополнителен генератор за епохата, добиен со хеширање на низа од формата „Зетер +“. Сега се чини дека проблемот е решен - не ја откриваме нонсите на испраќачот и не се мешаме во нонсите на неинволвираните учесници. Но, овој пристап наметнува сериозно ограничување: една сметка може да испрати не повеќе од една трансакција по „епоха“. Овој проблем, за жал, останува нерешен и во моментов ја прави анонимната верзија на Zether, според наше мислење, едвај погодна за употреба.

Комплексноста на доказите за нула знаење

Во UTXO, испраќачот мора да и докаже на мрежата дека не троши негативна сума, во спротивно станува возможно да се генерираат нови монети од воздух (зошто е тоа можно, напишавме во една од претходните статии). И потпишете ги „влезовите“ со прстен потпис за да докажете дека меѓу монетите што се мешаат има средства што му припаѓаат.

Во анонимната верзија на блокчејнот заснован на сметка, изразите за докажување се многу посложени. Испраќачот докажува дека:

  1. Испратената сума е позитивна;
  2. Салдото останува ненегативно;
  3. Испраќачот правилно ги шифрирал износите на трансферот (вклучувајќи нула);
  4. Салдото на салдото се менува само за испраќачот и примачот;
  5. Испраќачот го поседува приватниот клуч на неговата сметка и тој всушност е на листата на испраќачи (меѓу вклучените);
  6. Nonce што се користи во трансакцијата е правилно составено.

За таков сложен доказ, авторите користат мешавина Блиндиран (еден од авторите, инаку, учествуваше во неговото создавање) и Сигма протокол, кои се нарекуваат Сигма-куршуми. Формалното докажување на таквата изјава е прилично тешка задача и во голема мера го ограничува бројот на луѓе кои се подготвени да ја имплементираат технологијата.

Резултатот?

Според наше мислење, делот од Zether што носи приватност на блокчејновите базирани на сметки може да се користи токму сега. Но, во моментов, анонимната верзија на технологијата наметнува сериозни ограничувања за нејзината употреба и нејзината сложеност за нејзината имплементација. Сепак, не треба да се отфрли дека авторите го објавија пред само неколку месеци, а можеби некој друг ќе најде решение за проблемите што постојат денес. На крајот на краиштата, вака се прави науката.

Извор: www.habr.com

Додадете коментар