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.
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
RingCT protokoloa
Cryptonote-ko moneten aurkako eraso posibleetako bat blockchain-en azterketa da bidalitako transakzioaren zenbatekoaren eta denboraren ezagutzan oinarrituta. Horrek ahalbidetzen du
Aipatzekoa da zenbatekoak ezkutatzeko ideia ez dela berria. Greg Maxwell Bitcoin Core garatzailea izan zen hura deskribatu zuen lehenetariko bat
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
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
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
, eta haien irudi gakoak horren arabera: Horrela, tamaina matrize bat lortuko dugu 2 x m. Lehenik eta behin, irteera pare bakoitzeko erronkak deiturikoak kalkulatu behar ditugu:
Irteerekin hasten ditugu kalkuluak, haien gako publikoak erabiliz gastatzen ditugunak:eta ausazko zenbakiakOndorioz, balio hauek lortuko ditugu:
, erronka kalkulatzeko erabiltzen duguna
hurrengo 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 dituzte. For Ο- zutabea ere beharko ditugu. Eraldatu gaitezens-n:
Sinadura bera balio hauen guztien tupla bat da:
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 erabiliz, c1,β¦, cm balioak leheneratzen ditu eta hori egiaztatzen du. 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
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:
non 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:
Konpromiso komisioek apur bat desberdin ikusten dute - maskararik gabe:
Non 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):
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:
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:
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:
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:
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
Batera 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.
Egin zure galderak, iradoki gaiak kriptomoneta alorreko teknologiei buruzko artikulu berrietarako, eta harpidetu gure taldera ere.
Iturria: www.habr.com