Поверљиве трансакције у Монеру, или како пренети непознате ствари на непознате дестинације

Настављамо нашу серију о блокчејну Монеро, а данашњи чланак ће се фокусирати на РингЦТ (Ринг Цонфидентиал Трансацтионс) протокол, који уводи поверљиве трансакције и нове прстенасте потписе. Нажалост, на Интернету постоји мало информација о томе како то функционише, а ми смо покушали да попунимо ову празнину.

Поверљиве трансакције у Монеру, или како пренети непознате ствари на непознате дестинације

Причаћемо о томе како мрежа скрива износе преноса користећи овај протокол, зашто су напустили класичне криптоноте прстенасте потписе и како ће се ова технологија даље развијати.

Пошто је овај протокол једна од најсложенијих технологија у Монеро-у, читаоцу ће бити потребно основно знање о дизајну овог блокчејна и пролазно знање о криптографији елиптичке криве (да бисте надокнадили ово знање, можете прочитати прва поглавља нашег претходни чланак о мултисигнатурес).

РингЦТ протокол

Један од могућих напада на криптоноте валуте је анализа блокчејна заснована на сазнању о количини и времену послате трансакције. Ово дозвољава значајно сузи подручје тражења излаза од интереса за нападача. Да би се заштитио од такве анализе, Монеро је имплементирао анонимни протокол трансакције који у потпуности сакрива износе трансфера на мрежи.

Вреди напоменути да идеја о скривању износа није нова. Програмер Битцоин Цоре Грег Максвел био је један од првих који је то описао у свом чланак Поверљиве трансакције. Тренутна имплементација РингЦТ-а је његова модификација са могућношћу коришћења прстенастих потписа (било без њих), па је тако и добио име - Ринг Цонфидентиал Трансацтионс.

Између осталог, протокол помаже да се отарасите проблема са мешањем излаза прашине - излаза мале количине (обично примљених у облику промене из трансакција), који су створили више проблема него што су вредели.

У јануару 2017. догодио се хард форк мреже Монеро, који је омогућио опционо коришћење поверљивих трансакција. И већ у септембру исте године, са хард форком верзије 6, такве трансакције су постале једине дозвољене на мрежи.

РингЦТ користи неколико механизама одједном: вишеслојне повезане спонтане анонимне групне потписе (вишеслојни повезиви спонтани анонимни групни потпис, у даљем тексту МЛСАГ), шему обавезе (Педерсенове обавезе) и доказе опсега (овај термин нема утврђен превод на руски) .

Протокол РингЦТ уводи две врсте анонимних трансакција: једноставне и пуне. Новчаник генерише први када трансакција користи више од једног улаза, други - у супротној ситуацији. Они се разликују по валидацији износа трансакција и података потписаних МЛСАГ потписом (о томе ћемо више говорити у наставку). Штавише, трансакције типа фулл могу се генерисати са било којим бројем улаза, нема фундаменталне разлике. У књизи „Нула до Монеро“ С тим у вези, каже се да је одлука да се пуне трансакције ограниче на један унос донета на брзину и да се може променити у будућности.

Потпис МЛСАГ-а

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

Улаз се позива на више излаза, али троши само један, стварајући тако „димну завесу“ која отежава анализу историје превода. Ако трансакција има више од једног улаза, онда се таква структура може представити као матрица, где су редови улази, а колоне мешовити излази. Да би се доказало мрежи да трансакција троши тачно своје излазе (зна њихове тајне кључеве), улази се потписују прстенастим потписом. Такав потпис гарантује да је потписник знао тајне кључеве за све елементе било које колоне.

Поверљиве трансакције више не користе класичне цриптоноте прстенасте потписе, заменио их је МЛСАГ - верзија сличних једнослојних прстенастих потписа прилагођених за вишеструке улазе, ЛСАГ.

Зову се вишеслојни јер потписују неколико улаза одједном, од којих је сваки помешан са неколико других, односно потписује се матрица, а не један ред. Као што ћемо касније видети, ово помаже у уштеди на величини потписа.

Хајде да погледамо како се формира прстенасти потпис, користећи пример трансакције која троши 2 стварна излаза и користи м - 1 случајних из блок ланца за мешање. Означимо јавне кључеве излаза које трошимо као
Поверљиве трансакције у Монеру, или како пренети непознате ствари на непознате дестинације, и кључне слике за њих у складу с тим: Поверљиве трансакције у Монеру, или како пренети непознате ствари на непознате дестинације Тако добијамо матрицу величине 2 к м. Прво, морамо израчунати такозване изазове за сваки пар излаза:
Поверљиве трансакције у Монеру, или како пренети непознате ствари на непознате дестинације
Почињемо прорачуне са излазима које трошимо користећи њихове јавне кључеве:Поверљиве трансакције у Монеру, или како пренети непознате ствари на непознате дестинацијеи случајни бројевиПоверљиве трансакције у Монеру, или како пренети непознате ствари на непознате дестинацијеКао резултат, добијамо следеће вредности:
Поверљиве трансакције у Монеру, или како пренети непознате ствари на непознате дестинације, који користимо за израчунавање изазова
Поверљиве трансакције у Монеру, или како пренети непознате ствари на непознате дестинацијеследећи пар излаза (да бисмо лакше разумели шта где замењујемо, ове вредности смо истакли различитим бојама). Све следеће вредности се израчунавају у кругу користећи формуле дате на првој илустрацији. Последња ствар коју треба израчунати је изазов за пар стварних излаза.

Као што видимо, све колоне осим оне која садржи стварне излазе користе насумично генерисане бројевеПоверљиве трансакције у Монеру, или како пренети непознате ствари на непознате дестинације. До π- колона ће нам такође требати. Хајде да се трансформишемоПоверљиве трансакције у Монеру, или како пренети непознате ствари на непознате дестинацијеу с:Поверљиве трансакције у Монеру, или како пренети непознате ствари на непознате дестинације
Сам потпис је скуп свих ових вредности:

Поверљиве трансакције у Монеру, или како пренети непознате ствари на непознате дестинације

Ови подаци се затим уписују у трансакцију.

Као што видимо, МЛСАГ садржи само један изазов c0, што вам омогућава да уштедите на величини потписа (што већ захтева много простора). Затим, било који инспектор, користећи податкеПоверљиве трансакције у Монеру, или како пренети непознате ствари на непознате дестинације, враћа вредности ц1,…, цм и то провераваПоверљиве трансакције у Монеру, или како пренети непознате ствари на непознате дестинације. Дакле, наш прстен је затворен и потпис је оверен.

За РингЦТ трансакције пуног типа, у матрицу се додаје још једна линија са мешовитим излазима, али о томе ћемо говорити у наставку.

Педерсен Цоммитментс

Шеме обавеза (чешће се користи енглески термин цоммитментс) се користе како би једна страна могла да докаже да зна одређену тајну (број) а да је заправо не открије. На пример, баците одређени број на коцку, размотрите посвећеност и проследите га страни која потврђује. Тако, у тренутку откривања тајног броја, верификатор самостално израчунава обавезу, чиме се уверава да га нисте преварили.

Монеро обавезе се користе да би се сакрили износи трансфера и користи се најчешћа опција - Педерсен обавезе. Узгред, занимљива чињеница - програмери су прво предлагали сакривање износа обичним мешањем, односно додавањем излаза за произвољне количине како би унели неизвесност, али су онда прешли на обавезе (није чињеница да су штедели на величину трансакције, као што ћемо видети у наставку).
Генерално, обавеза изгледа овако:
Поверљиве трансакције у Монеру, или како пренети непознате ствари на непознате дестинацијегде C — значење саме обавезе, a - скривени износ, H је фиксна тачка на елиптичкој кривој (додатни генератор), и x — нека врста произвољне маске, фактор скривања генерисан насумично. Маска је овде потребна тако да трећа страна не може једноставно да погоди вредност посвећености.

Када се генерише нови излаз, новчаник израчунава обавезу за њега, а када се потроши, узима или вредност израчунату током генерисања или је поново израчунава, у зависности од врсте трансакције.

РингЦТ једноставан

У случају једноставних РингЦТ трансакција, како би се осигурало да је трансакција створила излазе једнаке количини инпута (није произвела новац из ничега), неопходно је да збир обавеза првог и другог буде исто, односно:
Поверљиве трансакције у Монеру, или како пренети непознате ствари на непознате дестинације
Комисије за обавезе то сматрају мало другачије - без маске:
Поверљиве трансакције у Монеру, или како пренети непознате ствари на непознате дестинацијеГде a — износ провизије, јавно је доступан.

Овај приступ нам омогућава да докажемо поузданој страни да користимо исте износе без да их откривамо.

Да би ствари биле јасније, погледајмо пример. Рецимо да трансакција троши два излаза (што значи да они постају улази) од 10 и 5 КСМР и генерише три излаза у вредности од 12 КСМР: 3, 4 и 5 КСМР. Истовремено плаћа провизију од 3 КСМР. Дакле, износ потрошеног новца плус генерисани износ и провизија је једнак 15 КСМР. Хајде да покушамо да израчунамо обавезе и погледамо разлику у њиховим износима (запамтите математику):

Поверљиве трансакције у Монеру, или како пренети непознате ствари на непознате дестинације
Овде видимо да да би једначина конвергирала, потребни су нам суми улазне и излазне маске да буду исти. Да бисте то урадили, новчаник генерише насумично к1, и1, и2 и и3, и преостали x2 израчунава овако:
Поверљиве трансакције у Монеру, или како пренети непознате ствари на непознате дестинације
Користећи ове маске, можемо доказати било ком верификатору да не генеришемо више средстава него што трошимо, без откривања износа. Оригинал, зар не?

РингЦТ пун

У потпуним РингЦТ трансакцијама, провера износа трансфера је мало сложенија. У овим трансакцијама, новчаник не прерачунава обавезе за уносе, већ користи оне израчунате када су генерисане. У овом случају, морамо претпоставити да више нећемо добити разлику у збиру једнаку нули, већ:
Поверљиве трансакције у Монеру, или како пренети непознате ствари на непознате дестинације
Овде z — разлика између улазне и излазне маске. Ако узмемо у обзир zG као јавни кључ (што де фацто и јесте). z је приватни кључ. Дакле, знамо јавне и одговарајуће приватне кључеве. Са овим подацима у руци, можемо их користити у МЛСАГ прстенастом потпису заједно са јавним кључевима излаза који се мешају:
Поверљиве трансакције у Монеру, или како пренети непознате ствари на непознате дестинације
Дакле, важећи прстенасти потпис ће осигурати да знамо све приватне кључеве једне од колона, а приватни кључ у последњем реду можемо знати само ако трансакција не генерише више средстава него што троши. Иначе, ево одговора на питање „зашто разлика у износима обавеза не доведе до нуле“ – ако зГ = 0, онда ћемо колону проширити стварним излазима.

Како прималац средстава зна колико му је новца послато? Овде је све једноставно - пошиљалац трансакције и прималац размењују кључеве користећи Диффие-Хеллман протокол, користећи трансакцијски кључ и кључ за преглед примаоца и израчунавају заједничку тајну. Пошиљалац уписује податке о излазним износима, шифроване овим заједничким кључем, у посебна поља трансакције.

Доказ домета

Шта се дешава ако користите негативан број као износ у обавезама? Ово може довести до стварања додатних новчића! Овакав исход је неприхватљив, па морамо да гарантујемо да износи које користимо нису негативни (наравно, без откривања ових износа, иначе има толико посла и све узалуд). Другим речима, морамо доказати да је збир у интервалу [0, 2н - 1].

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

Претпоставимо да су наши износи мали и да се уклапају у 4 бита (у пракси је то 64 бита) и креирамо излаз вредан 5 КСМР. Израчунавамо обавезе за сваку категорију и укупну обавезу за цео износ:Поверљиве трансакције у Монеру, или како пренети непознате ствари на непознате дестинације
Затим, свака обавеза је помешана са сурогат (Ци-2иХ) и потписан је у пару са Боромеовим прстенастим потписом (још један потпис прстена), који је предложио Грег Максвел 2015. (више о томе можете прочитати овде):
Поверљиве трансакције у Монеру, или како пренети непознате ствари на непознате дестинацијеУзето заједно, ово се зове доказ опсега и омогућава вам да осигурате да обавезе користе износе у опсегу [0, 2н - 1].

Шта је следеће?

У тренутној имплементацији, докази опсега заузимају много простора - 6176 бајтова по излазу. Ово доводи до већих трансакција, а самим тим и до виших накнада. Да би смањили величину Монеро трансакције, програмери уводе отпорне на метке уместо Борромео потписа – механизам за проверу опсега без битних обавеза. Према неким проценама, они су у стању да смање величину доказа домета до 94%. Иначе, средином јула технологија је прошла ревизија из Куделског обезбеђења, који није открио значајније недостатке ни у самој технологији ни у њеној имплементацији. Технологија се већ користи у тестној мрежи, а са новом хард форком вероватно може да се пресели на главну мрежу.

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

Извор: ввв.хабр.цом

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