Аб ананімнасці ў account-based блокчейнах

Мы ўжо даўно цікавімся тэмай ананімнасці ў криптовалютах і імкнемся сачыць за развіццём тэхналогій у гэтай вобласці. У сваіх артыкулах мы ўжо падрабязна разбіралі прынцыпы працы. канфідэнцыйных транзакцый у Monero, а таксама праводзілі параўнальны агляд тэхналогій, якія існуюць на гэтым полі. Аднак жа ўсе ананімныя криптовалюты на сённяшні дзень пабудаваны на мадэлі дадзеных, прапанаванай Bitcoin – Unspent Transaction Output (далей UTXO). Для account-based блокчейнов як Ethereum існуючыя рашэнні па рэалізацыі ананімнасці і прыватнасці (напрыклад, Мёбіуса або ацтэкскі) спрабавалі паўтарыць мадэль UTXO у смарт-кантрактах.

У лютым 2019 года група даследчыкаў са Стэнфардскага ўніверсітэта і Visa Research выпусцілі прэпрынт "Zether: Насустрач прыватнасці ў свеце смарт-кантрактаў". Аўтары ўпершыню прапанавалі падыход да забеспячэння ананімнасці ў account-based блокчейнах і прадставілі два варыянты смарт-кантракту: для канфідэнцыйных (утойванне балансаў і сум перакладаў) і ананімных (утойванне атрымальніка і адпраўніка) транзакцый. Мы знаходзім прапанаваную тэхналогію цікавай і хацелі б падзяліцца яе прыладай, а таксама пагаварыць аб тым, чаму праблема ананімнасці ў account-based блокчейнах лічыцца вельмі складанай і ці ўдалося аўтарам вырашыць яе ў поўнай меры.

Аб прыладзе гэтых мадэляў дадзеных

У UTXO-мадэлі транзакцыя складаецца з "уваходаў" і "выхадаў". Прамы аналаг "выхадам" - купюры ў вашым кашальку: кожны "выхад" мае нейкі намінал. Калі вы расплачваецеся з кімсьці (фармуеце транзакцыю) вы марнуеце адзін або некалькі "выхадаў", пры гэтым яны становяцца "ўваходамі" транзакцыі, і блокчейн пазначае іх як выдаткаваныя. Пры гэтым атрымальнік вашага плацяжу (ці ж вы самі, калі вам патрэбна здача) атрымлівае зноў згенераваныя "выхады". Схематычна гэта можна адлюстраваць так:

Аб ананімнасці ў account-based блокчейнах

Account-based блокчейны ўладкованыя прыкладна як ваш банкаўскі рахунак. Яны аперуюць толькі сумай на вашым рахунку і сумай пераводу. Калі вы пераводзіце нейкую суму са свайго рахунку, то не спальваеце ніякія «выхады», сеткі не трэба запамінаць, якія манеты выдаткаваныя, а якія не. У найпростым выпадку праверка транзакцыі зводзіцца да праверкі подпісу адпраўніка і сумы на яго балансе:

Аб ананімнасці ў account-based блокчейнах

Разбор тэхналогіі

Далей мы пагаворым аб тым, як Zether хавае суму транзакцый, атрымальніка і адпраўніка. Па ходзе апісання прынцыпаў яго працы мы будзем адзначаць адрозненні ў канфідэнцыйным і ананімным варыянце. Так як забяспечыць канфідэнцыйнасць у account-based блокчейнах нашмат прасцей, то некаторыя з абмежаванняў, якія накладаюцца ананімізацыяй, будуць неактуальныя для канфідэнцыйнай версіі тэхналогіі.

Утойванне балансаў і сум пераводаў

Для шыфравання балансаў і сум пераводаў у Zether выкарыстоўваецца схема шыфравання Эль-Гамаля. Працуе яна наступным чынам. Калі Аліса хоча паслаць Бобу b манет па адрасе (яго публічнаму ключу) Y, яна выбірае выпадковы лік r і шыфруе суму:

Аб ананімнасці ў account-based блокчейнах
дзе C - зашыфраваная сума, D - Дапаможнае значэнне, неабходнае для расшыфроўкі гэтай сумы, G - Фіксаваная кропка на эліптычнай крывой, пры множанні сакрэтнага ключа на якую атрымліваецца публічны ключ.

Калі Боб атрымлівае гэтыя значэнні, ён проста дадае іх да свайго зашыфраванага такім жа спосабам балансу, чым і зручная гэтая схема.

Аналагічнай выявай Аліса адымае са свайго балансу такія ж значэнні, толькі ў якасці. Y выкарыстоўвае свой публічны ключ.

Утойванне адрасата і адпраўніка

Замешванне «выхадаў» у UTXO з'явілася яшчэ на світанку криптовалют і дапамагае схаваць адпраўніка. Для гэтага сам адпраўнік пры здзяйсненні перакладу набірае выпадковыя «выхады» у блокчейне і замешвае іх са сваімі. Далей падпісвае "выхады" колцавым подпісам - крыптаграфічным механізмам, якія дазваляюць пераканаць правяраючага ў тым, што сярод замяшаных "выхадаў" прысутнічаюць манеты адпраўніка. Самі замяшаныя манеты, зразумела, не марнуюцца.

Аднак для ўтойвання атрымальніка нам не атрымаецца генераваць фальшывыя "выхады". Таму ў UTXO у кожнага «выхаду» свой унікальны адрас, і ён крыптаграфічна злучаны з адрасам атрымальніка гэтых манет. На дадзены момант няма спосабу выявіць сувязь паміж унікальным адрасам "выхаду" і адрасам атрымальніка, не ведаючы яго сакрэтных ключоў.

У account-based мадэлі мы не можам выкарыстоўваць аднаразовыя адрасы (інакш гэта ўжо будзе мадэль "выхадаў"). Таму атрымальніка і адпраўніка даводзіцца замешваць сярод іншых акаўнтаў у блокчейне. Пры гэтым з замешваем акаўнтаў спісваецца зашыфраваны 0 манет (ці дадаецца 0 - у выпадку замешвання атрымальніка), фактычна не змяняючы іх рэальны баланс.

Так як і адпраўнік, і атрымальнік заўсёды маюць пастаянны адрас, тут узнікае неабходнасць пры перакладах на адны і тыя ж адрасы выкарыстоўваць для замешвання адны і тыя ж групы. Прасцей разгледзець гэта на прыкладзе.

Дапушчальны, Аліса вырашыла зрабіць унёсак у дабрачынны фонд Боба, але аддае перавагу, каб гэты пераклад заставаўся ананімнымі для іншага назіральніка. Тады, каб замаскіраваць сябе ў поле адпраўніка, яна ўпісвае яшчэ акаўнты Адама і Адэль. А каб схаваць Боба - у полі атрымальніка дадаткова акаўнты Бэна і Біла. Робячы наступны ўзнос, Аліса вырашыла побач з сабой упісаць Алекса і Аманду, а побач з Бобам - Бруса і Бенджэна. У гэтым выпадку пры аналізе блокчейна ў гэтых двух транзакцыях знойдзецца ўсяго толькі адна перасякальная пара ўдзельнікаў - Аліса і Боб, што дэананімізуе гэтыя транзакцыі.

Аб ананімнасці ў account-based блокчейнах

Гонкі транзакцый

Як мы ўжо згадвалі, для ўтойвання свайго балансу ў account-based сістэмах карыстач шыфруе свой баланс і суму перакладу. Пры гэтым ён павінен даказаць, што астатак на яго рахунку застаецца неадмоўным. Праблема складаецца ў тым, што фармуючы транзакцыю, карыстач будуе доказ адносна свайго бягучага стану рахунку. А што будзе, калі Боб адправіць Алісе транзакцыю, і яна будзе прынятая раней, чым адпраўленая Алісай? Тады транзакцыя Алісы будзе лічыцца неваліднай, бо доказ балансу быў пабудаваны да прыняцця транзакцыі Боба.

Аб ананімнасці ў account-based блокчейнах

Першае рашэнне, якое прыходзіць у такой сітуацыі - замарожваць рахунак да правядзення транзакцыі. Але гэты падыход не падыходзіць, бо акрамя складанасці рашэння такой задачы ў размеркаванай сістэме, у ананімнай схеме будзе незразумела, чый рахунак блакаваць.

Для вырашэння гэтай праблемы тэхналогія падзяляе ўваходныя і выходныя транзакцыі: расходаванне сродкаў мае неадкладны эфект на стан балансу, а паступленні - адкладзены. Для гэтага ўводзіцца паняцце "эпохі" - групы блокаў фіксаванага памеру. Бягучая "эпоха" вызначаецца дзяленнем вышыні блока на памер групы. Апрацоўваючы транзакцыю, сетка абнаўляе баланс адпраўніка адразу, а сродкі атрымальніка складае ў назапашвальнік. Назапашаныя сродкі паступаюць у распараджэнне атрымальніка плацяжу толькі пры надыходзе новай «эпохі».

У выніку карыстач можа адпраўляць транзакцыі па-за залежнасцю ад таго, як часта яму паступаюць сродкі (наколькі дазваляе яго баланс, зразумела). Памер эпохі вызначаюць зыходзячы з таго, наколькі хутка распаўсюджваюцца блокі па сетцы і як хутка транзакцыя трапляе ў блок.

Гэтае рашэнне добра працуе ў выпадку канфідэнцыйных перакладаў, аднак з ананімнымі транзакцыямі, як мы ўбачым далей, яно стварае сур'ёзныя праблемы.

Абарона ад replay-атак

У account-based блокчейнах кожная транзакцыя падпісваецца прыватным ключом адпраўніка, што пераконвае правяраючага ў тым, што транзакцыя не была зменена і яе стварыў уладальнік гэтага ключа. Але што калі зламыснік, які праслухоўваў канал перадачы, перахопіць гэтае паведамленне і адправіць сапраўды такое ж другое? Правяраючы зверыць подпіс транзакцыі і будзе перакананы ў яе аўтарстве, і сетка спіша такую ​​ж суму з балансу адпраўшчыка паўторна.

Гэты напад завуць replay-нападам. У UTXO-мадэлі такія напады не актуальныя, т. к. зламыснік будзе спрабаваць выкарыстаць выдаткаваныя вынахады, што само па сабе не валідна і адпрэчваецца сеткай.

Каб падобнага не адбылося, у транзакцыю ўбудоўваюць поле са выпадковымі дадзенымі, якое завуць nonce ці проста "соль". Пры паўторнай адпраўцы транзакцыі з «соллю» правяраючы глядзіць, ці выкарыстоўваўся гэты nonce раней і, калі не, лічыць гэтую транзакцыю валіднай. Каб не захоўваць у блокчейне ўсю гісторыю nonce-ов карыстачоў, звычайна ў самай першай транзакцыі яго прымаюць роўным нулю, а далей павялічваюць на адзінку. Сеткі застаецца толькі праверыць, што nonce новай транзакцыі адрозніваецца ад мінулай на адзінку.

У ананімнай схеме перакладаў устае праблема валідацыі nonce-аў транзакцый. Мы не можам прывязваць nonce відавочным спосабам да адрасу адпраўніка, бо, відавочна, гэта дэананімізуе пераклад. Мы таксама не можам дадаваць адзінку да nonce-ам усіх якія ўдзельнічаюць акаўнтаў, бо гэта можа канфліктаваць з іншымі перакладамі, змешчанымі ў апрацоўцы.

Аўтары Zether прапануюць генераваць nonce крыптаграфічна – у залежнасці ад «эпохі». Напрыклад:

Аб ананімнасці ў account-based блокчейнах
Тут x - сакрэтны ключ адпраўніка, а Gepoch - Дадатковы генератар для эпохі, які атрымліваецца хэшаваннем радкі выгляду 'Zether + '. Цяпер праблема, здавалася б, вырашаецца — мы не раскрываем nonce адпраўніка і не ўмешваемся ў nonce-ы недатычных удзельнікаў. Але такі падыход накладвае сур'ёзнае абмежаванне: адзін рахунак можа адправіць не больш за адну транзакцыю ў «эпоху». Гэтая праблема, нажаль, застаецца нявырашанай, і на бягучы момант робіць ананімную версію Zether, на наш погляд, ці ледзь прыдатнай для выкарыстання.

Складанасць доказаў з нулявым разгалашэннем

У UTXO адпраўнік павінен даказаць сеткі, што не марнуе адмоўную суму, інакш становіцца магчымай генерацыя новых манет з паветра (чаму гэта магчыма, мы пісалі ў адной з папярэдніх артыкулаў). А таксама падпісаць «уваходы» кальцавым подпісам, каб даказаць, што сярод манет, якія замешваюцца, ёсць сродкі, якія належаць яму.

У ананімнай версіі account-based блокчейна выразы для доказу атрымліваюцца нашмат складаней. Адпраўнік даказвае, што:

  1. Якая адпраўляецца сума дадатная;
  2. Баланс застаецца неадмоўным;
  3. Адпраўнік правільна зашыфраваў сумы пераводаў (у тым ліку нулявыя);
  4. Рэшту на балансе змяняецца толькі ў адпраўніка і атрымальніка;
  5. Адпраўнік валодае сакрэтным ключом ад свайго акаўнта і ён сапраўды прысутнічае ў спісе адпраўнікаў (сярод замяшаных);
  6. Nonce, які выкарыстоўваецца ў транзакцыі, складзены правільна.

Для такога складанага доказу аўтары выкарыстоўваюць сумесь. Куленепрабівальны (адзін з аўтараў, дарэчы, браў удзел у яе стварэнні) і Sigma protocol, якую называюць Sigma-bullets. Фармальнае доказ такога сцвярджэння - даволі складаная задача, і яно моцна абмяжоўвае колькасць жадаючых заняцца рэалізацыяй тэхналогіі.

Што ў выніку?

На наш погляд, частка Zether, якая прыносіць канфідэнцыяльнасць у account-based блокчейны, суцэль можа выкарыстоўвацца ўжо цяпер. Але на дадзены момант ананімная версія тэхналогіі накладвае сур'ёзныя абмежаванні на яе выкарыстанне, а яе складанасць - на рэалізацыю. Аднак не варта скідаць з рахункаў, што аўтары выпусцілі яе ўсяго толькі некалькі месяцаў таму, і, магчыма, нехта іншы знойдзе рашэнне для наяўных сёння праблем. Менавіта так робіцца навука.

Крыніца: habr.com

Дадаць каментар