Vazhdojmë ciklin tonë mbi ndërtimin e blockchain-it Monero, dhe artikulli i sotëm do të jetë i dedikuar protokollit RingCT (Transaksionet Konfidenciale me Rruaz), i cili paraqet transaksione konfidenciale dhe nënshkrime të reja në unazë. Fatkeqësisht, në internet ka pak informacione rreth mënyrës se si funksionon, dhe ne përpiqemi të mbuloj këtë boshllëk.

Ne do të flasim për mënyrën se si ky protokoll fsheh shumën e transfertave, pse është hequr dorë nga nënshkrimet klasike të rruazës për cryptonote, dhe si do të zhvillohet kjo teknologji në të ardhmen.
Duke qenë se ky protokoll është një nga teknologjitë më të komplikuara në Monero, lexuesi do t'i duhet njohuri themelore mbi ndërtimin e këtij blockchain-i dhe njohuri sipërfaqësore mbi kriptografinë në kurba elliptike (për të rifreskuar këto njohuri, mund të lexoni kapitujt e parë të artikullit tonë të mëparshëm mbi ).
Protokolli RingCT
Një nga sulmet e mundshme ndaj monedhave cryptonote është analiza e blockchain-it, e bazuar në njohjen e shumës dhe kohës së transfertës së dërguar. Kjo lejon të ngushtohet ndjeshëm zona e kërkimit për daljet që e interesojnë hajnin. Për t'u mbrojtur nga një analizë të tillë, në Monero u implementua protokolli i transaksioneve anonime, i cili fsheh plotësisht shumën e transfertave në rrjet.
Vlen të theksohet se ideja e fshehjes së shumave nuk është e re. Një nga të parët që e përshkroi këtë ishte zhvilluesi i Bitcoin Core, Greg Maxwell, në artikullin e tij . Realizimi aktual i RingCT është një modifikim i tij me mundësinë e përdorimit të nënshkrimeve në unazë (ku të mos ishin ato), duke marrë emrin Ring Confidential Transactions.
PĂ«rveç kĂ«saj, protokolli ndihmon nĂ« eliminimin e problemeve me ndĂ«rlikimet e daljeve tĂ« pluhurit â daljet me shumĂ« tĂ« vogĂ«l (qĂ« zakonisht rezultojnĂ« si kthim nga transaksionet), tĂ« cilat krijonin mĂ« shumĂ« probleme se sa vlenin vetĂ«.
Në janar të vitit 2017, një fork i ashpër i rrjetit Monero u zhvillua, duke lejuar përdorimin opsional të transaksioneve konfidenciale. Dhe tashmë në shtator të atij viti, nga fork-u i versionit 6, këto transaksione u bënë të vetmet të lejuara në rrjet.
RingCT pĂ«rdor disa mekanizma nĂ« tĂ« njĂ«jtĂ«n kohĂ«: nĂ«nshkrime grupore anonime spontane tĂ« lidhura shumĂ«-shtresore (Multilayered Linkable Spontaneous Anonymous Group Signature, mĂ« pas â MLSAG), skemĂ«n e angazhimeve (Pedersen Commitments) dhe provat e gamĂ«s (nuk ka njĂ« pĂ«rkthim tĂ« qĂ«ndrueshĂ«m pĂ«r kĂ«tĂ« term nĂ« gjuhĂ«n shqipe).
Protokolli RingCT prezanton dy lloje transaksionesh anonime: simple dhe full. Të parat krijohen nga portofoli kur transaksioni përdor më shumë se një hyrje, ndërsa të dytat ndodhin në situatën e kundërt. Ato dallohen nga validimi i shumave të transaksioneve dhe të dhënat e nënshkruara me nënshkrimin MLSAG (më shumë për këtë do të flasim më poshtë). Po ashtu, transaksionet e tipit full mund të krijohen me çdo numër hyrjesh, nuk ka ndonjë ndryshim fundamentale. Në librin për këtë çështje thuhet se vendimi për të kufizuar transaksionet full në një hyrje u mor shpejt dhe në të ardhmen mund të ndryshojë.
Nënshkrimi MLSAG
Le tĂ« kujtojmĂ« se çfarĂ« pĂ«rfaqĂ«sojnĂ« hyrjet e nĂ«nshkruara tĂ« transaksioneve. Ădo transaksion shpenzon disa fonde dhe krijon. Krijimi i fondeve ndodh pĂ«rmes krijimit tĂ« daljeve tĂ« transaksionit (analogji e drejtpĂ«rdrejtĂ« - banknotat), dhe dalja qĂ« transaksioni shpenzon (nĂ« jetĂ« reale shpenzojmĂ« banknotat) bĂ«het hyrja (kujdes, kĂ«tu Ă«shtĂ« shumĂ« e lehtĂ« tĂ« ngatĂ«rrosh).
Hyrja i referohet disa daljeve, por shpenzon vetëm një, duke krijuar kështu një "mashtrues" për të vështirësuar analizën e historisë së transfertave. Nëse transaksioni ka më shumë se një hyrje, atëherë një strukturë të tillë mund ta përfytyrojmë si një matricë, ku rreshtat janë hyrjet dhe kolonat janë daljet e përfshira. Për të provuar rrjetit se transaksioni shpenzon daljet e veta (dhe i di çelësat e tyre të fshehtë), hyrjet nënshkruhen me nënshkrimin ringjizë. Ky nënshkrim jep garancinë se nënshkruesi e dinte çelësat e fshehtë të të gjithë elementeve të ndonjë prej kolonave.
Transaksionet konfidenciale nuk përdorin më nënshkrime klasike për nënshkrimet ringjizë, për to kanë ardhur MLSAG - një version i përshtatur për disa hyrje të nënshkrimeve të ngjashme të njëkatëshe, .
Ato quhen shumëkatëshe, sepse nënshkruajnë menjëherë disa hyrje, secila e cila është e përfshirë me disa të tjera, dmth, nënshkruhet një matricë dhe jo një rresht i vetëm. Siç do ta shohim më tej, kjo ndihmon të kursejmë në madhësinë e nënshkrimit.
Le të shohim se si formohet nënshkrimi ringjizë, për shembullin e një transaksioni që shpenzon 2 dalje reale dhe përdor për përzierje m - 1 rastësishme nga blockchain. Le të shënojmë çelësat publikë të daljeve që shpenzojmë, si
, dhe imazhet e çelësit për to përkatësisht:
Kështu, ne kemi një matricë me përmasat 2 x m. Në fillim, ne duhet të llogarisim sfidat e quajtura challenges për çdo çift daljesh:

Llogaritjet fillojnë me daljet që harxhojmë, duke përdorur çelësat e tyre publikë:
dhe numra të rastësishëm
Si rezultat, marrim vlerat:
, të cilat përdorim për llogaritjen e challenge
të çiftit tjetër të daljes (për ta bërë më të lehtë të kuptojmë se çfarë vendosim, ne i veçojmë këto vlera me ngjyra të ndryshme). Të gjitha vlerat e tjera llogariten në rreth sipas formulave të paraqitura në iluztrimin e parë. Challenge i fundit llogaritet për çiftin e daljes reale.
Siç e shohim, në të gjitha kolonat, përveç asaj që përmban daljet reale, përdoren numra të gjeneruar rastësisht.
. PĂ«r Ï-Ă«s kolonĂ« ata na nevojiten gjithashtu. Ne e transformojmĂ«
në s:
Nënshkrimi përbëhet nga një tuple i të gjitha këtyre vlerave:

Më pas, këto të dhëna regjistrohen në transaksion.
Siç e shohim, MLSAG ka vetëm një challenge c0, e cila lejon që të kursejmë në madhësinë e nënshkrimit (të cilët tashmë kërkojnë shumë hapësirë). Më pas, çdo kontrollues, duke përdorur të dhënat
, riparon vlerat c1,âŠ, cm dhe kontrollon se
. Kështu, rrethi ynë mbyllet dhe nënshkrimi kalon verifikimin.
Për transaksionet RingCT të tipit full, shtohet një rresht tjetër në matricën me daljet e përziera, por për këtë do të flasim më poshtë.
Pedersen Commitments
(zakonisht pĂ«rdoret termini anglisht â commitments) pĂ«rdoren nĂ« mĂ«nyrĂ« qĂ« njĂ« palĂ« tĂ« mund tĂ« dĂ«shmojĂ« se di njĂ« sekret (numĂ«r), duke mos e zbuluar atĂ« nĂ« fakt. PĂ«r shembull, ju hodhni njĂ« numĂ«r nĂ« ndonjĂ« lojĂ«, llogarisni engagemen dhe e dorĂ«zoni palĂ«s qĂ« kontrollon. KĂ«shtu, nĂ« momentin e zbulesĂ«s sĂ« numrit sekrete, kontrolluesi llogarit pĂ«r vetĂ« angazhimin, duke u bindur kĂ«shtu se nuk e ke mashtruar.
NĂ« Monero, angazhimet pĂ«rdoren pĂ«r tĂ« fshehur shumat e transfertave dhe aplikojnĂ« variantin mĂ« tĂ« pĂ«rhapur â angazhimet e Pedersen. NjĂ« fakt interesant â fillimisht zhvilluesit propozuan qĂ« tĂ« fshehin shumat pĂ«rmes njĂ« pĂ«rzierjeje tĂ« zakonshme, duke shtuar daljet nĂ« shuma tĂ« rastit, pĂ«r tĂ« sjellĂ« paqartĂ«si, por mĂ« vonĂ« kaluan nĂ« angazhime (ndonĂ«se nuk Ă«shtĂ« e sigurt qĂ« kursejnĂ« nĂ« madhĂ«sinĂ« e transaksionit, siç do ta shohim mĂ« poshtĂ«).
Në rastin e përgjithshëm, angazhimi duket kështu:
Ku C â vlera e vetĂ« angazhimit, a â shuma e fshehur, H â njĂ« pikĂ« fikse nĂ« njĂ« kurbĂ« eliptike (gjenerator shtesĂ«), x â njĂ« maskĂ« arbitrare, faktor i fshehur, i gjeneruar rastĂ«sisht. MaskĂ« kĂ«tu Ă«shtĂ« e nevojshme qĂ« njĂ« palĂ« e tretĂ« tĂ« mos mund ta pĂ«rcaktojĂ« thjesht vlerĂ«n e commitment-it duke e pĂ«rpiluar.
Kur gjenerohet njĂ« dalje e re, portofoli llogarit pĂ«r tĂ« commitment-in, dhe kur shpenzohet, merr ose vlerĂ«n e llogaritur gjatĂ« gjenerimit ose e pĂ«rllogarit pĂ«rsĂ«ri â nĂ« varĂ«si tĂ« llojit tĂ« transaksionit.
RingCT simple
Në rastin e transaksioneve simple RingCT, për të garantuar që transaksioni krijon dalje të barabarta me shumën e hyrjeve (nuk krijon para nga ajri), duhet që shuma e commitments të para dhe të dyta të jetë e njëjtë, dmth:

Komisioni i commitment-it llogaritet pak ndryshe â pa maskĂ«:
index a â shuma e komisionit, ajo Ă«shtĂ« publikisht e aksesueshme.
Ky qasje lejon të provohet palës hetuese se ne po përdorim shuma të njëjta, pa i zbuluar ato.
Për ta bërë gjithçka më të qartë, le të shohim një shembull. Supozoni se transaksioni shpenzon dy dalje (dmth ato bëhen hyrje) në 10 dhe 5 XMR dhe gjeneron tre dalje me shumën 12 XMR: 3, 4 dhe 5 XMR. Në këtë rast paguan komisionin prej 3 XMR. Kështu shuma e parave të shpenzuara plus shuma e gjeneruar dhe komisioni janë të barabarta me 15 XMR. Le të përpiqemi të llogarisim commitments dhe të shohim diferencën e tyre (të kujtojmë matematikën):

KĂ«tu ne shohim qĂ« pĂ«r tĂ« shkuar nĂ« pĂ«rputhje â shumat e maskave tĂ« hyrjeve dhe daljeve na nevojiten tĂ« njĂ«jta. PĂ«r kĂ«tĂ«, portofoli gjeneron rastĂ«sisht x1, y1, y2 dhe y3, ndĂ«rsa qĂ« mbetet x2 e llogarit kĂ«shtu:
![]()
Duke përdorur këto maska, ne mund të provojmë çdo kontrolluesi se ne nuk gjenerojmë më shumë fonde se sa shpenzojmë, pa zbuluar shumat. Origjinal, apo jo?
RingCT full
Në transaksionet full RingCT, kontrolli i shumave të transfertave ndodh disi më ndërlikuar. Në këto transaksione, portofoli nuk rilogarit commitments për hyrjet, por përdor ato të llogaritura gjatë gjenerimit. Në këtë rast, duhet të supozojmë se diferenca e shumave nuk do të jetë më e barabartë me zero, përkundrazi:

KĂ«tu z â diferenca e maskave tĂ« hyrjeve dhe daljeve. NĂ«se e konsiderojmĂ« zG si njĂ« çelĂ«s publik (çfarĂ« me shumĂ« tĂ« drejtĂ« Ă«shtĂ«), atĂ«herĂ« z â Ă«shtĂ« çelĂ«si privat. NĂ« kĂ«tĂ« mĂ«nyrĂ«, ne dimĂ« çelĂ«sin publik dhe çelĂ«sat privat pĂ«rkatĂ«s. Duke pasur kĂ«to tĂ« dhĂ«na, ne mund t'i pĂ«rdorim ato nĂ« nĂ«nshkrimin e unazĂ«s MLSAG sĂ« bashku me çelĂ«sat publikĂ« tĂ« daljeve tĂ« pĂ«rziera:

KĂ«shtu, njĂ« nĂ«nshkrim i vlefshĂ«m i unazĂ«s do tĂ« garantonte se ne dimĂ« tĂ« gjithĂ« çelĂ«sat privatĂ« tĂ« njĂ« nga kolonat, ndĂ«rsa çelĂ«si privat nĂ« rreshtin e fundit mund ta dimĂ« vetĂ«m nĂ«se transaksioni nuk gjeneron mjete mĂ« shumĂ« se sa shpenzon. NdĂ«r tĂ« tjera, kĂ«tu Ă«shtĂ« pĂ«rgjigjja pĂ«r pyetjen "pse diferenca e shumave tĂ« angazhimeve nuk çon nĂ« zero" â nĂ«se zG = 0, atĂ«herĂ« ne do tĂ« zbulonim kolonĂ«n me daljet reale.
Po si mĂ«sohet marrĂ«si i mjeteve se sa para i janĂ« dĂ«rguar? KĂ«tu Ă«shtĂ« shumĂ« e thjeshtĂ« â dĂ«rguesi i transaksionit dhe marrĂ«si ndajnĂ« çelĂ«sa sipas protokollit tĂ« Diffie-Hellman, duke pĂ«rdorur çelĂ«sin e transaksionit dhe çelĂ«sin e shikimit tĂ« marrĂ«sit pĂ«r tĂ« llogaritur njĂ« sekret tĂ« pĂ«rbashkĂ«t. DĂ«rguesi regjistron nĂ« fushat speciale tĂ« transaksionit tĂ« dhĂ«nat mbi shumĂ«n e daljeve, tĂ« enkriptuara me kĂ«tĂ« çelĂ«s tĂ« pĂ«rbashkĂ«t.
Provat e gamës
ĂfarĂ« ndodh nĂ«se pĂ«rdorim njĂ« numĂ«r negativ si shumĂ«n nĂ« angazhime? Kjo mund tĂ« çojĂ« nĂ« gjenerimin e monedhave shtesĂ«! Ky rezultat Ă«shtĂ« i papranueshĂ«m, prandaj ne kemi nevojĂ« pĂ«r njĂ« garanci qĂ« shumĂ«n qĂ« po pĂ«rdorim nuk janĂ« negative (pa zbuluar kĂ«to shumĂ«, natyrisht, ndryshe kaq shumĂ« punĂ« dhe gjithçka pĂ«r asgjĂ«). me fjalĂ« tĂ« tjera, ne duhet tĂ« provojmĂ« se shuma ndodhet nĂ« intervalin [0, 2n â 1].
Për këtë, shuma e secilës dalje ndahen në bitët binarë dhe llogaritet angazhimi për secilin bit ndarazi. Si ndodhi kjo, është më mirë ta shqyrtojmë me një shembull.
Le të supozojmë se shumave tona janë të vogla dhe vendosen në 4 bit (në praktikë kjo është 64 bit), dhe ne krijojmë një dalje me shumën 5 XMR. Llogaritim angazhimet për secilin bit dhe angazhimin e përgjithshëm për të gjithë shumën:
Pastaj çdo angazhim përzihet me një substitut (Ci-2iH) dhe nënshkruhet çiftazisht me nënshkrimin e unazës Borromeo (një nënshkrim tjetër i unazës), i propozuar nga Greg Maxwell në vitin 2015 (më shumë rreth saj mund të lexoni ):
TĂ« gjitha sĂ« bashku quhen prova e gamĂ«s dhe lejojnĂ« tĂ« garantosh se nĂ« angazhime pĂ«rdoren shuma nĂ« intervalin [0, 2n â 1].
ĂfarĂ« ndodh mĂ« tej?
NĂ« implementimin aktual, provat e gamĂ«s po zĂ«nĂ« shumĂ« hapĂ«sirĂ« â 6176 bajtĂ« pĂ«r njĂ« dalje. Kjo çon nĂ« transaksione tĂ« mĂ«dha dhe, pĂ«r pasojĂ«, komisione mĂ« tĂ« larta. PĂ«r tĂ« reduktuar madhĂ«sinĂ« e transaksionit nĂ« Monero, zhvilluesit po prezantojnĂ« nĂ« vend tĂ« nĂ«nshkrimeve Borromeo bulletproofs â njĂ« mekanizĂ«m prove e gamĂ«s pa angazhime bit pĂ«r bit. , ata janĂ« nĂ« gjendje tĂ« zvogĂ«lojnĂ« madhĂ«sinĂ« e provĂ«s sĂ« gamĂ«s deri nĂ« 94%. Me kĂ«tĂ« rast, nĂ« mes tĂ« korrikut, teknologjia kaloi nga kompania Kudelski Security, e cila nuk zbuloi mangĂ«si tĂ« rĂ«ndĂ«sishme nĂ« vetĂ« teknologjinĂ« as nĂ« implementimin e saj. Teknologjia tashmĂ« po aplikohet nĂ« rrjetin testues, dhe me forkun e ri, ka gjasa tĂ« kalojĂ« edhe nĂ« rrjetin kryesor.
Bëni pyetjet tuaja, sugjeroni tema për artikuj të rinj mbi teknologjitë në fushën e kriptovalutave, dhe gjithashtu regjistrohuni në grupin tonë në , për të qenë në dijeni të ngjarjeve dhe publikimeve tona.
Burimi: habr.com
