Konfidentsiaalsed tehingud Moneros ehk kuidas kanda kes teab mida kes teab kuhu

Jätkame oma sarja Monero plokiahela kohta ja tänane artikkel keskendub protokollile RingCT (Ring Confidential Transactions), mis tutvustab konfidentsiaalseid tehinguid ja uusi ringsignatuure. Kahjuks on Internetis vähe teavet selle toimimise kohta ja me püüdsime seda lünka täita.

Konfidentsiaalsed tehingud Moneros ehk kuidas kanda kes teab mida kes teab kuhu

Räägime sellest, kuidas võrk selle protokolli abil ülekandesummasid peidab, miks nad loobusid klassikalistest krüptonotirõnga allkirjadest ja kuidas see tehnoloogia edasi areneb.

Kuna see protokoll on Monero üks keerukamaid tehnoloogiaid, on lugejal vaja põhiteadmisi selle plokiahela ülesehituse kohta ja teadmisi elliptilise kõvera krüptograafiast (nende teadmiste täiendamiseks võite lugeda meie artikli esimesi peatükke eelmine artikkel teemal mitu allkirja).

RingCT protokoll

Üks võimalik rünnak krüptonote valuutade vastu on plokiahela analüüs, mis põhineb teadmisel saadetud tehingu summa ja aja kohta. See võimaldab kitsendage ründajale huvipakkuvate väljapääsude otsinguala oluliselt. Sellise analüüsi eest kaitsmiseks on Monero juurutanud anonüümse tehinguprotokolli, mis peidab täielikult võrgus tehtavate ülekannete summad.

Väärib märkimist, et summade peitmise idee pole uus. Bitcoin Core'i arendaja Greg Maxwell oli üks esimesi, kes seda omas kirjeldas artikkel Konfidentsiaalsed tehingud. RingCT praegune teostus on selle modifikatsioon võimalusega kasutada rõngasignatuure (kas ilma nendeta) ja sellest saigi see oma nime - Ring Confidential Transactions.

Protokoll aitab muuhulgas vabaneda tolmuväljundite segamise probleemidest – väikese koguse väljunditest (tavaliselt laekub tehingutest vahetusrahana), mis tekitas rohkem probleeme, kui need väärt olid.

2017. aasta jaanuaris toimus Monero võrgu kõva hark, mis võimaldas valikuliselt kasutada konfidentsiaalseid tehinguid. Ja juba sama aasta septembris said versiooni 6 hard forkiga sellised tehingud ainsad võrgus lubatud.

RingCT kasutab korraga mitut mehhanismi: mitmekihilised lingitud spontaansed anonüümsed grupiallkirjad (mitmekihilised lingitud spontaansed anonüümsed rühmaallkirjad, edaspidi MLSAG), kohustuste skeem (Pedersen Commitments) ja vahemiku tõendid (sellel terminil pole vene keelde tõlget). .

RingCT-protokoll tutvustab kahte tüüpi anonüümseid tehinguid: lihtsaid ja täistehinguid. Rahakott genereerib esimese, kui tehing kasutab rohkem kui ühte sisendit, teise - vastupidises olukorras. Need erinevad tehingusummade ja MLSAG-allkirjaga allkirjastatud andmete valideerimise poolest (sellest räägime allpool). Lisaks saab täis tüüpi tehinguid genereerida suvalise arvu sisenditega, põhimõttelist erinevust pole. Raamatus "Nullist Monerosse" Sellega seoses väidetakse, et otsus piirata täistehinguid ühe sisendiga tehti kiirustades ja võib tulevikus muutuda.

MLSAG-i allkiri

Meenutagem, mis on allkirjastatud tehingute sisendid. Iga tehing kulutab ja loob raha. Vahendid genereeritakse tehinguväljundite loomisega (otse analoogiaga on pangatähed) ja sisendiks saab väljund, mille tehing kulutab (reaalses elus kulutame ju pangatähti) (olge ettevaatlik, siin on väga lihtne segadusse sattuda) .

Sisend viitab mitmele väljundile, kuid kulutab ainult ühe, luues seega "suitsuekraani", mis muudab tõlkeajaloo analüüsimise keeruliseks. Kui tehingul on rohkem kui üks sisend, siis saab sellist struktuuri esitada maatriksina, kus sisenditeks on read ja segaväljunditeks veerud. Tõestamaks võrgule, et tehing kulutab täpselt oma väljundid (teab nende salavõtmeid), allkirjastatakse sisendid ringsignatuuriga. Selline allkiri tagab, et allkirjastaja teadis mis tahes veeru kõigi elementide salavõtmeid.

Konfidentsiaalsete tehingute puhul ei kasutata enam klassikalisi tehinguid krüptonoot helinasignatuurid, asendati need MLSAG-iga - sarnaste ühekihiliste helinasignatuuride versiooniga, mis on kohandatud mitme sisendi jaoks, LSAG.

Neid nimetatakse mitmekihilisteks, kuna nad allkirjastavad korraga mitu sisendit, millest igaüks on segatud mitme teisega, st allkirjastatakse maatriks, mitte üks rida. Nagu hiljem näeme, aitab see säästa allkirja suurust.

Vaatame, kuidas tekib ringsignatuur, kasutades tehingu näidet, mis kulutab 2 reaalset väljundit ja kasutab segamiseks m - 1 juhuslikku plokiahelast. Tähistame nende väljundite avalikud võtmed, mida me kulutame
Konfidentsiaalsed tehingud Moneros ehk kuidas kanda kes teab mida kes teab kuhuja nende jaoks võtmekujutised vastavalt: Konfidentsiaalsed tehingud Moneros ehk kuidas kanda kes teab mida kes teab kuhu Seega saame suuruse maatriksi 2 x m. Esiteks peame arvutama iga väljundi paari jaoks nn väljakutsed:
Konfidentsiaalsed tehingud Moneros ehk kuidas kanda kes teab mida kes teab kuhu
Alustame arvutusi väljunditega, mille kulutame nende avalike võtmete abil:Konfidentsiaalsed tehingud Moneros ehk kuidas kanda kes teab mida kes teab kuhuja juhuslikud numbridKonfidentsiaalsed tehingud Moneros ehk kuidas kanda kes teab mida kes teab kuhuSelle tulemusena saame järgmised väärtused:
Konfidentsiaalsed tehingud Moneros ehk kuidas kanda kes teab mida kes teab kuhu, mida kasutame väljakutse arvutamiseks
Konfidentsiaalsed tehingud Moneros ehk kuidas kanda kes teab mida kes teab kuhujärgmine väljundpaar (et oleks lihtsam aru saada, mida kus asendame, oleme need väärtused eri värvidega esile tõstnud). Kõik järgmised väärtused arvutatakse ringis, kasutades esimesel joonisel toodud valemeid. Viimane asi, mida arvutada, on reaalse väljundi paari väljakutse.

Nagu näeme, kasutavad kõik veerud, välja arvatud see, mis sisaldab reaalseid väljundeid, juhuslikult genereeritud numbreidKonfidentsiaalsed tehingud Moneros ehk kuidas kanda kes teab mida kes teab kuhu. Jaoks π- veerus, me vajame ka neid. MuutkemKonfidentsiaalsed tehingud Moneros ehk kuidas kanda kes teab mida kes teab kuhus:Konfidentsiaalsed tehingud Moneros ehk kuidas kanda kes teab mida kes teab kuhu
Signatuur ise koosneb kõigist järgmistest väärtustest:

Konfidentsiaalsed tehingud Moneros ehk kuidas kanda kes teab mida kes teab kuhu

Seejärel kirjutatakse need andmed tehingusse.

Nagu näeme, sisaldab MLSAG ainult ühte väljakutset c0, mis võimaldab säästa allkirja suuruselt (mis nõuab juba palju ruumi). Lisaks iga inspektor, kes andmeid kasutabKonfidentsiaalsed tehingud Moneros ehk kuidas kanda kes teab mida kes teab kuhu, taastab väärtused c1,…, cm ja kontrollib sedaKonfidentsiaalsed tehingud Moneros ehk kuidas kanda kes teab mida kes teab kuhu. Seega on meie ring suletud ja allkiri kontrollitud.

Täistüüpi RingCT tehingute puhul lisatakse segaväljunditega maatriksisse veel üks rida, kuid sellest räägime allpool.

Pederseni kohustused

Kohustusskeemid (sagedamini kasutatakse ingliskeelset terminit kohustused) kasutatakse selleks, et üks osapool saaks tõestada, et teab teatud saladust (numbrit), ilma seda tegelikult avaldamata. Näiteks viskate täringul teatud arvu, kaalute pühendumust ja edastate selle kontrollijale. Seega arvutab kontrollija salanumbri avalikustamise hetkel iseseisvalt kohustuse, veendudes sellega, et te ei petnud teda.

Monero kohustusi kasutatakse ülekannete summade peitmiseks ja kõige levinuma võimaluse – Pederseni kohustuste – kasutamiseks. Muide, huvitav fakt - algul tegid arendajad ettepaneku peita summad tavalise segamise teel ehk lisada suvaliste summade jaoks väljundeid, et tekitada ebakindlust, kuid siis läksid üle kohustustele (pole fakt, et säästsid tehingu suurus, nagu allpool näeme).
Üldiselt näeb pühendumus välja järgmine:
Konfidentsiaalsed tehingud Moneros ehk kuidas kanda kes teab mida kes teab kuhukus C — kohustuse enda tähendus, a - varjatud summa, H on elliptilise kõvera fikseeritud punkt (täiendav generaator) ja x — mingi suvaline mask, juhuslikult genereeritud peittegur. Maski on siin vaja selleks, et kolmas osapool ei saaks pühendumise väärtust lihtsalt ära arvata.

Uue väljundi genereerimisel arvutab rahakott selle eest kohustuse ja kulumisel võtab kas genereerimisel arvutatud väärtuse või arvutab selle ümber, olenevalt tehingu tüübist.

RingCT lihtne

Lihtsate RingCT tehingute puhul on selleks, et tehing tekitaks väljundeid summas, mis on võrdne sisendite hulgaga (ei tootnud tühjast ilmast raha), on vajalik, et esimese ja teise kohustuste summa need on samad, see tähendab:
Konfidentsiaalsed tehingud Moneros ehk kuidas kanda kes teab mida kes teab kuhu
Pühendumuskomisjonid peavad seda veidi erinevalt - ilma maskita:
Konfidentsiaalsed tehingud Moneros ehk kuidas kanda kes teab mida kes teab kuhuKus a — komisjonitasu suurus, see on avalikult kättesaadav.

Selline lähenemine võimaldab meil tõestada tuginevale poolele, et kasutame samu summasid ilma neid avaldamata.

Asjade selgemaks muutmiseks vaatame näidet. Oletame, et tehing kulutab kaks väljundit (see tähendab, et neist saavad sisendid) 10 ja 5 XMR ning genereerib kolm väljundit väärtusega 12 XMR: 3, 4 ja 5 XMR. Samal ajal maksab ta vahendustasu 3 XMR. Seega on kulutatud rahasumma pluss genereeritud summa ja vahendustasu võrdne 15 XMR-iga. Proovime arvutada kohustused ja vaadata nende summade erinevust (pidage meeles matemaatikat):

Konfidentsiaalsed tehingud Moneros ehk kuidas kanda kes teab mida kes teab kuhu
Siin näeme, et võrrandi koondumiseks on vaja, et sisend- ja väljundmaskide summad oleksid samad. Selleks genereerib rahakott juhuslikult x1, y1, y2 ja y3, ja ülejäänud x2 arvutab nii:
Konfidentsiaalsed tehingud Moneros ehk kuidas kanda kes teab mida kes teab kuhu
Neid maske kasutades saame igale kontrollijale tõestada, et me ei teeni rohkem raha, kui kulutame, ilma summat avaldamata. Originaal, eks?

RingCT täis

Täielike RingCT tehingute puhul on ülekandesummade kontrollimine veidi keerulisem. Nende tehingute puhul ei arvuta rahakott sisendite kulukohustusi ümber, vaid kasutab neid, mis on arvutatud nende loomise ajal. Sel juhul peame eeldama, et me ei saa enam nulliga võrdsete summade vahet, vaid selle asemel:
Konfidentsiaalsed tehingud Moneros ehk kuidas kanda kes teab mida kes teab kuhu
see on z — erinevus sisend- ja väljundmaskide vahel. Kui arvestada zG avaliku võtmena (mida see de facto on), siis z on privaatvõti. Seega teame avalikke ja vastavaid privaatvõtmeid. Kui need andmed käes, saame neid kasutada MLSAG-i helisignaalis koos segatavate väljundite avalike võtmetega:
Konfidentsiaalsed tehingud Moneros ehk kuidas kanda kes teab mida kes teab kuhu
Seega tagab kehtiv ringsignatuur selle, et me teame ühe veeru kõiki privaatvõtmeid ja me saame teada ainult viimase rea privaatvõtit, kui tehing ei tekita rohkem raha kui kulutab. Muide, siin on vastus küsimusele "miks ei vii kohustuste summade erinevus nullini" - kui zG = 0, siis laiendame veergu reaalsete väljunditega.

Kuidas raha saaja teab, kui palju raha talle saadeti? Siin on kõik lihtne – tehingu saatja ja saaja vahetavad võtmeid kasutades Diffie-Hellmani protokolli, kasutades tehinguvõtit ja saaja vaatevõtit ning arvutavad välja jagatud saladuse. Saatja kirjutab selle jagatud võtmega krüpteeritud väljundkoguste andmed tehingu eriväljadele.

Vahemiku tõendid

Mis juhtub, kui kasutate kulukohustuste summana negatiivset arvu? See võib kaasa tuua täiendavate müntide genereerimise! Selline tulemus on vastuvõetamatu, seega peame tagama, et kasutatavad summad ei oleks negatiivsed (muidugi ilma neid summasid avaldamata, muidu on tööd nii palju ja kõik asjata). Teisisõnu peame tõestama, et summa on intervallis [0, 2n - 1].

Selleks jagatakse iga väljundi summa kahendnumbriteks ja kohustus arvutatakse iga numbri kohta eraldi. Parem on näha, kuidas see juhtub näitega.

Oletame, et meie kogused on väikesed ja mahuvad 4 bitti (praktikas on see 64 bitti) ning loome väljundi väärtusega 5 XMR. Arvutame kulukohustused iga kategooria kohta ja kogukohustuse kogu summa kohta:Konfidentsiaalsed tehingud Moneros ehk kuidas kanda kes teab mida kes teab kuhu
Järgmisena segatakse iga kohustus surrogaadiga (Ci-2iH) ja see on allkirjastatud paaris Borromeo sõrmuse allkirjaga (teine ​​​​sõrmusallkiri), mille pakkus välja Greg Maxwell 2015. aastal (selle kohta saate rohkem lugeda siin):
Konfidentsiaalsed tehingud Moneros ehk kuidas kanda kes teab mida kes teab kuhuKokkuvõttes nimetatakse seda vahemiku tõendiks ja see võimaldab teil tagada, et kohustused kasutavad vahemikus olevaid summasid [0, 2n - 1].

Mis edasi?

Praeguses teostuses võtavad vahemiku tõendid palju ruumi – 6176 baiti väljundi kohta. See toob kaasa suuremad tehingud ja seega ka kõrgemad tasud. Monero tehingu mahu vähendamiseks võtavad arendajad Borromeo allkirjade asemel kasutusele kuulikindlad mehhanismid – vahemikukindel mehhanism ilma bitipõhiste kohustusteta. Mõnede hinnangute kohaselt, suudavad nad vähendada vahemiku tõendi suurust kuni 94%. Muide, juuli keskel läks tehnoloogia läbi audit Kudelski Securitylt, mis ei toonud esile olulisi puudujääke ei tehnoloogias endas ega selle rakendamises. Tehnoloogia on testvõrgus juba kasutusel ja uue kõvahargiga saab see ilmselt põhivõrku kolida.

Esitage oma küsimusi, soovitage teemasid uute artiklite jaoks krüptovaluuta valdkonna tehnoloogiate kohta ja tellige ka meie grupp Facebooket olla kursis meie sündmuste ja väljaannetega.

Allikas: www.habr.com

Lisa kommentaar