Монеродағы құпия транзакциялар немесе белгісіз заттарды белгісіз бағыттарға қалай тасымалдауға болады

Біз Monero блокчейні туралы сериямызды жалғастырамыз және бүгінгі мақала құпия транзакциялар мен жаңа сақина қолтаңбаларын енгізетін RingCT (Ring Confidential Transactions) протоколына арналады. Өкінішке орай, Интернетте оның қалай жұмыс істейтіні туралы ақпарат аз, біз бұл олқылықтың орнын толтыруға тырыстық.

Монеродағы құпия транзакциялар немесе белгісіз заттарды белгісіз бағыттарға қалай тасымалдауға болады

Біз желі осы протоколды пайдаланып аударым сомасын қалай жасыратыны, олар классикалық криптонот сақина қолтаңбаларынан неліктен бас тартқанын және бұл технологияның әрі қарай қалай дамитыны туралы айтатын боламыз.

Бұл хаттама Monero-дағы ең күрделі технологиялардың бірі болғандықтан, оқырманға осы блокчейннің дизайны туралы негізгі білім және эллиптикалық қисық криптография туралы өтпелі білім қажет (бұл білімді толықтыру үшін сіз біздің мақаламыздың бірінші тарауларын оқи аласыз. туралы алдыңғы мақала көп қолтаңбалар).

RingCT протоколы

Криптонот валюталарына ықтимал шабуылдардың бірі жіберілген транзакцияның сомасы мен уақытын білуге ​​негізделген блокчейн талдауы болып табылады. Бұл мүмкіндік береді шабуылдаушыны қызықтыратын шығулар үшін іздеу аймағын айтарлықтай тарылтады. Мұндай талдаудан қорғау үшін Monero желідегі аударымдар сомасын толығымен жасыратын анонимді транзакция протоколын енгізді.

Айта кету керек, сомаларды жасыру идеясы жаңа емес. Bitcoin Core әзірлеушісі Грег Максвелл оны алғашқылардың бірі болып сипаттады мақала Құпия транзакциялар. RingCT-тің қазіргі іске асырылуы оның сақиналы қолтаңбаларды (оларсыз) пайдалану мүмкіндігімен модификациясы болып табылады және осылайша ол өз атауын алды - Ring Confidential Transactions.

Басқа нәрселермен қатар, хаттама шаң шығарылымдарын араластыру проблемаларынан арылуға көмектеседі - аз мөлшердегі шығыстар (әдетте транзакциялардан өзгерту түрінде алынады), бұл олардан гөрі көп проблемаларды тудырды.

2017 жылдың қаңтарында құпия транзакцияларды қосымша пайдалануға мүмкіндік беретін Monero желісінің қатты шанышқысы орын алды. Сол жылдың қыркүйегінде 6 hard fork нұсқасымен мұндай транзакциялар желіде рұқсат етілген жалғыз транзакция болды.

RingCT бірден бірнеше механизмдерді пайдаланады: көпқабатты байланысты стихиялық анонимді топ қолтаңбалары (Multilayered Linkable Spontaneous Anonymous Group Signature, бұдан әрі MLSAG деп аталады), міндеттеме схемасы (Pedersen Commitments) және ауқымды дәлелдеу (бұл терминнің орыс тіліне белгіленген аудармасы жоқ) .

RingCT хаттамасы анонимді транзакциялардың екі түрін енгізеді: қарапайым және толық. Әмиян біріншісін транзакция бірнеше енгізуді пайдаланған кезде жасайды, екіншісі - керісінше жағдайда. Олар транзакция сомаларын тексеруде және MLSAG қолтаңбасымен қол қойылған деректерде ерекшеленеді (бұл туралы төменде толығырақ айтатын боламыз). Сонымен қатар, толық түрдегі транзакциялар кез келген кіріс санымен жасалуы мүмкін, ешқандай принципті айырмашылық жоқ. Кітапта «Монероға нөл» Осыған байланысты, толық транзакцияларды бір енгізуге шектеу туралы шешім асығыс қабылданған және болашақта өзгеруі мүмкін делінген.

MLSAG қолы

Қол қойылған транзакция кірістерінің қандай екенін еске түсірейік. Әрбір транзакция белгілі бір қаражатты жұмсайды және жасайды. Қаражатты қалыптастыру транзакция нәтижелерін жасау арқылы жүзеге асады (тікелей ұқсастық - вексельдер), ал транзакцияның жұмсалған шығысы (ақыр соңында, біз банкноттарды нақты өмірде жұмсаймыз) кіріске айналады (абайлаңыз, шатастыру өте оңай) Мұнда).

Кіріс бірнеше шығыстарға сілтеме жасайды, бірақ тек біреуін жұмсайды, осылайша аударма тарихын талдауды қиындату үшін «түтін экранын» жасайды. Егер транзакцияда бірнеше кіріс болса, онда мұндай құрылымды матрица ретінде көрсетуге болады, мұндағы жолдар кірістер, ал бағандар аралас шығыстар болып табылады. Желіге транзакция өзінің шығыстарын дәл жұмсайтынын дәлелдеу үшін (олардың құпия кілттерін біледі) кірістерге сақиналы қолтаңбамен қол қойылады. Мұндай қолтаңба қол қоюшының кез келген бағандардың барлық элементтері үшін құпия кілттерді білуіне кепілдік береді.

Құпия транзакциялар енді классикалық транзакцияларды пайдаланбайды криптонот сақина қолтаңбалары, оларды MLSAG ауыстырды - бірнеше енгізуге бейімделген ұқсас бір қабатты сақина қолтаңбаларының нұсқасы, LSAG.

Олар көпқабатты деп аталады, өйткені олар бірден бірнеше кіріске қол қояды, олардың әрқайсысы бірнеше басқалармен араласады, яғни бір жолға емес, матрицаға қол қойылады. Кейінірек көретініміздей, бұл қолтаңба өлшемін үнемдеуге көмектеседі.

2 нақты нәтижені жұмсайтын және араластыру үшін блокчейннен m - 1 кездейсоқты пайдаланатын транзакция мысалын пайдаланып, сақина қолтаңбасының қалай қалыптасатынын қарастырайық. Біз жұмсайтын нәтижелердің ашық кілттерін белгілейік
Монеродағы құпия транзакциялар немесе белгісіз заттарды белгісіз бағыттарға қалай тасымалдауға болады, және сәйкес олар үшін негізгі кескіндер: Монеродағы құпия транзакциялар немесе белгісіз заттарды белгісіз бағыттарға қалай тасымалдауға болады Осылайша, біз өлшемдік матрицаны аламыз 2 х м. Біріншіден, әрбір нәтиже жұбы үшін қиындықтар деп аталатындарды есептеу керек:
Монеродағы құпия транзакциялар немесе белгісіз заттарды белгісіз бағыттарға қалай тасымалдауға болады
Есептеулерді олардың ашық кілттерін пайдаланып жұмсайтын нәтижелерден бастаймыз:Монеродағы құпия транзакциялар немесе белгісіз заттарды белгісіз бағыттарға қалай тасымалдауға боладыжәне кездейсоқ сандарМонеродағы құпия транзакциялар немесе белгісіз заттарды белгісіз бағыттарға қалай тасымалдауға боладыНәтижесінде біз келесі мәндерді аламыз:
Монеродағы құпия транзакциялар немесе белгісіз заттарды белгісіз бағыттарға қалай тасымалдауға болады, оны біз қиындықты есептеу үшін қолданамыз
Монеродағы құпия транзакциялар немесе белгісіз заттарды белгісіз бағыттарға қалай тасымалдауға боладышығыстардың келесі жұбы (қай жерде нені ауыстырып жатқанымызды түсінуді жеңілдету үшін біз бұл мәндерді әртүрлі түстермен бөлектедік). Келесі барлық мәндер бірінші суретте келтірілген формулаларды пайдалана отырып, шеңберде есептеледі. Есептеуге болатын соңғы нәрсе - бұл нақты нәтижелер жұбының қиындығы.

Көріп отырғанымыздай, нақты нәтижелерден басқа барлық бағандар кездейсоқ құрылған сандарды пайдаланадыМонеродағы құпия транзакциялар немесе белгісіз заттарды белгісіз бағыттарға қалай тасымалдауға болады. үшін π- баған бізге олар да керек болады. ТүрлендірейікМонеродағы құпия транзакциялар немесе белгісіз заттарды белгісіз бағыттарға қалай тасымалдауға боладыс ішінде:Монеродағы құпия транзакциялар немесе белгісіз заттарды белгісіз бағыттарға қалай тасымалдауға болады
Қолтаңбаның өзі барлық осы мәндердің кортежі болып табылады:

Монеродағы құпия транзакциялар немесе белгісіз заттарды белгісіз бағыттарға қалай тасымалдауға болады

Содан кейін бұл деректер транзакцияға жазылады.

Көріп отырғанымыздай, MLSAG тек бір тапсырманы қамтиды c0, бұл қолтаңба өлшемін үнемдеуге мүмкіндік береді (ол қазірдің өзінде көп орынды қажет етеді). Әрі қарай, деректерді пайдалана отырып, кез келген инспекторМонеродағы құпия транзакциялар немесе белгісіз заттарды белгісіз бағыттарға қалай тасымалдауға болады, c1,…, cm мәндерін қалпына келтіреді және оны тексередіМонеродағы құпия транзакциялар немесе белгісіз заттарды белгісіз бағыттарға қалай тасымалдауға болады. Осылайша, сақинамыз жабылып, қолтаңбамыз тексерілді.

Толық түрдегі RingCT транзакциялары үшін аралас шығыстары бар матрицаға тағы бір жол қосылады, бірақ біз бұл туралы төменде айтатын боламыз.

Педерсен міндеттемелері

Міндеттемелік схемалар (ағылшын тіліндегі commitments термині жиі қолданылады) бір тарап белгілі бір құпияны (санды) нақты ашпай-ақ білетінін дәлелдей алуы үшін қолданылады. Мысалы, сіз сүйекке белгілі бір санды лақтырасыз, міндеттемені қарастырып, оны тексеруші тарапқа бересіз. Осылайша, құпия нөмірді ашу сәтінде тексеруші міндеттемені дербес есептейді, осылайша сіз оны алдамағаныңызға көз жеткізеді.

Монеро міндеттемелері аударымдар сомасын жасыру және ең көп таралған опцияны пайдалану үшін пайдаланылады - Педерсен міндеттемелері. Айтпақшы, бір қызық факт – әзірлеушілер бастапқыда кәдімгі араластыру арқылы сомаларды жасыруды, яғни белгісіздік енгізу үшін ерікті сомаларға шығыстарды қосуды ұсынды, бірақ кейін олар міндеттемелерге көшті (бұл олардың үнемдегені факт емес. транзакция өлшемі, біз төменде көреміз).
Жалпы, міндеттеме келесідей көрінеді:
Монеродағы құпия транзакциялар немесе белгісіз заттарды белгісіз бағыттарға қалай тасымалдауға боладыҚайда? C - міндеттеменің мәні, a - жасырын сома, H эллиптикалық қисықтағы тұрақты нүкте (қосымша генератор), және x — ерікті масканың қандай да бір түрі, кездейсоқ құрылған жасыру факторы. Бұл жерде маска үшінші тарап міндеттеменің мәнін болжай алмайтындай етіп қажет.

Жаңа өнім шығарылған кезде, әмиян ол үшін міндеттемені есептейді, ал жұмсалған кезде ол генерациялау кезінде есептелген мәнді алады немесе транзакция түріне байланысты оны қайта есептейді.

RingCT қарапайым

Қарапайым RingCT транзакциялары жағдайында, транзакция кірістер сомасына тең мөлшерде (ақша шығармайды) нәтижелерді жасауын қамтамасыз ету үшін бірінші және екінші міндеттемелердің сомасы қажет. бірдей болады, яғни:
Монеродағы құпия транзакциялар немесе белгісіз заттарды белгісіз бағыттарға қалай тасымалдауға болады
Міндеттеме комиссиялары оны басқаша қарастырады - маскасыз:
Монеродағы құпия транзакциялар немесе белгісіз заттарды белгісіз бағыттарға қалай тасымалдауға боладықайда a — комиссия сомасы, ол жалпыға қолжетімді.

Бұл тәсіл бізге сенуші тарапқа бірдей сомаларды ашпай-ақ пайдаланып жатқанымызды дәлелдеуге мүмкіндік береді.

Түсінікті болу үшін мысалды қарастырайық. Айталық, транзакция 10 және 5 XMR екі шығысын (олар кіріске айналады дегенді білдіреді) жұмсайды және 12 XMR: 3, 4 және 5 XMR үш шығысын жасайды делік. Бұл ретте ол 3 XMR комиссия төлейді. Осылайша, жұмсалған ақша сомасы плюс құрылған сома және комиссия 15 XMR тең. Міндеттемелерді есептеп, олардың сомасындағы айырмашылықты қарастырайық (матеманы есте сақтаңыз):

Монеродағы құпия транзакциялар немесе белгісіз заттарды белгісіз бағыттарға қалай тасымалдауға болады
Мұнда біз теңдеу жинақталуы үшін кіріс және шығыс маскаларының қосындылары бірдей болуы керек екенін көреміз. Бұл әрекетті орындау үшін, әмиян кездейсоқ жасайды x1, y1, y2 және y3, ал қалғандары x2 былай есептейді:
Монеродағы құпия транзакциялар немесе белгісіз заттарды белгісіз бағыттарға қалай тасымалдауға болады
Бұл бетперделерді пайдалана отырып, біз кез келген тексерушіге соманы жарияламай-ақ, жұмсағанымыздан көп қаражат жасамайтынымызды дәлелдей аламыз. Түпнұсқа, солай ма?

RingCT толық

Толық RingCT транзакцияларында аударым сомасын тексеру біршама күрделірек. Бұл транзакцияларда әмиян кірістер бойынша міндеттемелерді қайта есептемейді, бірақ олар жасалған кезде есептелгендерді пайдаланады. Бұл жағдайда біз бұдан былай нөлге тең сомалардағы айырмашылықты алмаймыз, оның орнына:
Монеродағы құпия транзакциялар немесе белгісіз заттарды белгісіз бағыттарға қалай тасымалдауға болады
Бұл z — енгізу және шығару маскаларының айырмашылығы. Егер қарастырсақ zG ашық кілт ретінде (бұл іс жүзінде), содан кейін z жеке кілт болып табылады. Осылайша, біз жалпы және сәйкес жеке кілттерді білеміз. Қолда бұл деректермен біз оны MLSAG сақина қолтаңбасында және аралас шығатын шығыстардың ашық кілттерімен бірге пайдалана аламыз:
Монеродағы құпия транзакциялар немесе белгісіз заттарды белгісіз бағыттарға қалай тасымалдауға болады
Осылайша, жарамды қоңырау қолтаңбасы бағандардың бірінің барлық жеке кілттерін білуімізді қамтамасыз етеді және транзакция жұмсалған қаражаттан көп қаражатты тудырмаса, соңғы жолдағы жабық кілтті ғана біле аламыз. Айтпақшы, міне, «неліктен міндеттемелер сомасындағы айырмашылық нөлге әкелмейді» деген сұраққа жауап - егер zG = 0, содан кейін біз нақты нәтижелермен бағанды ​​кеңейтеміз.

Қаражатты алушы оған қанша ақша жіберілгенін қайдан біледі? Мұнда бәрі қарапайым - транзакцияны жіберуші және алушы Диффи-Хеллман хаттамасын пайдаланып, транзакция кілтін және алушының көру кілтін пайдаланып, ортақ құпияны есептей отырып, алмасу кілттері. Жіберуші транзакцияның арнайы өрістеріне осы ортақ кілтпен шифрланған шығыс сомалар туралы деректерді жазады.

Диапазонды дәлелдеу

Міндеттемелердегі сома ретінде теріс санды пайдалансаңыз не болады? Бұл қосымша монеталардың пайда болуына әкелуі мүмкін! Бұл нәтижеге жол берілмейді, сондықтан біз қолданатын сомалар теріс емес екеніне кепілдік беруіміз керек (әрине, бұл сомаларды жарияламай-ақ, әйтпесе жұмыс көп және бәрі бекер). Басқаша айтқанда, қосындының интервалда екенін дәлелдеуіміз керек [0, 2n - 1].

Ол үшін әрбір шығу сомасы екілік сандарға бөлінеді және міндеттеме әрбір цифр үшін бөлек есептеледі. Мұның қалай болатынын мысалмен көру жақсы.

Біздің сомаларымыз аз және 4 битке (іс жүзінде бұл 64 бит) сәйкес келеді деп есептейік және біз 5 XMR мәнінің шығысын жасаймыз. Біз әрбір санат бойынша міндеттемелерді және бүкіл сома бойынша жалпы міндеттемені есептейміз:Монеродағы құпия транзакциялар немесе белгісіз заттарды белгісіз бағыттарға қалай тасымалдауға болады
Әрі қарай, әрбір міндеттеме суррогатпен араласады (Ci-2iH) және 2015 жылы Грег Максвелл ұсынған Borromeo сақина қолтаңбасымен (басқа сақина қолтаңбасымен) жұпта қол қойылған (бұл туралы толығырақ оқуға болады). осында):
Монеродағы құпия транзакциялар немесе белгісіз заттарды белгісіз бағыттарға қалай тасымалдауға боладыБірге алғанда, бұл ауқымды дәлелдеу деп аталады және міндеттемелер ауқымдағы сомаларды пайдалануын қамтамасыз етуге мүмкіндік береді [0, 2n - 1].

Ары қарай не?

Ағымдағы іске асыруда диапазонды растаулар көп орын алады - бір шығысқа 6176 байт. Бұл үлкен транзакцияларға, демек, жоғары комиссияларға әкеледі. Monero транзакциясының көлемін азайту үшін әзірлеушілер Borromeo қолтаңбаларының орнына оқ өткізбейтін құралдарды енгізуде - биттік міндеттемелерсіз ауқымды дәлелдеу механизмі. Кейбір бағалаулар бойынша, олар диапазонды дәлелдеу өлшемін 94%-ға дейін азайта алады. Айтпақшы, шілденің ортасында технология өтті аудит Kudelski Security компаниясынан, ол технологияның өзінде де, оны енгізуде де маңызды кемшіліктерді анықтаған жоқ. Технология сынақ желісінде бұрыннан қолданылған және жаңа қатты шанышқымен ол негізгі желіге ауысуы мүмкін.

Сұрақтарыңызды қойыңыз, криптовалюта саласындағы технологиялар туралы жаңа мақалалардың тақырыптарын ұсыныңыз, сонымен қатар біздің тобымызға жазылыңыз Facebookоқиғаларымыз бен жарияланымдарымыздан хабардар болу.

Ақпарат көзі: www.habr.com

пікір қалдыру