Ne pohojme për ciklin tonë mbi strukturën e blockchain-it Monero, dhe artikulli i sotëm do të jetë i përkushtuar protokollit RingCT (Transaksionet e Konfidencialitetit Ring), ku paraqiten transaksione konfidenciale dhe nënshkrime të reja ring. Fatkeqësisht, në internet ka pak informacion rreth funksionimit të tij, dhe ne përpiqemi të mbulojmë këtë mungesë.

Ne do të flasim se si rrjeti fsheh shumëllojshmërinë e transferimeve duke përdorur këtë protokoll, pse u hoqën nënshkrimet klasike të ringeve të 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ë ketë nevojë për njohuri bazike mbi funksionimin e këtij blockchain-i dhe njohuri të përgjithshme të kriptografisë mbi kurvat eliptike (për të oshtuar këto njohuri, mund të lexoni kapitujt e parë të artikullit tonë të mëparshëm rreth ).
Protokolli RingCT
Një nga sulmet e mundshme ndaj valutave cryptonote është analiza e blockchain-it, e bazuar në njohjen e shumave dhe kohës së transaksionit të dërguar. Kjo lejon të ngushtohet ndjeshëm zona e kërkimit të daljeve që interesojnë keqardhësit. Për t'u mbrojtur nga një analizë e tillë, në Monero u implementua protokolli i transaksioneve konfidenciale, i cili fsheh plotësisht shumën e transferimeve në rrjet.
Vlen të theksohet se ideja e fshehjes së shumave nuk është e re. Një nga të parët që e përshkroi atë ishte zhvilluesi i Bitcoin Core, Greg Maxwell, në artikullin e tij . Realizimi aktual i RingCT është një modifikim i saj me mundësinë e përdorimit të nënshkrimeve të ringeve (ku mund të jetë), dhe kështu e fitoi emrin - Transaksionet e Konfidencialitetit Ring.
Përveç kësaj, protokolli ndihmon në zgjidhjen e problemeve me përzierjen e daljeve të pluhurit - daljeve me shumën e vogël (zakonisht që krijohen si kthim nga transaksionet), të cilat krijuan probleme më shumë nga sa vlenin vetë.
Në janar 2017, u krye një hard fork i rrjetit Monero, duke lejuar opsionalisht përdorimin e transaksioneve konfidenciale. Dhe tashmë në shtator të të njëjtit vit, nga hard fork-u i versionit 6, këto transaksione u bënë të vetmet të lejuara në rrjet.
RingCT përdor disa mekanizma: nënshkrime anonime grupore spontane të lidhura multilayered (Multilayered Linkable Spontaneous Anonymous Group Signature, Më pas - MLSAG), skemën e angazhimëve (Angazhimet Pedersen) dhe provat e intervalit (nuk ka një përkthim të pranuar në rusisht për këtë term).
Protokolli RingCT introdukton dy lloje të transaksioneve konfidenciale: simple dhe full. Wallet-i i parë gjenerohet kur transaksioni përdor më shumë se një hyrje, ndërsa i dyti - në situatën e kundërt. Ato dallohen nga validimi i shumave të transaksioneve dhe të dhënave të nënshkruara me MLSAG (më shumë rreth kësaj do të flasim më poshtë). Përveç kësaj, transaksionet e tipit full mund të gjenerohen me çdo numër hyrjesh, nuk ka ndonjë dallim të rëndësishëm. Në librin Në lidhje me këtë, thuhet se vendimi për të kufizuar transaksionet full me një hyrje u mor në një mënyrë të nxituar dhe në të ardhmen mund të ndryshohet.
Nënshkrimi MLSAG
Le tĂ« pĂ«rkujtojmĂ« se çfarĂ« pĂ«rfaqĂ«sojnĂ« hyrjet e nĂ«nshkruara tĂ« transaksioneve. Ădo transaksion shpenzon disa fonde dhe gjeneron. Generimi i fondeve ndodh duke krijuar daljet e transaksionit (analogji e drejtpĂ«rdrejtĂ« - banknotat), dhe dalja qĂ« transaksioni shpenzon (sepse nĂ« jetĂ«n reale ne e shpenzojmĂ« pikĂ«risht banknotĂ«n monetare), bĂ«het hyre (qĂ«llimisht, kĂ«tu Ă«shtĂ« shumĂ« e lehtĂ« tĂ« ngatĂ«rrohemi).
Hyrja referohet në disa dalje, por shpenzon vetëm një, duke krijuar kështu një 'perde tymi' për të vështirësuar analizën e historisë së transferimeve. Nëse një transaksion ka më shumë se një hyrje, ky strukturë mund të përfaqësohet si një matricë, ku rreshtat janë hyrjet dhe kolonat janë daljet që po përzihen. Për të provuar rrjetit që transaksioni shpenzon saktësisht daljet e tij (e di çelësin e tij sekret), hyrjet nënshkruhen me nënshkrimin e ringut. Ky nënshkrim ofron garancinë se nënshkruesi e dinte çelësin sekret të të gjithë elementeve të një prej kolonave.
Transaksionet konfidenciale nuk përdorin më nënshkrime klasike për ring, por në vend të tyre erdhën MLSAG - një version i adaptuar për disa hyrje të nënshkrimeve të ringjeve njëlloj, .
Quhen multilayered sepse nënshkruajnë menjëherë disa hyrje, secila prej të cilave përzihet me disa të tjerë, dmth. nënshkruhet një matricë, jo një rresht i vetëm. Siç do ta shohim më poshtë, kjo ndihmon të kurseni në madhësinë e nënshkrimit.
Le të shqyrtojmë se si formohet nënshkrimi i ringut, duke marrë për shembull një transaksion që shpenzon 2 dalje reale dhe përdor për përzierje m - 1 rastësish nga blockchain-i. Le të emërtojmë ç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ë prej 2 x m. Fillimi na duhet të llogarisim të ashtuquajturat challenges për secilën palë daljesh:

Llogaritjet i fillojmë me daljet, të cilat i shpenzojmë duke përdorur çelësat e tyre publikë:
dhe numra të rastësishëm
Kështu marrim vlerat:
, të cilat i përdorim për llogaritjen e challenge
të palës tjetër të daljes (për ta bërë më të lehtë kuptimin se çfarë vendosim, ne i kemi theksuar këto vlera me ngjyra të ndryshme). Të gjitha vlerat e tjera llogariten në një rreth sipas formulave të paraqitura në ilustrimin e parë. Së fundmi, llogaritet challenge për çiftin e daljeve reale.
Siç e shohim, në të gjitha kolonat, përveç asaj që përmban daljet reale, përdoren numra të rastësishëm të gjeneruar
. PĂ«r Ï-tĂ« kolonĂ«s do na nevojiten gjithashtu. E transformojmĂ«
në s:
Vetë firma përbëhet nga një tuple e të gjitha këtyre vlerave:

Më pas këto të dhëna regjistrohen në transaksion.
Siç e shohim, MLSAG përmban vetëm një challenge c0, që lejon kursimin e hapësirës së firmës (e cila gjithashtu kërkon shumë hapësirë). Më pas, çdo verifikues, duke përdorur të dhënat
, rikthen vlerat c1,âŠ, cm dhe verifikon, se
. Kështu, rrethi ynë u mbyll dhe firma kaloi 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 flasim më poshtë.
Pedersen Commitments
(mĂ« shpesh pĂ«rdoret termi nĂ« anglisht â commitments) pĂ«rdoren qĂ« njĂ« palĂ« tĂ« mund tĂ« provojĂ« se di njĂ« sekret (numĂ«r), pa e zbuluar atĂ«. PĂ«r shembull, ju hodhni nĂ« kostĂ« njĂ« numĂ«r, llogaritni angazhimin dhe ia kaloni palĂ«s verifikuese. KĂ«shtu, nĂ« momentin e zbulimit tĂ« numrit sekret, verifikuesi llogarit angazhimin pĂ«r tâu siguruar se nuk e keni mashtruar.
NĂ« Monero, angazhimet pĂ«rdoren pĂ«r tĂ« fshehur shumĂ«n e transfertave dhe pĂ«rdorin variantin mĂ« tĂ« zakonshĂ«m â angazhimet Pedersen. PĂ«r mĂ« tepĂ«r, njĂ« fakt interesant â fillimisht zhvilluesit propozuan tĂ« fshehin shumĂ«n pĂ«rmes pĂ«rzierjes sĂ« zakonshme, duke shtuar daljet nĂ« shuma tĂ« rastĂ«sishme, pĂ«r tĂ« sjellĂ« pasiguri, por mĂ« pas kaluan nĂ« angazhimet (ndĂ«rkohĂ« nuk Ă«shtĂ« fakt se kursyen 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 angazhimit vetĂ«, a â shuma e fshehur, H â njĂ« pikĂ« fikse nĂ« kurbĂ«n eliptike (gjenerator shtesĂ«), dhe x â njĂ« maskĂ« tĂ« rastĂ«sishme, njĂ« faktor fshehĂ«s, i gjeneruar rastĂ«sisht. MaskĂ« kĂ«tu Ă«shtĂ« e nevojshme qĂ« palĂ«t e treta tĂ« mos mund ta gjejnĂ« lehtĂ«sisht vlerĂ«n e angazhimit.
Kur krijon njĂ« dalje tĂ« re, portofoli llogarit angazhimin pĂ«r tĂ«, dhe kur e shpenzon, merr ose vlerĂ«n e kalkuluar gjatĂ« gjenerimit, ose e llogarit atĂ« nga e para â nĂ« varĂ«si tĂ« tipit tĂ« transaksionit.
RingCT simple
Në rastin e transaksioneve simple RingCT, që të garantohet se transaksioni krijoi dalje me shumën e barabartë me shumën e hyrjeve (nuk prodhoi para nga asgjë), është e nevojshme që shuma e angazhimeve të parë dhe të dytë të jetë e barabartë, dmth:

Angazhimi i pagesĂ«s llogaritet pak ndryshe â pa maskĂ«:
, ku a â shuma e pagesĂ«s, e cila Ă«shtĂ« publikisht e aksesueshme.
Ky qasje lejon të provosh palës verifikuese se po përdorim shuma të njëjta, pa i zbuluar ato.
Për ta bërë gjithçka më të qartë, le të shqyrtojmë një shembull. Le të themi, transaksioni shpenzon dy dalje (dmth ato bëhen hyrje) me 10 dhe 5 XMR dhe gjeneron tri dalje me shumën 12 XMR: 3, 4 dhe 5 XMR. Ndërsa paguan një provizion prej 3 XMR. Kështu, shuma e parave të shpenzuara plus shuma e gjeneruar dhe provizioni janë të barabarta me 15 XMR. Le të përpiqemi të llogarisim angazhimet dhe të shohim diferencën e tyre (të kujtojmë matematikën):

KĂ«tu shohim, qĂ« pĂ«r tĂ« bĂ«rĂ« ekuacionin tĂ« funksonojĂ« â shumat e maskave tĂ« hyrjeve dhe daljeve na nevojiten tĂ« barabarta. PĂ«r kĂ«tĂ«, portofoli gjeneron rastĂ«sisht x1, y1, y2 dhe y3, ndĂ«rsa tĂ« mbeturat x2 i llogarit kĂ«shtu:
![]()
Duke përdorur këto maska, ne mund të provomë çdo verifikuesi se nuk po gjenerojmë më shumë fonde sesa shpenzojmë, pa zbuluar shumat. Origjinale, apo jo?
RingCT full
Në transaksionet ringct të plota, kontrolli i shumave të transfertave kalon pak më ndryshe. Në këto transaksione, portofoli nuk rillogarit angazhimet 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, por përkundrazi:

KĂ«tu z â diferenca e maskave tĂ« hyrjeve dhe daljeve. NĂ«se e konsiderojmĂ« zG si çelĂ«si publik (siç Ă«shtĂ« faktikisht), atĂ«herĂ« z â ky Ă«shtĂ« çelĂ«si privat. KĂ«shtu, ne e dimĂ« çelĂ«sin publik dhe tĂ« pĂ«rkatshĂ«m privat.

KĂ«shtu qĂ«, nĂ«nshkrimi i vlefshĂ«m nĂ« unazĂ« do tĂ« garantojĂ« qĂ« ne dimĂ« tĂ« gjitha çelĂ«sat privatĂ« tĂ« njĂ«rit prej kolonave, ndĂ«rsa çelĂ«si privat nĂ« rreshtin e fundit mund ta dimĂ« vetĂ«m nĂ«se transaksioni nuk gjeneron mĂ« shumĂ« mjete sesa shpenzon. PĂ«r mĂ« tepĂ«r, kĂ«tu Ă«shtĂ« pĂ«rgjigjja pĂ«r pyetjen "pse ndryshimi i shumave tĂ« angazhimeve nuk rezulton nĂ« zero" â nĂ«se zG = 0, atĂ«herĂ« ne do tĂ« zbulojmĂ« kolonĂ«n me rezultatet e vĂ«rteta.
E si e kupton marrĂ«si i mjeteve sa para i kanĂ« dĂ«rguar? KĂ«tu Ă«shtĂ« shumĂ« e thjeshtĂ« â dĂ«rguesi i transaksionit dhe marrĂ«si shkĂ«mbejnĂ« çelĂ«sa sipas protokollit Diffie-Hellman, duke pĂ«rdorur çelĂ«sin e transaksionit dhe çelĂ«sin e pamjes tĂ« marrĂ«sit dhe llogarisin sekretin e pĂ«rbashkĂ«t. DĂ«rguesi regjistron nĂ« fushat speciale tĂ« transaksionit informacionin mbi shumĂ«n e daljeve, tĂ« koduar me kĂ«tĂ« çelĂ«s tĂ« pĂ«rbashkĂ«t.
Dëshmi të Intervalit
Dhe çfarĂ« ndodh nĂ«se si shumĂ« nĂ« angazhime pĂ«rdorim njĂ« numĂ«r negativ? Kjo mund tĂ« çojĂ« nĂ« krijimin e monedhave shtesĂ«! NjĂ« pĂ«rfundim i tillĂ« Ă«shtĂ« i papranueshĂ«m, prandaj Ă«shtĂ« e nevojshme njĂ« garanci qĂ« shumicat qĂ« po pĂ«rdorim nuk janĂ« negative (pa zbuluar kĂ«to shuma, natyrisht, pĂ«rndryshe aq shumĂ« punĂ« dhe gjithçka kot). NĂ« fjalĂ« tĂ« tjera, duhet tĂ« provojmĂ« qĂ« shuma Ă«shtĂ« brenda intervalit [0, 2n â 1].
Për këtë, shuma e çdo daljeje ndahen në numra binarë dhe llogaritet angazhimi për secilin bit veç e veç. Si ndodh kjo, më mirë ta shohim me një shembull.
Supozoni që shumat tona janë të vogla dhe futen në 4 bita (në praktikë, kjo është 64 bita), dhe ne krijojmë një dalje për shumën e 5 XMR. Llogarisim angazhimet për secilin bit dhe angazhimin e përgjithshëm për të gjithë shumën:
Pastaj çdo angazhim kompozitohet me (Ci-2iH) dhe nënshkruhet çiftazi me nënshkrimin në unazë Borromeo (një tjetër nënshkrim në unazë), i propozuar nga Greg Maxwell në vitin 2015 (pothuajse më shumë për të mund të lexoni ):
E gjithĂ« kjo quhet dĂ«shmi intervali dhe lejon tĂ« garantojmĂ« se nĂ« angazhimet pĂ«rdoren shumica brenda intervalit [0, 2n â 1].
ĂfarĂ« ndodh mĂ« tej?
NĂ« realizimin aktual dĂ«shmitĂ« e intervalit zĂ«nĂ« shumĂ« hapĂ«sirĂ« â 6176 byte pĂ«r njĂ« dalje. Kjo çon nĂ« transaksione tĂ« mĂ«dha dhe, pĂ«r rrjedhojĂ«, taksa mĂ« tĂ« larta. PĂ«r tĂ« reduktuar madhĂ«sinĂ« e transaksionit, zhvilluesit e Monero introduksuan nĂ« vend tĂ« nĂ«nshkrimeve Borromeo bulletproofs â njĂ« mekanizĂ«m dĂ«shmie intervali pa angazhime bit pĂ«r bit. , ato janĂ« nĂ« gjendje tĂ« reduktojnĂ« madhĂ«sinĂ« e dĂ«shmisĂ« sĂ« intervalit deri nĂ« 94%. PĂ«r ta thĂ«nĂ« tĂ« drejtĂ«n, nĂ« mesin e korrikut teknologjia kaloi nga kompania Kudelski Security, e cila nuk zbuloi mangĂ«si tĂ« rĂ«ndĂ«sishme as nĂ« vetĂ« teknologjinĂ« as nĂ« realizimin e saj. Teknologjia tashmĂ« po aplikohet nĂ« rrjetin e testimit, dhe me hardforkun e ri, shumĂ« ndoshta mund tĂ« kalojĂ« edhe nĂ« rrjetin kryesor.
Bëni pyetjet tuaja, sugjeroni tema për artikuj të rinj mbi teknologjitë në fushën e kriptomonedhave, si dhe abonohuni në grupin tonë në , për të qëndruar të informuar mbi ngjarjet dhe publikimet tona.
Burimi: habr.com
