Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata asju teadmata sihtkohtadesse.

JĂ€tkame meie tsĂŒklit Monero blockchain'i ĂŒlesehituse teemal, ja tĂ€nane artikkel keskendub RingCT (Ring Confidential Transactions) protokollile, milles tutvustatakse konfidentsiaalseid tehinguid ja uusi rĂ”ngassigneeringuid. Kahjuks on internetis vĂ€he teavet selle toimimise kohta, ning oleme proovinud seda puudust tĂ€ita.

Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata asju teadmata sihtkohtadesse.

RÀÀgime sellest, kuidas see protokoll varjab ĂŒlekannete summasid, miks on loobutud klassikalistest cryptonote rĂ”ngassigneeringutest ja kuidas tehnoloogia tulevikus areneb.

Kuna see protokoll on ĂŒks Monero keerukamaid tehnoloogiaid, vajab lugeja pĂ”hiteadmisi selle blockchain'i ĂŒlesehitusest ja pindmist teadlikkust elliptsete kĂ”verate krĂŒptograafiast (et oma teadmisi vĂ€rskendada, vĂ”ib lugeda meie eelmise artikli esimesi peatĂŒkke) mitme allkirja kohta).

RingCT protokoll

Üks vĂ”imalikke rĂŒnnakuid cryptonote valuutade vastu on blokiketi analĂŒĂŒs, mis pĂ”hineb saadetud tehingu summal ja ajas. See vĂ”imaldab oluliselt kitsendada huvides oleva vĂ€ljundite otsimise ala. Sellel analĂŒĂŒsile vastupanu saavutamiseks on Moneros rakendatud anonĂŒĂŒmsete tehingute protokoll, mis varjab tĂ€ielikult ĂŒlekannete summasid vĂ”rgus.

Tuleb mĂ€rkida, et summa varjamise idee ei ole uus. Üks esimesi, kes seda kirjeldas, oli Bitcoin Core'i arendaja Greg Maxwell oma artiklis Confidential Transactions.Praegune RingCT rakendus on selle modifikatsioon koos ringallkirjade kasutamise vĂ”imalusega (kuidas siis ilma neist), ja seetĂ”ttu on see saanud oma nime – Ring Confidential Transactions.

Pealegi aitab protokoll vabaneda mustade vĂ€ljundite segamisprobleemidest – vĂ€ikeste summade vĂ€ljunditest (mis tavaliselt tekivad tehingute vahetasudena), mis pĂ”hjustasid rohkem probleeme kui neid vÀÀrt.

2017. aasta jaanuaris toimus Monero vĂ”rgus hard fork, mis vĂ”imaldas konfidentsiaalsete tehingute valikulist kasutamist. Juba sama aasta septembris sai versiooni 6 hard forkist selline tehingute tĂŒĂŒp vaid ainukeseks lubatud vormiks vĂ”rgus.

RingCT kasutab mitmeid mehhanisme: mitmekihilised seotud spontaansed anonĂŒĂŒmsed grupiallarid (Multilayered Linkable Spontaneous Anonymous Group Signature, edaspidi – MLSAG), kohustuste skeem (Pedersen Commitments) ja vahemiku tĂ”endid (sellel terminil ei ole kindlat tĂ”lget).

RingCT protokoll toob kahte tĂŒĂŒpi anonĂŒĂŒmseid tehinguid: simple ja full. Esimene genereerib rahakott, kui tehing kasutab rohkem kui ĂŒhte sisendit, teine — vastupidises olukorras. Need erinevad tehingusummade valideerimise ja allkirjastatavate MLSAG-allkirjade andmete poolest (rÀÀgime sellest lĂ€hemalt hiljem). TĂŒĂŒpi full tehingute genereerimine on vĂ”imalik mistahes sisendite arvuga, pĂ”himĂ”tteliselt pole vahet. Raamat „Zero to Monero“ sel teemal ĂŒtleb, et otsus piirata full tehingud ĂŒhe sisendiga tehti kiiruga ja tulevikus vĂ”ib see muutuda.

MLSAG-allkiri

Korratakse, mis kujutavad endast allkirjastatavad tehingu sisendid. Iga tehing kulutab teatud vahendeid ja genereerib. Vahendite genereerimine toimub tehingu vĂ€ljundite loomise kaudu (otse analoogia — rahatĂ€hed), ja vĂ€ljund, mida tehing kulutab (sest tegelikus elus kulutame me just rahakĂ€si), muutub sisendiks (ole ettevaatlik, siin on vĂ€ga kerge segadusse minna).

Sisend viitab mitmele vĂ€ljundile, kuid kulutab vaid ĂŒhe, luues seelĂ€bi „suitsuvahu“, et raskendada ĂŒlekannete ajaloo analĂŒĂŒsi. Kui tehingul on rohkem kui ĂŒks sisend, saab sellist struktuuri kujutada maatriksina, kus read on sisendid ja veerud — segatud vĂ€ljundid. Et tĂ”estada vĂ”rgule, et tehing kulutab tĂ”eliselt oma vĂ€ljundeid (teab nende salajasi vĂ”tmeid), allkirjastavad sisendid ringallkirjaga. Selline allkiri garanteerib, et allkirjastajal oleks teada salajased vĂ”tmed kĂ”igi mingi veeru elementide kohta.

Konfidentsiaalsed tehingud ei kasuta enam traditsioonilisi cryptonote ringallkirju, nende asemel on tulnud MLSAG — mitme sisendi jaoks kohandatud analoogne ĂŒhekihiliste ringallkirjade versioon, LSAG.

Nimetatakse multi-kihilisteks, kuna nad allkirjastavad kohe mitu sisendit, millest igaĂŒks on segatud mitme teisega, st allkirjastatakse maatriks, mitte ainult ĂŒks rida. Nagu me hiljem nĂ€eme, aitab see kokku hoida allkirja suuruses.

Vaadakem, kuidas ringallkiri moodustatakse, vĂ”ttes nĂ€iteks tehingu, mis kasutab 2 reaalset vĂ€ljundit ja segab kasutamiseks m — 1 juhuslikku blokiahelast. MĂ€rgime vĂ€lja, mida me kulutame, kui
Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata asju teadmata sihtkohtadesse., ja nende vastavad key images: Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata asju teadmata sihtkohtadesse. Nii et, meil on tulemuseks maatriks suurusega 2 x m. Esiteks peame arvutama nii nimetatud challenge'id iga vÀljundi paari jaoks:
Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata asju teadmata sihtkohtadesse.
Arvutused alustame vÀljunditega, mille avalikke vÔtmeid me kasutame:Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata asju teadmata sihtkohtadesse.ja juhuslikud numbridMonero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata asju teadmata sihtkohtadesse.Tulemusena saame vÀÀrtused:
Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata asju teadmata sihtkohtadesse., mida kasutame challenge'i arvutamiseks
Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata asju teadmata sihtkohtadesse.jÀrgmise vÀljundi paari jaoks (et oleks lihtsam aru saada, kuhu mis pannakse, oleme need vÀÀrtused esile tÔstnud erinevate vÀrvidega). KÔik jÀrgmised vÀÀrtused arvutatakse ringis vastavalt esimeses illustreerimises toodud valemitele. Viimasena arvutatakse challenge reaalse vÀljundi paari jaoks.

Kuidas me nĂ€eme, kasutatakse kĂ”igis veergudes, vĂ€lja arvatud reaalseid vĂ€ljundeid sisaldavas veerus, juhuslikult genereeritud numbreidMonero konfidentsiaalsed tehingud, vĂ”i kuidas edastada teadmata asju teadmata sihtkohtadesse.. Üheks vĂ”imaluseks on see, et seda montaaĆŸ on eraldi osasse, mis on kirjutamiseks kergesti kĂ€tessĂ€adav, samas kui enda π-ndas veerus need meil ka vajalikud. MuudameMonero konfidentsiaalsed tehingud, vĂ”i kuidas edastada teadmata asju teadmata sihtkohtadesse.s:ks:Monero konfidentsiaalsed tehingud, vĂ”i kuidas edastada teadmata asju teadmata sihtkohtadesse.
Allkiri on kÔigi nende vÀÀrtuste tuple:

Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata asju teadmata sihtkohtadesse.

SeejÀrel kirjutatakse need andmed tehingusse.

Kuidas me nĂ€eme, sisaldab MLSAG ainult ĂŒhte challenge'it c0, mis vĂ”imaldab kokkuhoidu allkirja suuruses (mis juba nĂ”uab palju ruumi). Edasi iga kontrollija, kasutades andmeidMonero konfidentsiaalsed tehingud, vĂ”i kuidas edastada teadmata asju teadmata sihtkohtadesse., taastab vÀÀrtused c1,
, cm ja kontrollib, etMonero konfidentsiaalsed tehingud, vĂ”i kuidas edastada teadmata asju teadmata sihtkohtadesse.. Nii et meie ring on suletud ja allkiri lĂ€bis kontrolli.

Full RingCT tehingute puhul lisatakse maatriksile veel ĂŒks rida segatud vĂ€ljunditega, kuid sellest rÀÀgime hiljem.

Pederseni kohustused

Kohustuste skeemid (tihti kasutatakse ingliskeelset terminit — commitments) on mĂ”eldud selleks, et ĂŒks pool saaks tĂ”estada, et ta teab mingit saladust (numbrist), paljastamata seda tegelikult. NĂ€iteks viskate tĂ€ringul mingit arvu, arvutate kohustuse ja edastate selle kontrollivale poolele. Nii, saladusliku numbri paljastamise hetkel arvestab kontrollija iseseisvalt kohustuse, veendudes seelĂ€bi, et te ei petnud teda.

Moneros kasutatakse kohustusi ĂŒlekannete summade varjamiseks ja rakendatakse kĂ”ige laialdasemalt levinud varianti — Pederseni kohustusi. Muide, huvitav fakt — algselt pakkusid arendajad vĂ€lja summa varjamise tavapĂ€rase segamise teel, lisades vĂ€ljundeid juhuslike summadega, et tekitada ebakindlust, kuid seejĂ€rel lĂ€ksid nad ĂŒle kohustustele (mille tulemusena ei pruugi nad siiski tehingu suuruses kokku hoida, nagu nĂ€eme hiljem).
Üldiselt nĂ€eb kohustus vĂ€lja jĂ€rgmiselt:
Monero konfidentsiaalsed tehingud, vĂ”i kuidas edastada teadmata asju teadmata sihtkohtadesse.Kus C — kohustuse vÀÀrtus, a — varjatav summa, H — fikseeritud punkt elliptilisel kĂ”veral (tĂ€iendav generaator), x — mingisugune suvaline mask, peitev tegur, mis genereeritakse juhuslikult. Mask on siin vajalik, et kolmas osapool ei saaks lihtsa katsega vÀÀrtust commitment vĂ€lja selgitada.

Uue vĂ€ljundi genereerimisel arvutab rahakott selle jaoks commitment'i, ning kulutamise korral vĂ”tab kas genereerimise ajal arvutatud vÀÀrtuse vĂ”i arvutab selle uuesti — sĂ”ltuvalt tehingu tĂŒĂŒbist.

RingCT simple

Simple RingCT tehingute puhul, et tagada, et tehing on loonud vÀljundid, mille summa on vÔrdne sissetulekute summaga (ei ole mingit raha Ôhust tekkinud), peab esimeste ja teise commitments'e summa olema sama, see tÀhendab:
Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata asju teadmata sihtkohtadesse.
Komisjonitasusid arvutatakse veidi teisiti — ilma maskita:
Monero konfidentsiaalsed tehingud, vĂ”i kuidas edastada teadmata asju teadmata sihtkohtadesse., kus a — komisjonitasu summa, see on avalikult kergesti kĂ€ttesaadav.

Selline lÀhenemine vÔimaldab tÔestada kontrollijale, et me kasutame samu summasid, neid avaldamata.

Et kÔik oleks selgem, vaatame nÀidet. Oletame, et tehing kasutab kahte vÀljundit (st need muutuvad sissetulekuteks) summas 10 ja 5 XMR ning genereerib kolm vÀljundit kogusummas 12 XMR: 3, 4 ja 5 XMR. Selle eest tasub ta komisjonitasu 3 XMR. Seega kulutatud raha summa pluss genereeritud summa ja komisjonitasu kokku on 15 XMR. Proovime arvutada commitments'e ja vaatame nende summade erinevust (korrake matemaatikat):

Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata asju teadmata sihtkohtadesse.
Siin me nĂ€eme, et tasakaalu saavutamiseks peavad sisse- ja vĂ€ljundite maskide summad olema ĂŒhesugused. Selleks genereerib rahakott juhuslikult x1, y1, y2 ja y3, ning ĂŒlejÀÀnud x2 arvutab nii:
Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata asju teadmata sihtkohtadesse.
Kasutades neid maske, saame tÔestada igale kontrollijale, et me ei generi rohkem vahendeid, kui me kulutame, summasid avaldamata. Algne, eks?

RingCT full

Full RingCT tehingute puhul toimub summade kontrollimise protsess veidi keerukamalt. Nendes tehingutes ei arvuta rahakott sissetulekute jaoks commitments'e uuesti, vaid kasutab neid, mis on genereerimise ajal arvutatud. Arvestama peab, et summa erinevus ei ole enam null, vaid selle asemel:
Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata asju teadmata sihtkohtadesse.
Siin z — sissetulekute ja vĂ€ljundite maskide erinevus. Kui vaadata zG nagu avaliku vĂ”tme (millega ta de jure on), siis z — see on privaatvĂ”ti. Nii teame me avalikku ja sellele vastavat privaatvĂ”tit. Olles need andmed, saame neid kasutada MLSAG ringallkirjas koos segatud vĂ€ljundite avalike vĂ”tmetega:
Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata asju teadmata sihtkohtadesse.
Seega garanteerib kehtiv ringallkiri, et me teame kĂ”iki privaatvĂ”tmeid ĂŒhe veeru kohta, samas kui viimane rida privaatvĂ”tme saame teada ainult juhul, kui tehing ei genereeri vahendeid rohkem, kui kulutab. Ühest kĂŒljest, siin on ka vastus kĂŒsimusele „miks summeerimise erinevused ei vii nullini“ — kui zG = 0, siis paljastame veeru tegelike vĂ€ljunditega.

Aga kuidas saaja teab, kui palju raha talle saadeti? Siin on kĂ”ik lihtne — tehingu saatja ja saaja vahetavad vĂ”tmeid Diffie-Hellmani protokolli kaudu, kasutades tehinguvĂ”tit ja saaja vaatamisvĂ”tit ning arvutavad ĂŒhise salajase. Saatja kirjutab tehingu spetsiaalsetesse vĂ€ljakutesse summad vĂ€lja, mis on krĂŒpteeritud selle ĂŒhise vĂ”tmega.

Range proofs

Aga mis juhtub, kui kasutame summa tĂ”endustes negatiivset numbrit? See vĂ”ib viia tĂ€iendavate mĂŒntide genereerimiseni! Selline tulemus on vastuvĂ”etamatu, seega on vajalik tagada, et meie kasutatavad summad pole negatiivsed (ilma nende summade avalikustamiseta, loomulikult, vastasel juhul oleks kogu vaev asjata). TeisisĂ”nu, peame tĂ”endama, et summa jÀÀb vahemikku [0, 2n — 1].

Selleks jagatakse iga vÀljundi summa kaheksandiks ja arvutatakse iga bitisumma kohta eraldi tÔendus. Kuidas see toimub, on parem vaadata nÀite abil.

Oletame, et summad on meil vÀikesed ja mahtuvad 4 bitti (praktikas on see 64 bitti), ja loome vÀljundi summas 5 XMR. Arvutame tÔendused igas bitis ja kokku kogu summa jaoks:Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata asju teadmata sihtkohtadesse.
SeejĂ€rel segatakse iga tĂ”endus asendusega (Ci-2iH) ja allkirjastatakse paarikaupa Borromeo ringallkirjaga (veel ĂŒks ringallkiri), mille pakkus vĂ€lja Greg Maxwell 2015. aastal (rohkem selle kohta saab lugeda siin):
Monero konfidentsiaalsed tehingud, vĂ”i kuidas edastada teadmata asju teadmata sihtkohtadesse.Kokku nimetatakse seda ulatuslikuks tĂ”enduseks ja see garanteerib, et tĂ”endustes kasutatakse summasid vahemikus [0, 2n — 1].

Mis edasi?

Praeguses rakenduses vĂ”tavad vahemikuproofid vĂ€ga palju ruumi — 6176 baiti ĂŒhe vĂ€ljundi kohta. See viib suurte tehinguteni ja seega kĂ”rgemate tasudeni. Tehingu suuruse vĂ€hendamiseks tutvustavad Monero arendajad allkirjade asemel Borromeo bulletproofse — vahemikuproovi mehhanismi ilma bititasemel kohustusteta. MĂ”nede hinnangute kohaselt, suudavad nad vĂ€hendada vahemikuproovi suurust kuni 94%. Kasutatuna on see tehnoloogia keset juulit lĂ€binud auditimise Kudelski Securityilt, kes ei leidnud tehnoloogia ega selle rakenduse osas olulisi puudusi. Tehnoloogiat kasutatakse juba testvĂ”rgus ning uue hard forki korral vĂ”ib see tĂ”enĂ€oliselt minna ka peavĂ”rku.

Esitage oma kĂŒsimused, pakkuda teemasid uute artiklite jaoks krĂŒptovaluutatehnoloogiast ning liituge meie grupiga Facebook, et olla kursis meie sĂŒndmuste ja vĂ€ljaannetega.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster