Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata ja teadmata kohas

JĂ€tkame meie tsĂŒklit Monero plokiahela toimimise teemal ning tĂ€nane artikkel kĂ€sitleb protokolli RingCT (Ring Confidential Transactions), mis tutvustab konfidentsiaalseid tehinguid ja uusi rĂ”ngassignaale. Kahjuks on internetis vĂ€he teavet selle toimimise kohta ning oleme pĂŒĂŒdnud seda puudust tĂ€ita.

Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata ja teadmata kohas

RÀÀgime sellest, kuidas see protokoll varjab vĂ”rgus ĂŒlekannete summasid, miks loobuti klassikalistest cryptonote rĂ”ngassignaalidest ning kuidas see tehnoloogia edasi areneb.

Kuna see protokoll on ĂŒks Monero keerulisemaid tehnoloogiaid, vajab lugeja baasteadmisi selle plokiahela toimimise kohta ning pindmist arusaamist elliptiliste kĂ”verate krĂŒptograafiast (kui soovite need teadmised vĂ€rskendada, vĂ”ite lugeda meie eelneva artikli esimesi peatĂŒkke kohta) multipodpisĐ”d).

RingCT protokoll

Üks vĂ”imalikke rĂŒnnakuid cryptonote valuutadele on plokiahela analĂŒĂŒs, mis pĂ”hineb tehingu summa ja tĂ”usmise aja teadmisel. See vĂ”imaldab oluliselt kitsendada kurjategijate huvi pakkuvate vĂ€ljundite otsinguvĂ”imalusi. Sellise analĂŒĂŒsi kaitsmiseks on Monerosse juurutatud anonĂŒĂŒmsete tehingute protokoll, mis peidab tĂ€ielikult tehingute summasid vĂ”rgus.

Tuleb mĂ€rkida, et summa varjamine ei ole uus idee. Üks esimesi, kes seda kirjeldas, oli Bitcoin Corey arendaja Greg Maxwell oma artiklis Confidential Transactions. Praegune RingCT rakendus on selle modifitseeritud versioon koos vĂ”imalusega kasutada rĂ”ngasallkirju (ilma nendeta ei saa), ning seetĂ”ttu saigi see nimeks — Ring Confidential Transactions.

Lisaks aitab protokoll vabaneda probleemidest, mis on seotud tolmu vĂ€ljundite segamisega — vĂ€ikeste summade vĂ€ljunditega (tavaliselt saadakse need tehingute tagasisaamisena), mis tekitasid rohkem probleeme, kui nad ise vÀÀrt olid.

2017. aasta jaanuaris toimus Monero vÔrgus hard fork, mis vÔimaldab valikuliselt kasutada konfidentsiaalseid tehinguid. Ja juba sama aasta septembris said versiooni 6 hard fork'ist sellised tehingud ainsateks lubatud tehinguteks vÔrgus.

RingCT kasutab mitmeid mehhanisme: mitmekihilised seotud spontaansed anonĂŒĂŒmsed grupialgoritmid (Multilayered Linkable Spontaneous Anonymous Group Signature, edaspidi — MLSAG), kohustuslikkuse skeem (Pedersen Commitments) ja range tĂ”endid (selle termini kehtivat tĂ”lget eesti keeles ei ole).

RingCT protokoll toob sisse kaks tĂŒĂŒpi anonĂŒĂŒmsed tehingud: simple ja full. Esiteks genereerib rahakott, kui tehing kasutab rohkem kui ĂŒhte sisendit, teiseks — vastupidises olukorras. Need erinevad tehingusummade valideerimise ja MLSAG-allkirjaga allkirjastatud andmete poolest (rÀÀgime sellest edasi). TĂ€iendavalt saab full tehingute genereerimine toimuda igasuguste sisendite arvuga, pĂ”himĂ”tteliselt pole vahet. Raamatus «Zero to Monero» selgub, et otsus piirata full tehingud ĂŒhe sisendi kasuks tehti kiirusest ja tulevikus vĂ”ib see muutuda.

MLSAG-allkiri

Tulet meenutada, millised on rakendatud tehingute sisendid. Iga tehing kulutab teatud raha ja genereerib uue. Raha genereerimine toimub tehingu vĂ€ljundite loomise teel (otseanalogia — rahatĂ€hed), ning vĂ€ljund, mida tehing kasutab (kuna reaalses elus kasutame me just raharoogasid), muutub sisendiks (siin on kergesti segadusse minek).

Sisend viitab mitmele vĂ€ljundile, kuid kasutab ainult ĂŒhte, luues sellega „suitseva katte”, et keerulisemaks muuta ĂŒlekannete ajaloo analĂŒĂŒsimist. Kui tehingul on rohkem kui ĂŒks sisend, vĂ”ib sellist struktuuri kujutada ruudustikuna, kus read on sisendid ja veerud on kaasatud vĂ€ljundid. Et tĂ”estada vĂ”rku, et tehing kasutab just oma vĂ€ljundeid (teab nende saladuslikke vĂ”tmeid), allkirjastavad sisendid ringallkiri. Selline allkiri annab garantii, et allkirjastaja teadis kĂ”igi tulba elementide saladuslikke vĂ”tmeid.

Konfidentsiaalsed tehingud ei kasuta enam klassikalisi cryptonote ring signatures, replaced by MLSAG — a multi-input adapted version of similar single-layer ring signatures, LSAG.

They are called multilayered because they sign multiple inputs at once, each mixed with several others, i.e., a matrix is signed rather than a single row. As we will see later, this helps save on the size of the signature.

Let's consider how a ring signature is formed, using the example of a transaction that spends 2 real outputs and uses m - 1 random inputs from the blockchain for mixing. We denote the public keys of the outputs we are spending as
Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata ja teadmata kohas, and the key images for them respectively: Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata ja teadmata kohas Thus, we end up with a matrix of size 2 x m. First, we need to compute the so-called challenges for each pair of outputs:
Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata ja teadmata kohas
We start the calculations with the outputs we are spending, using their public keys:Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata ja teadmata kohasand random numbersMonero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata ja teadmata kohasIn the end, we obtain the values:
Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata ja teadmata kohas, which we use to calculate the challenge
Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata ja teadmata kohasjÀrgmise paari vÀljundite jaoks (kergemini mÔistetavaks, oleme need vÀÀrtused erinevate vÀrvidega esile toonud). KÔik jÀrgmised vÀÀrtused arvutatakse ringikujuliselt esitatud valemite alusel, mis on nÀhtavad esimesel illustratsioonil. Viimasena arvutatakse vÀlja challenge kahe reaalse vÀljundi jaoks.

Nagu nĂ€eme, kasutatakse kĂ”igis veergudes, vĂ€lja arvatud reaalsete vĂ€ljundite sisaldavas veerus, juhuslikult genereeritud arve.Monero konfidentsiaalsed tehingud, vĂ”i kuidas edastada teadmata ja teadmata kohas. Selle jaoks πveergudest on need meil samuti vajalikud. MuudameMonero konfidentsiaalsed tehingud, vĂ”i kuidas edastada teadmata ja teadmata kohass-ks:Monero konfidentsiaalsed tehingud, vĂ”i kuidas edastada teadmata ja teadmata kohas
Allkiri on kohtumine kÔigi nende vÀÀrtustega:

Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata ja teadmata kohas

Edasi salvestatakse need andmed tehingusse.

Nagu nĂ€eme, sisaldab MLSAG vaid ĂŒhte challenge c0, mis vĂ”imaldab allkirja suurusest kokku hoida (mis juba nĂ”uab palju ruumi). Edasi taastab iga kontrollija, kasutades andmeidMonero konfidentsiaalsed tehingud, vĂ”i kuidas edastada teadmata ja teadmata kohas, vÀÀrtused c1,
, cm ja kontrollib, etMonero konfidentsiaalsed tehingud, vĂ”i kuidas edastada teadmata ja teadmata kohas. Nii on meie ring suletud ja allkiri on eduka kontrolli lĂ€binud.

Full tĂŒĂŒpi RingCT tehingute jaoks lisatakse segatud vĂ€ljunditega maatriksile veel ĂŒks rida, kuid sellest rÀÀgime allpool.

Pederseni kohustused

Kohustuste skeemid (tavaliselt kasutatakse ingliskeelset terminit — commitments), et ĂŒks osapool saaks tĂ”estada, et ta teab mingit saladust (numbriline vÀÀrtus), paljastamata seda tegelikult. NĂ€iteks viskate mĂ”ningaid numbreid kahel dice'il, arvutate commitment'i ja edastate selle kontrollimise poolele. Sel viisil, saladusliku numbri avaldamise hetkel, kontrollija arvutab iseseisvalt commitment'i, veendudes, et te pole teda petnud.

Monero's kasutatakse commitments ĂŒlekannete summade varjamiseks ja kasutatakse kĂ”ige levinumat varianti — Pedersen commitments. Üks huvitav fakt — algselt pakkusid arendajad, et summasid varjatakse tavalise segamise kaudu, st lisades vĂ€ljundid juhuslikele summadele, et tekitada ebamugavust, kuid seejĂ€rel lĂ€ksid nad ĂŒle commitments'ile (kuid pole kindel, et nad sÀÀstsid tehingu suuruses, nagu me allpool nĂ€eme).
Üldjuhul nĂ€eb commitment jĂ€rgmised elemendid:
Monero konfidentsiaalsed tehingud, vĂ”i kuidas edastada teadmata ja teadmata kohasKus C — commitment'i vÀÀrtus, a — varjatud summa, H — kindel punkt elliptilisel kĂ”veral (lisageneraator), x — mingi juhuslik mask, peidab tegurit, mis genereeritakse juhuslikult. Siin on mask vajalik, et kolmas osapool ei saaks lihtsa ridade vĂ”rgu tulemust kombineerides vÀÀrtust commitment vĂ€lja selgitada.

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

RingCT lihtne

Lihtse RingCT tehingute puhul, et tagada, et tehing on loonud vĂ€ljundeid summas, mis on vĂ”rdne sisendite summaga (ei genereeri raha tĂŒhjast Ă”hust), peab esimeste ja teise commitments'e summa olema sama, see tĂ€hendab:
Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata ja teadmata kohas
Kommertsitasu arvutavad veidi teisiti — ilma maskita:
Monero konfidentsiaalsed tehingud, vĂ”i kuidas edastada teadmata ja teadmata kohas, kus a — tasu summa, see on avalikult kĂ€ttesaadav.

Selline lÀhenemine vÔimaldab tÔestada kontrollijale, et kasutame sama summasid, paljastamata neid.

Kuna kÔik oleks selgem, vaatame nÀidet. Oletame, et tehing kasutab kahte vÀljundit (st need saavad sissetulekuteks) summas 10 ja 5 XMR ning genereerib kolm vÀljundit summas 12 XMR: 3, 4 ja 5 XMR. Samuti makstakse tasu 3 XMR. Seega on kulutatud raha summa pluss genereeritud summa ja tasu kokku 15 XMR. Proovime arvutada commitments ja vaatame nende summade erinevust (korratakse matemaatikat):

Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata ja teadmata kohas
Siin nÀeme, et vÔrrandi kehtimiseks peavad sissetulekute ja vÀljundite maskide summad olema vÔrdsed. Selleks genereerib rahakott juhuslikult x1, y1, y2 ja y3, samas kui jÀÀk x2 arvutatakse nii:
Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata ja teadmata kohas
Kasutanud neid maske, saame tÔestada igasugustele kontrollijatele, et me ei genereeri rohkem vahendeid, kui kulutame, paljastamata summasid. Algne, eks?

RingCT tÀis

TĂ€is RingCT tehingutes toimub ĂŒlekande summade kontrollimine veidi keerukamalt. Nendes tehingutes ei arvuta rahakott sissetulekute jaoks commitments, vaid kasutab nende genereerimisel arvutatud vÀÀrtusi. Selle juures tuleb eeldada, et summade erinevust me enam nullina ei saa, vaid selle asemel:
Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata ja teadmata kohas
Siit z — sissetulekute ja vĂ€ljundite maskide erinevus. Kui vaadata zG kuna avalik vĂ”ti (milleks see de facto on), siis z — see on privaatne vĂ”ti. Nii teame me avalikku ja vastavat privaatset vĂ”tit. Need andmed vĂ”imaldavad neid kasutada MLSAG ringallkirjas koos segatud vĂ€ljundite avalikest vĂ”tmetest:
Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata ja teadmata kohas
Seega tagab kehtiv ringallkiri, et me teame kĂ”iki ĂŒhte veergu kuuluvate privaatsete vĂ”tmeid, samas kui viimasel real olevat privaatset vĂ”tit saame teada ainult juhul, kui tehing ei tekita ressursse rohkem, kui kulutab. Muide, siin on vastus kĂŒsimusele "miks summa jaotised ei too nulli" — kui zG = 0, siis me avame rea reaalseid vĂ€ljundeid.

Aga kuidas saajale teada saada, kui palju raha talle saadeti? Siin on kĂ”ik lihtne — tehingu saatja ja saaja vahetavad vĂ”tmeid Diffie-Hellmani protokolli kaudu, kasutades tehingu vĂ”tit ja saaja view-vĂ”tit ning arvutavad ĂŒhise salajase. Saatja kirjutab tehingu erilistes vĂ€ljad andmed vĂ€ljundite summadest, mis on krĂŒptitud selle ĂŒhise vĂ”tmega.

Range proofs

Ja mis juhtub, kui kasutame commitmentides negatiivset numbrit? See vĂ”ib viia tĂ€iendavate mĂŒntide genereerimiseni! Selline tulemus on lubamatu, seetĂ”ttu on vajalik garantii, et meie kasutatavad summad ei oleks negatiivsed (ilma nende summade avalikustamiseta, muidugi, vastasel juhul oleks kĂ”ik see vaev asjatu). TeisisĂ”nu, me peame tĂ”estama, et summa jÀÀb vahemikku [0, 2n — 1].

Selleks jagatakse iga vÀljundi summa kaheksandaks ja arvutatakse commitment igas kaheksandas eraldi. Kuidas see toimub, on parem vaadata nÀite kaudu.

Oletame, et summad on meil vÀikesed ja mahuvad 4 bitti (praktikas 64 bitti), ja me loome vÀljundi summaga 5 XMR. Arvutame commitmentid iga kaheksanda jaoks ja kogu commitment kogu summa jaoks:Monero konfidentsiaalsed tehingud, vÔi kuidas edastada teadmata ja teadmata kohas
SeejĂ€rel segatakse iga commitment surrogaadiga (Ci-2iH) ja paarikaupa allkirjastatakse Borromeo ringallkirjaga (veel ĂŒks ringallkiri), mille tĂ”i vĂ€lja Greg Maxwell 2015. aastal (rohkema teabe saamiseks saate lugeda siit):
Monero konfidentsiaalsed tehingud, vĂ”i kuidas edastada teadmata ja teadmata kohasKokku nimetatakse seda range proof'iks ja see vĂ”imaldab tagada, et commitmentides kasutatakse summasid vahemikus [0, 2n — 1].

Mis edasi?

Praeguses rakenduses vĂ”tavad range proof'id vĂ€ga palju ruumi — 6176 baiti ĂŒhe vĂ€ljundi kohta. See viib suurte tehinguteni ja vastavalt suurematele tasudele. Tehingu suuruse vĂ€hendamiseks kasutavad Monero arendajad allkirjade asemel Borromeo bulletproofsid — range proof'i mehhanismi, mis ei kasuta bitipĂ”hiseid commitments. MĂ”ningate hinnangute kohaselt, suudavad nad vĂ€hendada range proof'i suurust 94%. Ütlematagi selge, et juuli keskpaiku lĂ€bis tehnoloogia audit Kudelski Security'lt, mis ei leidnud tehnoloogias ega selle rakendamises olulisi puudusi. Tehnoloogiat rakendatakse juba testvĂ”rgus ja uue hard fork'i korral vĂ”ib see tĂ”enĂ€oliselt ĂŒle minna ka pĂ”hivĂ”rku.

Esitage oma kĂŒsimused, pakkuge teemasid uusimate krĂŒptovaluutatehnoloogiate artiklite jaoks ning liituge meie grupiga Facebook, et olla kursis meie ĂŒrituste ja publikatsioonidega.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster