Trúnaðarviðskipti í Monero, eða hvernig á að flytja óþekkta hluti á óþekkta áfangastaði

Við höldum áfram röð okkar um Monero blockchain og greinin í dag mun fjalla um RingCT (Ring Confidential Transactions) siðareglur, sem kynnir trúnaðarviðskipti og nýjar hringaundirskriftir. Því miður eru litlar upplýsingar á netinu um hvernig það virkar og við reyndum að fylla í þetta skarð.

Trúnaðarviðskipti í Monero, eða hvernig á að flytja óþekkta hluti á óþekkta áfangastaði

Við munum tala um hvernig netið felur flutningsupphæðir með því að nota þessa samskiptareglu, hvers vegna þeir yfirgáfu klassíska dulritunarhringaundirskriftina og hvernig þessi tækni mun þróast frekar.

Þar sem þessi siðareglur er ein flóknasta tæknin í Monero, mun lesandinn þurfa grunnþekkingu á hönnun þessarar blockchain og yfirgripsmikla þekkingu á dulmáli með sporöskjulaga feril (til að endurskoða þessa þekkingu geturðu lesið fyrstu kaflana okkar fyrri grein um fjölundirskriftir).

RingCT samskiptareglur

Ein af mögulegum árásum á cryptonote gjaldmiðla er blockchain greining byggð á þekkingu á magni og tíma sendra viðskipta. Þetta leyfir þrengja verulega leitarsvæðið eftir útgönguleiðum sem vekja áhuga árásarmannsins. Til að verjast slíkri greiningu hefur Monero innleitt nafnlausa viðskiptasamskiptareglu sem felur algjörlega magn flutninga á netinu.

Það er athyglisvert að hugmyndin um að fela upphæðir er ekki ný. Bitcoin Core verktaki Greg Maxwell var einn af þeim fyrstu til að lýsa því í sínu grein Trúnaðarviðskipti. Núverandi útfærsla á RingCT er breyting þess með möguleika á að nota hringaundirskriftir (hvort sem þær eru án þeirra), og þannig fékk hún nafnið sitt - Ring Confidential Transactions.

Meðal annars hjálpar samskiptareglan að losna við vandamál með blöndun rykúttaks - framleiðsla af litlu magni (venjulega móttekin í formi breytinga frá viðskiptum), sem skapaði fleiri vandamál en þau voru þess virði.

Í janúar 2017 átti sér stað harður gaffli á Monero netinu, sem leyfði valfrjálsu notkun trúnaðarviðskipta. Og þegar í september sama ár, með útgáfu 6 harða gafflinum, urðu slík viðskipti þau einu sem voru leyfð á netinu.

RingCT notar nokkra aðferðir í einu: marglaga tengdar sjálfkrafa nafnlausar hópundirskriftir (Multilayered Linkable Spontaneous Anonymous Group Signature, hér eftir nefnt MLSAG), skuldbindingarkerfi (Pedersen Commitments) og sviðssönnun (þetta hugtak hefur ekki staðfesta þýðingu á rússnesku) .

RingCT siðareglur kynna tvær tegundir af nafnlausum viðskiptum: einföld og full. Veskið myndar það fyrsta þegar viðskipti nota fleiri en eitt inntak, annað - í öfugum aðstæðum. Þeir eru mismunandi í löggildingu viðskiptaupphæða og gögnin sem eru undirrituð með MLSAG undirskrift (við munum tala meira um þetta hér að neðan). Þar að auki er hægt að búa til viðskipti af gerðinni full með hvaða fjölda inntaka sem er, það er enginn grundvallarmunur. Í bókinni "Núll í Monero" Í þessu sambandi er sagt að ákvörðun um að takmarka heildarviðskipti við eitt inntak hafi verið tekin í flýti og gæti breyst í framtíðinni.

MLSAG undirskrift

Við skulum muna hvað undirrituð færsluinntak eru. Hver viðskipti eyða og búa til nokkurt fé. Fjármunamyndun á sér stað með því að búa til viðskiptaúttak (bein hliðstæða er víxlar), og framleiðslan sem viðskiptin eyða (eftir allt saman, í raunveruleikanum eyðum við seðlum) verður inntakið (farið varlega, það er mjög auðvelt að ruglast á hér).

Inntak vísar til margra úttaka, en eyðir aðeins einni og skapar þannig „reykskjá“ til að gera það erfitt að greina þýðingarsöguna. Ef færsla hefur fleiri en eitt inntak, þá er hægt að tákna slíka uppbyggingu sem fylki, þar sem línurnar eru inntak og dálkarnir eru blandað úttak. Til að sanna fyrir netkerfinu að viðskiptin eyði nákvæmlega úttakum sínum (þekki leynilyklana þeirra), eru inntakin undirrituð með hringaundirskrift. Slík undirskrift tryggir að undirritaður þekkti leynilyklana fyrir alla þætti einhverra dálka.

Trúnaðarviðskipti nota ekki lengur klassískar kryptonote hringaundirskriftum, þeim var skipt út fyrir MLSAG - útgáfa af svipuðum einslags hringamerkjum sem eru aðlagaðar fyrir mörg inntak, LSAG.

Þeir eru kallaðir marglaga vegna þess að þeir undirrita nokkur inntak í einu, sem hvert um sig er blandað saman við nokkra aðra, þ.e. fylki er undirritað, en ekki ein röð. Eins og við munum sjá síðar hjálpar þetta að spara á undirskriftarstærð.

Við skulum skoða hvernig hringaundirskrift myndast, með því að nota dæmi um viðskipti sem eyða 2 raunverulegum útleiðum og nota m - 1 tilviljunarkenndar frá blockchain til að blanda. Við skulum tákna opinbera lykla úttakanna sem við eyðum sem
Trúnaðarviðskipti í Monero, eða hvernig á að flytja óþekkta hluti á óþekkta áfangastaði, og lykilmyndir fyrir þær í samræmi við það: Trúnaðarviðskipti í Monero, eða hvernig á að flytja óþekkta hluti á óþekkta áfangastaði Þannig fáum við stærðarfylki 2 x m. Í fyrsta lagi þurfum við að reikna út svokallaðar áskoranir fyrir hvert par af framleiðendum:
Trúnaðarviðskipti í Monero, eða hvernig á að flytja óþekkta hluti á óþekkta áfangastaði
Við byrjum útreikningana með úttakunum sem við eyðum með því að nota almenningslyklana þeirra:Trúnaðarviðskipti í Monero, eða hvernig á að flytja óþekkta hluti á óþekkta áfangastaðiog handahófskenndar tölurTrúnaðarviðskipti í Monero, eða hvernig á að flytja óþekkta hluti á óþekkta áfangastaðiFyrir vikið fáum við eftirfarandi gildi:
Trúnaðarviðskipti í Monero, eða hvernig á að flytja óþekkta hluti á óþekkta áfangastaði, sem við notum til að reikna út áskorun
Trúnaðarviðskipti í Monero, eða hvernig á að flytja óþekkta hluti á óþekkta áfangastaðinæsta úttakspar (til að gera það auðveldara að skilja hvað við erum að skipta út hvar, höfum við auðkennt þessi gildi í mismunandi litum). Öll eftirfarandi gildi eru reiknuð í hring með því að nota formúlurnar sem gefnar eru upp í fyrstu myndinni. Það síðasta sem þarf að reikna er áskorunin fyrir par af raunverulegum framleiðendum.

Eins og við sjáum nota allir dálkar nema sá sem inniheldur raunúttak af handahófi mynduðum tölumTrúnaðarviðskipti í Monero, eða hvernig á að flytja óþekkta hluti á óþekkta áfangastaði. Fyrir π- dálkur við munum líka þurfa þá. Við skulum umbreytaTrúnaðarviðskipti í Monero, eða hvernig á að flytja óþekkta hluti á óþekkta áfangastaðií s:Trúnaðarviðskipti í Monero, eða hvernig á að flytja óþekkta hluti á óþekkta áfangastaði
Undirskriftin sjálf er samsafn af öllum þessum gildum:

Trúnaðarviðskipti í Monero, eða hvernig á að flytja óþekkta hluti á óþekkta áfangastaði

Þessi gögn eru síðan skrifuð inn í færslu.

Eins og við sjáum inniheldur MLSAG aðeins eina áskorun c0, sem gerir þér kleift að spara á undirskriftarstærð (sem krefst nú þegar mikið pláss). Ennfremur, hvaða skoðunarmaður sem er, sem notar gögninTrúnaðarviðskipti í Monero, eða hvernig á að flytja óþekkta hluti á óþekkta áfangastaði, endurheimtir gildin c1,…, cm og athugar þaðTrúnaðarviðskipti í Monero, eða hvernig á að flytja óþekkta hluti á óþekkta áfangastaði. Þannig er hringnum okkar lokað og undirskriftin hefur verið staðfest.

Fyrir RingCT viðskipti af fullri gerð er einni línu í viðbót bætt við fylkið með blönduðum útgangi, en við munum tala um þetta hér að neðan.

Pedersen skuldbindingar

Skuldbindingarkerfi (enska hugtakið skuldbindingar er oftar notað) eru notaðar til að annar aðili geti sannað að hann viti ákveðið leyndarmál (númer) án þess að upplýsa það í raun. Til dæmis kastar þú ákveðinni tölu á teninginn, íhugar skuldbindingu og sendir hana áfram til sannprófunaraðilans. Þannig, á því augnabliki sem leyninúmerið er birt, reiknar sannprófandinn út skuldbindinguna sjálfstætt og tryggir þar með að þú hafir ekki blekkt hann.

Monero skuldbindingar eru notaðar til að fela fjárhæðir millifærslna og nota algengasta kostinn - Pedersen skuldbindingar. Við the vegur, áhugaverð staðreynd - í fyrstu lögðu verktaki til að fela upphæðirnar með venjulegri blöndun, það er að bæta við framleiðslu fyrir handahófskenndar upphæðir til að koma á óvissu, en síðan skiptu þeir yfir í skuldbindingar (það er ekki staðreynd að þeir sparaðu á viðskiptastærð, eins og við munum sjá hér að neðan).
Almennt séð lítur skuldbinding svona út:
Trúnaðarviðskipti í Monero, eða hvernig á að flytja óþekkta hluti á óþekkta áfangastaðiHvar C - merking skuldbindingarinnar sjálfrar, a - falið magn, H er fastur punktur á sporöskjulaga ferlinum (viðbótarrafall), og x — einhvers konar handahófskennd gríma, feluþáttur sem myndast af handahófi. Hér þarf grímuna svo þriðji aðili geti ekki bara giskað á gildi skuldbindingar.

Þegar ný framleiðsla er mynduð reiknar veskið skuldbindingu fyrir það og þegar það er eytt tekur það annað hvort verðmætið sem reiknað var út við framleiðslu eða endurreikna það, allt eftir tegund viðskipta.

RingCT einfalt

Þegar um er að ræða einföld RingCT-viðskipti, til þess að tryggja að viðskiptin hafi skapað framleiðsla í magni sem jafngildir magni aðfönga (framleiddu ekki peninga úr lausu lofti), er nauðsynlegt að summa skuldbindinga fyrsta og annars. þær vera eins, það er:
Trúnaðarviðskipti í Monero, eða hvernig á að flytja óþekkta hluti á óþekkta áfangastaði
Skuldbindingarnefndir líta á þetta aðeins öðruvísi - án grímu:
Trúnaðarviðskipti í Monero, eða hvernig á að flytja óþekkta hluti á óþekkta áfangastaðihvar a — upphæð þóknunar, hún er aðgengileg almenningi.

Þessi nálgun gerir okkur kleift að sanna fyrir treysta aðilanum að við séum að nota sömu upphæðir án þess að gefa upp þær.

Til að gera hlutina skýrari skulum við skoða dæmi. Segjum að færslu eyðir tveimur úttakum (sem þýðir að þeir verða inntak) af 10 og 5 XMR og myndar þrjú úttak að verðmæti 12 XMR: 3, 4 og 5 XMR. Á sama tíma greiðir hann þóknun upp á 3 XMR. Þannig er upphæðin sem eytt er ásamt upphæðinni sem myndast og þóknunin jöfn 15 XMR. Við skulum reyna að reikna út skuldbindingar og skoða muninn á fjárhæðum þeirra (mundu stærðfræðina):

Trúnaðarviðskipti í Monero, eða hvernig á að flytja óþekkta hluti á óþekkta áfangastaði
Hér sjáum við að til að jöfnan nái saman, þurfum við að summan af inntaks- og úttaksgrímunum séu þær sömu. Til að gera þetta myndar veskið af handahófi x1, y1, y2 og y3, og það sem eftir er x2 reiknar svona:
Trúnaðarviðskipti í Monero, eða hvernig á að flytja óþekkta hluti á óþekkta áfangastaði
Með því að nota þessar grímur getum við sannað fyrir hverjum sannprófanda að við búum ekki til meira fjármagn en við eyðum, án þess að gefa upp upphæðina. Upprunalega, ekki satt?

RingCT fullt

Í fullum RingCT-viðskiptum er aðeins flóknara að athuga millifærsluupphæðirnar. Í þessum viðskiptum endurreiknar veskið ekki skuldbindingar fyrir aðföng heldur notar þær sem reiknaðar voru þegar þær voru búnar til. Í þessu tilfelli verðum við að gera ráð fyrir að við fáum ekki lengur mismun á summunum sem eru núll, heldur:
Trúnaðarviðskipti í Monero, eða hvernig á að flytja óþekkta hluti á óþekkta áfangastaði
Hér z — munur á inntaks- og úttaksgrímum. Ef við athugum zG sem opinber lykill (sem hann er í raun), þá z er einkalykillinn. Þannig þekkjum við almenna og samsvarandi einkalykla. Með þessi gögn í höndunum getum við notað þau í MLSAG hringaundirskriftinni ásamt opinberum lyklum úttakanna sem verið er að blanda saman:
Trúnaðarviðskipti í Monero, eða hvernig á að flytja óþekkta hluti á óþekkta áfangastaði
Þannig mun gild hringaundirskrift tryggja að við þekkjum alla einkalykla eins dálksins og við getum aðeins vitað einkalykilinn í síðustu röð ef viðskiptin skila ekki meira fé en það eyðir. Við the vegur, hér er svarið við spurningunni „af hverju leiðir munurinn á fjárhæðum skuldbindinga ekki til núlls“ - ef zG = 0, þá munum við stækka dálkinn með raunverulegum framleiðendum.

Hvernig veit viðtakandi fjárins hversu mikið fé var sent til hans? Hér er allt einfalt - sendandi færslunnar og viðtakandinn skiptast á lyklum með Diffie-Hellman samskiptareglum, með því að nota færslulykilinn og útsýnislykil viðtakandans og reikna út sameiginlegt leyndarmál. Sendandi skrifar gögn um úttaksupphæðir, dulkóðaðar með þessum sameiginlega lykli, í sérstökum sviðum færslunnar.

Sönnun fyrir sviðum

Hvað gerist ef þú notar neikvæða tölu sem upphæð í skuldbindingum? Þetta gæti leitt til þess að auka mynt! Þessi niðurstaða er óviðunandi, svo við þurfum að tryggja að upphæðirnar sem við notum séu ekki neikvæðar (án þess að gefa upp þessar upphæðir, auðvitað, annars er svo mikil vinna og allt til einskis). Með öðrum orðum, við verðum að sanna að summan sé í bilinu [0, 2n - 1].

Til að gera þetta er summu hvers úttaks skipt í tvöfalda tölustafi og skuldbindingin reiknuð fyrir hvern tölustaf fyrir sig. Það er betra að sjá hvernig þetta gerist með dæmi.

Gerum ráð fyrir að magnið okkar sé lítið og passi í 4 bita (í reynd eru þetta 64 bitar), og við búum til úttak sem er virði 5 XMR. Við reiknum út skuldbindingar fyrir hvern flokk og heildarskuldbindingu fyrir alla upphæðina:Trúnaðarviðskipti í Monero, eða hvernig á að flytja óþekkta hluti á óþekkta áfangastaði
Næst er hverri skuldbindingu blandað saman við staðgengill (Ci-2iH) og er undirritaður í pörum með Borromeo hring undirskriftinni (önnur hringur undirskrift), sem Greg Maxwell lagði til árið 2015 (þú getur lesið meira um það hér):
Trúnaðarviðskipti í Monero, eða hvernig á að flytja óþekkta hluti á óþekkta áfangastaðiSamanlagt er þetta kallað sviðssönnun og gerir þér kleift að tryggja að skuldbindingar noti upphæðir á bilinu [0, 2n - 1].

Hvað er næst?

Í núverandi útfærslu taka sviðsprófanir mikið pláss - 6176 bæti á hverja úttak. Þetta leiðir til stærri viðskipta og því hærri gjalda. Til að minnka umfang Monero-viðskipta eru verktaki að kynna skotheld í stað Borromeo undirskrifta - sviðssönnunarkerfi án bitalegra skuldbindinga. Samkvæmt sumum áætlunum, þeir geta minnkað stærð sviðssönnunar um allt að 94%. Við the vegur, um miðjan júlí fór tæknin endurskoðun frá Kudelski Security, sem leiddi ekki í ljós neina verulega annmarka hvorki á tækninni sjálfri né framkvæmd hennar. Tæknin er þegar notuð í prófunarnetinu og með nýja harða gafflinum getur hún líklega færst yfir á aðalnetið.

Spyrðu spurninga þinna, stingdu upp á efni fyrir nýjar greinar um tækni á sviði dulritunargjaldmiðils og gerðu áskrifandi að hópnum okkar í Facebooktil að fylgjast með viðburðum okkar og útgáfum.

Heimild: www.habr.com

Bæta við athugasemd