Относно анонимността в базираните на акаунти блокчейни

Отдавна се интересуваме от темата за анонимността при криптовалутите и се опитваме да следим развитието на технологиите в тази област. В нашите статии вече разгледахме подробно принципите на работа поверителни транзакции в Monero, а също и извършени сравнителен преглед съществуващи технологии в тази област. Въпреки това, всички анонимни криптовалути днес са изградени върху модела на данни, предложен от биткойн - Изход за неизразходвани транзакции (наричан по-долу UTXO). За базирани на акаунти блокчейни като Ethereum съществуващите решения за прилагане на анонимност и поверителност (напр. Мобиус или Aztec) се опита да възпроизведе модела UTXO в интелигентни договори.

През февруари 2019 г. група изследователи от Станфордския университет и Visa Research освободен предпечат „Zether: Към поверителността в света на интелигентните договори.“ Авторите бяха първите, които предложиха подход за осигуряване на анонимност в базирани на акаунти блокчейни и представиха две версии на интелигентен договор: за поверителни (скриване на салда и суми на превод) и анонимни (скриване на получателя и подателя) транзакции. Намираме предложената технология за интересна и бихме искали да споделим нейния дизайн, както и да поговорим защо проблемът с анонимността в базираните на акаунти блокчейни се счита за много труден и дали авторите са успели да го решат напълно.

Относно структурата на тези модели на данни

В UTXO модела транзакцията се състои от „входове“ и „изходи“. Пряк аналог на „изходите“ са банкнотите в портфейла ви: всеки „изход“ има някаква деноминация. Когато плащате на някого (формирате транзакция), вие харчите един или повече „изходи“, в който случай те стават „входове“ на транзакцията и блокчейнът ги маркира като изразходвани. В този случай получателят на вашето плащане (или вие самите, ако имате нужда от промяна) получава новогенерираните „изходи“. Това може да бъде представено схематично така:

Относно анонимността в базираните на акаунти блокчейни

Базираните на акаунти блокчейни са структурирани подобно на вашата банкова сметка. Те работят само със сумата във вашата сметка и сумата на превода. Когато прехвърлите някаква сума от сметката си, вие не изгаряте никакви „изходи“, мрежата не трябва да помни кои монети са изразходвани и кои не. В най-простия случай проверката на транзакцията се свежда до проверка на подписа на подателя и сумата в неговия баланс:

Относно анонимността в базираните на акаунти блокчейни

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

След това ще говорим за това как Zether скрива сумата на транзакцията, получателя и подателя. Докато описваме принципите на действието му, ще отбележим разликите в поверителния и анонимния вариант. Тъй като е много по-лесно да се гарантира поверителността в базираните на акаунти блокчейни, някои от ограниченията, наложени от анонимизирането, няма да бъдат от значение за поверителната версия на технологията.

Скриване на салда и суми за преводи

Схема за криптиране се използва за криптиране на баланси и суми за прехвърляне в Zether Ел Гамал. Работи по следния начин. Когато Алис иска да изпрати Боб b монети по адрес (публичния му ключ) Y, тя избира произволно число r и криптира сумата:

Относно анонимността в базираните на акаунти блокчейни
където C - криптирана сума, D - спомагателна стойност, необходима за дешифриране на тази сума, G - фиксирана точка на елиптичната крива, като се умножи по секретния ключ се получава публичния ключ.

Когато Боб получи тези стойности, той просто ги добавя към своя криптиран баланс по същия начин, поради което тази схема е удобна.

По същия начин Алис изважда същите стойности от баланса си, само като Y използва вашия публичен ключ.

Скриване на получателя и подателя

Разбъркването на „изходите“ в UTXO датира от ранните дни на криптовалутите и помага да се скрие подателят. За да направи това, самият подател, когато извършва превод, събира произволни „изходи“ в блокчейна и ги смесва със своите. След това той подписва „изходите“ с подпис на пръстена – криптографски механизъм, който му позволява да убеди проверяващия, че монетите на изпращача присъстват сред включените „изходи“. Самите смесени монети, разбира се, не се изразходват.

Ние обаче няма да можем да генерираме фалшиви резултати, за да скрием получателя. Следователно в UTXO всеки „изход“ има свой собствен уникален адрес и е криптографски свързан с адреса на получателя на тези монети. В момента няма начин да се идентифицира връзката между уникалния изходен адрес и адреса на получателя, без да се знаят секретните му ключове.

В модела, базиран на акаунт, не можем да използваме еднократни адреси (в противен случай това вече ще бъде модел за „изходи“). Следователно получателят и подателят трябва да бъдат смесени между другите акаунти в блокчейна. В този случай криптирани 0 монети се дебитират от смесените сметки (или се добавят 0, ако получателят е смесен), без реално да се променя техният реален баланс.

Тъй като и подателят, и получателят винаги имат постоянен адрес, става необходимо да се използват едни и същи групи за смесване при прехвърляне към едни и същи адреси. По-лесно е да разгледате това с пример.

Да кажем, че Алис реши да направи дарение за благотворителната организация на Боб, но предпочита трансферът да остане анонимен за външен наблюдател. След това, за да се маскира в полето на подателя, тя влиза и в акаунтите на Адам и Адел. И за да скриете Боб, добавете акаунтите на Бен и Бил в полето за получател. Правейки следващия принос, Алис реши да напише Алекс и Аманда до себе си, а Брус и Бенджен до Боб. В този случай, когато се анализира блокчейн, в тези две транзакции има само една пресичаща се двойка участници - Алис и Боб, което деанонимизира тези транзакции.

Относно анонимността в базираните на акаунти блокчейни

Транзакционни състезания

Както вече споменахме, за да скрие вашия баланс в системи, базирани на акаунти, потребителят криптира своя баланс и сумата на превода. В същото време той трябва да докаже, че салдото по сметката му остава неотрицателно. Проблемът е, че когато създава транзакция, потребителят изгражда доказателство относно текущото състояние на акаунта си. Какво се случва, ако Боб изпрати транзакция на Алис и тя бъде приета преди тази, изпратена от Алис? Тогава транзакцията на Алис ще се счита за невалидна, тъй като доказателството за баланс е изградено преди транзакцията на Боб да бъде приета.

Относно анонимността в базираните на акаунти блокчейни

Първото решение, което идва в такава ситуация, е да замразите сметката до извършване на транзакцията. Но този подход не е подходящ, тъй като в допълнение към сложността на решаването на такъв проблем в разпределена система, в анонимна схема няма да е ясно чий акаунт да бъде блокиран.

За да реши този проблем, технологията разделя входящите и изходящите транзакции: разходите имат незабавен ефект върху баланса, докато постъпленията имат забавен ефект. За да направите това, се въвежда понятието „епоха“ - група блокове с фиксиран размер. Текущата "епоха" се определя чрез разделяне на височината на блока на размера на групата. Когато обработва транзакция, мрежата незабавно актуализира баланса на подателя и съхранява средствата на получателя в резервоар за съхранение. Натрупаните средства се предоставят на получателя само когато започне нова „ера“.

В резултат на това потребителят може да изпраща транзакции независимо от това колко често се получават средства (доколкото балансът му позволява, разбира се). Размерът на епохата се определя въз основа на това колко бързо блоковете се разпространяват през мрежата и колко бързо транзакцията влиза в блок.

Това решение работи добре за поверителни трансфери, но с анонимни транзакции, както ще видим по-късно, създава сериозни проблеми.

Защита срещу повторни атаки

В базираните на акаунти блокчейни всяка транзакция се подписва от частния ключ на изпращача, което убеждава верификатора, че транзакцията не е била модифицирана и е създадена от собственика на този ключ. Но какво ще стане, ако нападател, който е слушал предавателния канал, прихване това съобщение и изпрати точно същото второ? Верификаторът ще провери подписа на транзакцията и ще бъде убеден в нейното авторство, а мрежата ще отпише отново същата сума от баланса на подателя.

Тази атака се нарича повторна атака. В UTXO модела такива атаки не са подходящи, тъй като атакуващият ще се опита да използва изразходвани изходи, което само по себе си не е валидно и се отхвърля от мрежата.

За да се предотврати това, в транзакцията е вградено поле с произволни данни, което се нарича nonce или просто „сол“. При повторно подаване на транзакция със сол, верификаторът проверява дали nonce е бил използван преди и, ако не, счита транзакцията за валидна. За да не се съхранява цялата история на потребителските nonces в блокчейна, обикновено в първата транзакция тя се задава равна на нула и след това се увеличава с единица. Мрежата може само да провери дали nonce на новата транзакция се различава от предишната една по една.

В схемата за анонимно прехвърляне възниква проблемът с валидирането на nonces транзакция. Не можем изрично да обвържем nonce с адреса на подателя, тъй като, очевидно, това деанонимизира прехвърлянето. Също така не можем да добавим един към nonces на всички участващи акаунти, тъй като това може да е в конфликт с други обработвани трансфери.

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

Относно анонимността в базираните на акаунти блокчейни
Тук x е секретният ключ на изпращача и Гепоч — допълнителен генератор за епохата, получен чрез хеширане на низ във формата 'Zether +'. Сега проблемът изглежда е решен - ние не разкриваме nonce на подателя и не се намесваме в nonce на неучастващи участници. Но този подход налага сериозно ограничение: един акаунт може да изпрати не повече от една транзакция на „епоха“. Този проблем, за съжаление, остава неразрешен и в момента прави анонимната версия на Zether, по наше мнение, едва ли подходяща за използване.

Сложността на доказателствата с нулево знание

В UTXO изпращачът трябва да докаже на мрежата, че не харчи отрицателна сума, в противен случай става възможно генерирането на нови монети от нищото (защо това е възможно, написахме в един от предишните статии). И също така подпишете „входовете“ с пръстен подпис, за да докажете, че сред смесените монети има средства, които му принадлежат.

В анонимната версия на блоковата верига, базирана на акаунт, изразите за доказателство са много по-сложни. Подателят доказва, че:

  1. Изпратената сума е положителна;
  2. Балансът остава неотрицателен;
  3. Изпращачът е шифровал правилно сумите на превода (включително нула);
  4. Балансът по баланса се променя само за подателя и получателя;
  5. Изпращачът притежава частния ключ към своя акаунт и той действително е в списъка на подателите (сред участващите);
  6. Nonce, използван в транзакцията, е съставен правилно.

За такова сложно доказателство авторите използват смес Непробиваем от куршуми (един от авторите, между другото, участва в създаването му) и Сигма протокол, които се наричат ​​Sigma-bullets. Официалното доказателство на подобно твърдение е доста трудна задача и силно ограничава броя на хората, желаещи да внедрят технологията.

Какъв е резултатът?

Според нас частта от Zether, която осигурява поверителност на базираните на акаунти блокчейни, може да се използва точно сега. Но в момента анонимната версия на технологията налага сериозни ограничения върху използването й, а сложността й върху внедряването. Не бива обаче да се отхвърля, че авторите го пуснаха само преди няколко месеца и може би някой друг ще намери решение на проблемите, които съществуват днес. Все пак така се прави наука.

Източник: www.habr.com

Добавяне на нов коментар