Isilpeko transakzioak Monero-n, edo gauza ezezagunak helmuga ezezagunetara nola transferitu

Monero blockchain-ari buruzko serieari jarraitzen diogu, eta gaurko artikulua RingCT (Ring Confidential Transactions) protokoloan zentratuko da, transakzio konfidentzialak eta eraztun sinadura berriak sartzen dituena. Zoritxarrez, Interneten informazio gutxi dago funtzionamenduari buruz, eta hutsune hori betetzen saiatu gara.

Isilpeko transakzioak Monero-n, edo gauza ezezagunak helmuga ezezagunetara nola transferitu

Sareak protokolo hau erabiliz transferentzia-kopuruak nola ezkutatzen dituen hitz egingo dugu, zergatik utzi zituzten kriptonoten eraztunaren sinadura klasikoak eta nola garatuko den teknologia hori gehiago.

Protokolo hau Moneroko teknologia konplexuenetako bat denez, irakurleak blockchain honen diseinuari buruzko oinarrizko ezagutza eta kurba eliptikoen kriptografiaren ezagutza iragankorra beharko du (ezagutza hori hobetzeko, gure lehen kapituluak irakur ditzakezu. buruzko aurreko artikulua sinadura anitzeko).

RingCT protokoloa

Cryptonote-ko moneten aurkako eraso posibleetako bat blockchain-en azterketa da bidalitako transakzioaren zenbatekoaren eta denboraren ezagutzan oinarrituta. Horrek ahalbidetzen du erasotzailearentzat interesgarriak diren irteeren bilaketa-eremua nabarmen murriztea. Azterketa horietatik babesteko, Monerok sareko transferentzien zenbatekoak guztiz ezkutatzen dituen transakzio protokolo anonimo bat ezarri du.

Aipatzekoa da zenbatekoak ezkutatzeko ideia ez dela berria. Greg Maxwell Bitcoin Core garatzailea izan zen hura deskribatu zuen lehenetariko bat artikulua Isilpeko Transakzioak. RingCT-en egungo inplementazioa bere aldaketa da eraztun sinadurak erabiltzeko aukerarekin (hauek gabe), eta horrela hartu zuen izena - Ring Confidential Transactions.

Besteak beste, protokoloak hauts-irteerak nahasteko arazoak kentzen laguntzen du - kopuru txikiko irteerak (normalean transakzioen aldaketa moduan jasotzen dira), eta horrek balio zutena baino arazo gehiago sortu zituen.

2017ko urtarrilean, Monero sarearen bidegurutze gogor bat gertatu zen, isilpeko transakzioak aukeran erabiltzeko aukera emanez. Eta jada urte bereko irailean, 6 bertsio gogorren sardexkarekin, horrelako transakzioak sarean onartzen diren bakarrak bihurtu ziren.

RingCT-k hainbat mekanismo erabiltzen ditu aldi berean: geruza anitzeko estekatutako talde anonimo espontaneoen sinadurak (geruza anitzeko estekagarria den talde anonimo espontaneoaren sinadura, aurrerantzean MLSAG deitzen dena), konpromiso-eskema bat (Pedersen Konpromisoak) eta barrutiaren frogak (termino honek ez du errusierarako itzulpen finkaturik). .

RingCT protokoloak bi transakzio anonimo mota sartzen ditu: sinplea eta osoa. Diru-zorroak lehenengoa sortzen du transakzio batek sarrera bat baino gehiago erabiltzen duenean, bigarrena - kontrako egoeran. Transakzioen zenbatekoak eta MLSAG sinadura batekin sinatutako datuen baliozkotzean desberdinak dira (hori buruz gehiago hitz egingo dugu jarraian). Gainera, full motako transakzioak edozein sarrerarekin sor daitezke, ez dago funtsezko diferentziarik. Liburuan "Zero Monerora" Ildo horretan, transakzio osoak sarrera bakarrera mugatzeko erabakia presaka hartu zela esaten da eta etorkizunean alda daitekeela.

MLSAG sinadura

Gogora dezagun zer diren sinatutako transakzio-sarrerak. Transakzio bakoitzak funts batzuk gastatzen eta sortzen ditu. Funtsen sorrera transakzio irteerak sortuz gertatzen da (analogia zuzena fakturak dira), eta transakzioak gastatzen duen irteera (azken finean, bizitza errealean billeteak gastatzen ditugu) sarrera bihurtzen da (kontuz, oso erraza da nahastea hemen).

Sarrera batek irteera anitz erreferentzia egiten du, baina bakarra gastatzen du, eta horrela "ke-pantaila" bat sortzen du, itzulpen-historia aztertzea zailtzeko. Transakzio batek sarrera bat baino gehiago baditu, orduan egitura hori matrize gisa irudika daiteke, non errenkadak sarrerak diren eta zutabeak irteera mistoak diren. Sareari frogatzeko transakzioak bere irteerak zehazki gastatzen dituela (gako sekretuak ezagutzen ditu), sarrerak eraztun sinadura batekin sinatzen dira. Sinadura horrek bermatzen du sinatzaileak zutabeetako edozein elementuren gako sekretuak ezagutzen zituela.

Isilpeko transakzioek jada ez dituzte klasikoak erabiltzen kriptonota eraztun sinadurak, MLSAG-rekin ordezkatu ziren - sarrera anitzetarako egokitutako geruza bakarreko eraztun sinaduren antzeko bertsioa, LSAG.

Geruza anitzeko deitzen zaie hainbat sarrera aldi berean sinatzen dituztelako, eta horietako bakoitza beste hainbatekin nahasten da, hau da, matrize bat sinatzen da, eta ez errenkada bat. Geroago ikusiko dugunez, honek sinaduraren tamaina aurrezten laguntzen du.

Ikus dezagun nola eratzen den eraztun sinadura, 2 irteera erreal gastatzen dituen eta blokeo kateko m - 1 ausazkoak erabiltzen dituen transakzio baten adibidea erabiliz. Adierazi ditzagun gastatzen ditugun irteeren gako publikoak
Isilpeko transakzioak Monero-n, edo gauza ezezagunak helmuga ezezagunetara nola transferitu, eta haien irudi gakoak horren arabera: Isilpeko transakzioak Monero-n, edo gauza ezezagunak helmuga ezezagunetara nola transferitu Horrela, tamaina matrize bat lortuko dugu 2 x m. Lehenik eta behin, irteera pare bakoitzeko erronkak deiturikoak kalkulatu behar ditugu:
Isilpeko transakzioak Monero-n, edo gauza ezezagunak helmuga ezezagunetara nola transferitu
Irteerekin hasten ditugu kalkuluak, haien gako publikoak erabiliz gastatzen ditugunak:Isilpeko transakzioak Monero-n, edo gauza ezezagunak helmuga ezezagunetara nola transferitueta ausazko zenbakiakIsilpeko transakzioak Monero-n, edo gauza ezezagunak helmuga ezezagunetara nola transferituOndorioz, balio hauek lortuko ditugu:
Isilpeko transakzioak Monero-n, edo gauza ezezagunak helmuga ezezagunetara nola transferitu, erronka kalkulatzeko erabiltzen duguna
Isilpeko transakzioak Monero-n, edo gauza ezezagunak helmuga ezezagunetara nola transferituhurrengo irteera bikotea (errazago ulertzeko zer ordezkatzen ari garen non, balio hauek kolore ezberdinetan nabarmendu ditugu). Ondorengo balio guztiak zirkulu batean kalkulatzen dira lehenengo ilustrazioan emandako formulak erabiliz. Kalkulatu beharreko azken gauza benetako irteera pare baten erronka da.

Ikus dezakegunez, zutabe guztiek, irteera errealak dituenak izan ezik, ausaz sortutako zenbakiak erabiltzen dituzteIsilpeko transakzioak Monero-n, edo gauza ezezagunak helmuga ezezagunetara nola transferitu. For Ο€- zutabea ere beharko ditugu. Eraldatu gaitezenIsilpeko transakzioak Monero-n, edo gauza ezezagunak helmuga ezezagunetara nola transferitus-n:Isilpeko transakzioak Monero-n, edo gauza ezezagunak helmuga ezezagunetara nola transferitu
Sinadura bera balio hauen guztien tupla bat da:

Isilpeko transakzioak Monero-n, edo gauza ezezagunak helmuga ezezagunetara nola transferitu

Datu hauek transakzio batean idazten dira.

Ikus dezakegunez, MLSAGk erronka bakarra dauka c0, sinaduraren tamainan gordetzeko aukera ematen duena (dagoeneko leku asko eskatzen duena). Gainera, edozein ikuskatzaile, datuak erabilizIsilpeko transakzioak Monero-n, edo gauza ezezagunak helmuga ezezagunetara nola transferitu, c1,…, cm balioak leheneratzen ditu eta hori egiaztatzen duIsilpeko transakzioak Monero-n, edo gauza ezezagunak helmuga ezezagunetara nola transferitu. Horrela, gure eraztuna itxita dago eta sinadura egiaztatu da.

Mota osoko RingCT transakzioetarako, matrizeari lerro bat gehitzen zaio irteera mistoekin, baina honetaz hitz egingo dugu jarraian.

Pedersen konpromisoak

Betebehar-eskemak (ingelesezko konpromisoak maizago erabiltzen da) alderdi batek sekretu (kopuru) jakin bat ezagutzen duela froga dezan erabiltzen dira, benetan agerian utzi gabe. Esate baterako, dadoan zenbaki jakin bat botatzen duzu, konpromisoa kontuan hartu eta alderdi egiaztatzaileari pasatzen diozu. Horrela, zenbaki sekretua ezagutzera emateko momentuan, egiaztatzaileak modu independentean kalkulatzen du konpromisoa, eta horrela engainatu ez duzula ziurtatzen du.

Monero-konpromisoak transferentzien zenbatekoak ezkutatzeko eta aukerarik ohikoena erabiltzeko erabiltzen dira: Pedersen konpromisoak. Bide batez, datu interesgarri bat - hasieran garatzaileek nahasketa arruntaren bidez zenbatekoak ezkutatzea proposatu zuten, hau da, kopuru arbitrarioei irteerak gehitzea ziurgabetasuna sartzeko, baina gero konpromisoetara aldatu ziren (ez da kontua aurreztu zutenik. transakzioaren tamaina, jarraian ikusiko dugunez).
Oro har, konpromisoa honelakoa da:
Isilpeko transakzioak Monero-n, edo gauza ezezagunak helmuga ezezagunetara nola transferitunon C - konpromisoaren esanahia bera, a - ezkutuko zenbatekoa, H kurba eliptikoko puntu finko bat da (sorgailu gehigarria), eta x - maskara arbitrarioren bat, ausaz sortutako ezkutatze-faktore bat. Hemen maskara behar da, hirugarren batek konpromisoaren balioa besterik gabe asma ez dezan.

Irteera berri bat sortzen denean, diru-zorroak konpromisoa kalkulatzen du, eta gastatzen denean, sorkuntzan kalkulatutako balioa hartzen du edo birkalkulatzen du, transakzio motaren arabera.

RingCT sinplea

RingCT transakzio soilen kasuan, transakzioak sarrera-kopuruaren berdineko irteerak sortu zituela ziurtatzeko (ez zuen dirurik sortu gabe), beharrezkoa da lehenengoaren eta bigarrenaren konpromisoen batura izatea. berdinak izan, hau da:
Isilpeko transakzioak Monero-n, edo gauza ezezagunak helmuga ezezagunetara nola transferitu
Konpromiso komisioek apur bat desberdin ikusten dute - maskararik gabe:
Isilpeko transakzioak Monero-n, edo gauza ezezagunak helmuga ezezagunetara nola transferituNon a β€” komisioaren zenbatekoa, publikoki eskuragarri dago.

Ikuspegi honi esker, konfiantzazko alderdiari zenbateko berdinak erabiltzen ari garela frogatzen diogu, haiek jakinarazi gabe.

Gauzak argitzeko, ikus dezagun adibide bat. Demagun transakzio batek 10 eta 5 XMR-ko bi irteera (sarrera bihurtzen direla esan nahi du) eta 12 XMR balio duten hiru irteera sortzen dituela: 3, 4 eta 5 XMR. Aldi berean, 3 XMR-ko komisioa ordaintzen du. Horrela, gastatutako diru kopurua gehi sortutako zenbatekoa eta komisioa 15 XMRren berdina da. Saia gaitezen konpromisoak kalkulatzen eta haien zenbateko ezberdintasuna aztertzen (gogoratu matematika):

Isilpeko transakzioak Monero-n, edo gauza ezezagunak helmuga ezezagunetara nola transferitu
Hemen ikusten dugu ekuazioak bat egiteko, sarrerako eta irteerako maskaren baturak berdinak izan behar ditugula. Horretarako, diru-zorroa ausaz sortzen da x1, y1, y2 eta y3, eta gainerakoak x2 honela kalkulatzen du:
Isilpeko transakzioak Monero-n, edo gauza ezezagunak helmuga ezezagunetara nola transferitu
Maskara hauek erabiliz, edozein egiaztatzaileri froga diezaioke ez dugula gastatzen dugun baino funts gehiago sortzen, zenbatekoa jakinarazi gabe. Jatorrizkoa, ezta?

RingCT beteta

RingCT transakzio osoetan, transferentziaren zenbatekoak egiaztatzea apur bat korapilatsuagoa da. Transakzio horietan, diru-zorroak ez ditu sarrerak egiteko konpromisoak berriro kalkulatzen, baina sortu zirenean kalkulatutakoak erabiltzen ditu. Kasu honetan, suposatu behar dugu jada ez dugula zero berdineko batuketetan aldea lortuko, baizik eta:
Isilpeko transakzioak Monero-n, edo gauza ezezagunak helmuga ezezagunetara nola transferitu
Hemen z β€” sarrerako eta irteerako maskaren arteko aldea. Kontuan hartzen badugu zG gako publiko gisa (de facto dena), orduan z gako pribatua da. Horrela, gako publikoak eta dagozkion pribatuak ezagutzen ditugu. Datu hauek eskuan, MLSAG eraztunaren sinaduran erabil ditzakegu nahasten diren irteerako gako publikoekin batera:
Isilpeko transakzioak Monero-n, edo gauza ezezagunak helmuga ezezagunetara nola transferitu
Horrela, baliozko eraztun sinadura batek zutabeetako baten gako pribatu guztiak ezagutzen ditugula ziurtatuko du, eta azken errenkadako gako pribatua bakarrik ezagutu ahal izango dugu transakzioak gastatzen duen baino funts gehiago sortzen ez badu. Bide batez, hona hemen galderari erantzuna "zergatik ez du zerora eramaten konpromisoen kopuruen desberdintasunak" - baldin zG = 0, orduan zutabea irteera errealekin zabalduko dugu.

Nola daki funtsen hartzaileak zenbat diru bidali zitzaion? Hemen dena erraza da: transakzioaren igorleak eta hartzaileak gakoak trukatzen dituzte Diffie-Hellman protokoloa erabiliz, transakzio-gakoa eta hartzailearen ikuspegi-gakoa erabiliz eta partekatutako sekretua kalkulatu. Bidaltzaileak irteera-kopuruei buruzko datuak idazten ditu, partekatutako gako honekin zifratuta, transakzioaren eremu berezietan.

Gama frogak

Zer gertatzen da zenbaki negatibo bat erabiltzen baduzu konpromisoetan? Horrek txanpon gehigarriak sortzea ekar dezake! Emaitza hau onartezina da, beraz, erabiltzen ditugun kopuruak negatiboak ez direla bermatu behar dugu (kopuru horiek ezagutarazi gabe, noski, bestela hainbeste lan eta alferrik). Beste era batera esanda, batura tartean dagoela frogatu behar dugu [0, 2n - 1].

Horretarako, irteera bakoitzaren batura zifra bitarretan zatitzen da eta konpromezua zifra bakoitzeko bereizita kalkulatzen da. Hobe da hori nola gertatzen den adibide batekin ikustea.

Demagun gure zenbatekoak txikiak direla eta 4 bitetan sartzen direla (praktikan hau 64 bitekoa da), eta 5 XMR balio duen irteera bat sortzen dugu. Kategoria bakoitzeko konpromisoak kalkulatzen ditugu eta zenbateko osoaren konpromiso osoa:Isilpeko transakzioak Monero-n, edo gauza ezezagunak helmuga ezezagunetara nola transferitu
Ondoren, konpromiso bakoitza ordezko batekin nahasten da (Ci-2iH) eta binaka sinatzen da Borromeo eraztunaren sinadurarekin (beste eraztunaren sinadura bat), Greg Maxwell-ek proposatu zuen 2015ean (horri buruz gehiago irakur dezakezu Hemen):
Isilpeko transakzioak Monero-n, edo gauza ezezagunak helmuga ezezagunetara nola transferituBatera hartuta, sorta-froga deitzen zaio eta konpromisoek tarteko zenbatekoak erabiltzen dituztela ziurtatzeko aukera ematen du [0, 2n - 1].

Zer da hurrengoa?

Egungo inplementazioan, barrutiaren frogak leku asko hartzen dute - 6176 byte irteerako. Horrek transakzio handiagoak eta, beraz, kuota handiagoak eragiten ditu. Monero transakzio baten tamaina murrizteko, garatzaileek Borromeo sinaduren ordez balen aurkakoak sartzen ari dira - bitarteko konpromisorik gabeko barrutiaren froga mekanismoa. Estimazio batzuen arabera, barrutiaren frogaren tamaina %94raino murrizteko gai dira. Bide batez, uztailaren erdialdean teknologia pasatu zen auditoria Kudelski Security-tik, eta ez zuen gabezia nabarmenik agerian utzi ez teknologian bertan, ez bere ezarpenean. Teknologia proba sarean erabiltzen da dagoeneko, eta sardexka gogor berriarekin, seguruenik sare nagusira pasa daiteke.

Egin zure galderak, iradoki gaiak kriptomoneta alorreko teknologiei buruzko artikulu berrietarako, eta harpidetu gure taldera ere. Facebookgure ekitaldi eta argitalpenen berri izateko.

Iturria: www.habr.com

Gehitu iruzkin berria