Transaksione konfidenciale në Monero, ose si të transferoni gjëra të panjohura në destinacione të panjohura

Ne vazhdojmë serinë tonë në lidhje me blockchain Monero dhe artikulli i sotëm do të fokusohet në protokollin RingCT (Ring Confidential Transactions), i cili prezanton transaksione konfidenciale dhe nënshkrime të reja unazore. Fatkeqësisht, ka pak informacion në internet se si funksionon dhe ne u përpoqëm ta plotësojmë këtë boshllëk.

Transaksione konfidenciale në Monero, ose si të transferoni gjëra të panjohura në destinacione të panjohura

Ne do të flasim për mënyrën se si rrjeti fsheh shumat e transferimit duke përdorur këtë protokoll, pse ata braktisën nënshkrimet klasike të unazave të kriptonotës dhe se si kjo teknologji do të zhvillohet më tej.

Meqenëse ky protokoll është një nga teknologjitë më komplekse në Monero, lexuesit do t'i duhet një njohuri bazë e dizajnit të këtij blockchain dhe një njohuri kalimtare e kriptografisë së kurbës eliptike (për të përmirësuar këtë njohuri, mund të lexoni kapitujt e parë të artikulli i mëparshëm rreth shumë nënshkrime).

Protokolli RingCT

Një nga sulmet e mundshme ndaj monedhave kriptonote është analiza e blockchain bazuar në njohuritë për sasinë dhe kohën e transaksionit të dërguar. Kjo lejon ngushtoni ndjeshëm zonën e kërkimit për daljet me interes për sulmuesin. Për t'u mbrojtur nga një analizë e tillë, Monero ka zbatuar një protokoll transaksioni anonim që fsheh plotësisht shumat e transfertave në rrjet.

Vlen të theksohet se ideja e fshehjes së shumave nuk është e re. Zhvilluesi i Bitcoin Core Greg Maxwell ishte një nga të parët që e përshkroi atë në të tijën artikull Transaksionet Konfidenciale. Implementimi aktual i RingCT është modifikimi i tij me mundësinë e përdorimit të nënshkrimeve të unazave (qoftë pa to), dhe kështu mori emrin - Ring Confidential Transactions.

Ndër të tjera, protokolli ndihmon për të hequr qafe problemet me përzierjen e daljeve të pluhurit - rezultate të një sasie të vogël (zakonisht të marra në formën e ndryshimit nga transaksionet), të cilat krijuan më shumë probleme sesa vlejnë.

Në Janar 2017, u zhvillua një "hard fork" i rrjetit Monero, duke lejuar përdorimin opsional të transaksioneve konfidenciale. Dhe tashmë në shtator të të njëjtit vit, me versionin 6 hard fork, transaksione të tilla u bënë të vetmet të lejuara në rrjet.

RingCT përdor disa mekanizma njëherësh: nënshkrimet spontane anonime të grupeve të lidhura me shumë shtresa (Nënshkrimi i grupit spontan i lidhur me shumë shtresa, i referuar më tej si MLSAG), një skemë angazhimi (Pedersen Commitments) dhe prova të diapazonit (ky term nuk ka një përkthim të vendosur në Rusisht) .

Protokolli RingCT prezanton dy lloje të transaksioneve anonime: të thjeshta dhe të plota. Portofoli gjeneron të parën kur një transaksion përdor më shumë se një hyrje, e dyta - në situatën e kundërt. Ato ndryshojnë në vërtetimin e shumave të transaksionit dhe të dhënat e nënshkruara me një nënshkrim të MLSAG (ne do të flasim më shumë për këtë më poshtë). Për më tepër, transaksionet e tipit full mund të gjenerohen me çdo numër inputesh, nuk ka asnjë ndryshim thelbësor. Në libër "Zero në Monero" Në këtë drejtim, thuhet se vendimi për të kufizuar transaksionet e plota në një input është marrë me nxitim dhe mund të ndryshojë në të ardhmen.

Nënshkrimi i MPPS-së

Le të kujtojmë se cilat janë inputet e transaksioneve të nënshkruara. Çdo transaksion shpenzon dhe gjeneron disa fonde. Gjenerimi i fondeve ndodh duke krijuar rezultate transaksioni (një analogji e drejtpërdrejtë janë faturat), dhe prodhimi që shpenzon transaksioni (në fund të fundit, në jetën reale ne shpenzojmë kartëmonedha) bëhet hyrje (kini kujdes, është shumë e lehtë të ngatërrohesh këtu).

Një hyrje referon rezultate të shumta, por shpenzon vetëm një, duke krijuar kështu një "smokescreen" për ta bërë të vështirë analizimin e historisë së përkthimit. Nëse një transaksion ka më shumë se një hyrje, atëherë një strukturë e tillë mund të përfaqësohet si një matricë, ku rreshtat janë hyrjet dhe kolonat janë daljet e përziera. Për t'i vërtetuar rrjetit se transaksioni shpenzon saktësisht rezultatet e tij (i njeh çelësat e tyre sekretë), hyrjet nënshkruhen me një nënshkrim unazë. Një nënshkrim i tillë garanton që nënshkruesi i dinte çelësat sekretë për të gjithë elementët e cilësdo prej kolonave.

Transaksionet konfidenciale nuk përdorin më ato klasike kriptonotë nënshkrimet e unazave, ato u zëvendësuan nga MLSAG - një version i nënshkrimeve të ngjashme të unazave me një shtresë të përshtatur për hyrje të shumta, LSAG.

Ato quhen shumështresore sepse nënshkruajnë disa hyrje në të njëjtën kohë, secila prej të cilave është e përzier me disa të tjera, d.m.th., nënshkruhet një matricë dhe jo një rresht. Siç do ta shohim më vonë, kjo ndihmon në kursimin e madhësisë së nënshkrimit.

Le të shohim se si formohet një nënshkrim unazor, duke përdorur shembullin e një transaksioni që shpenzon 2 rezultate reale dhe përdor m - 1 të rastësishme nga blockchain për përzierje. Le të shënojmë çelësat publikë të rezultateve që shpenzojmë si
Transaksione konfidenciale në Monero, ose si të transferoni gjëra të panjohura në destinacione të panjohura, dhe imazhet kryesore për ta në përputhje me rrethanat: Transaksione konfidenciale në Monero, ose si të transferoni gjëra të panjohura në destinacione të panjohura Kështu, marrim një matricë të madhësisë 2 x m. Së pari, ne duhet të llogarisim të ashtuquajturat sfida për secilën palë të rezultateve:
Transaksione konfidenciale në Monero, ose si të transferoni gjëra të panjohura në destinacione të panjohura
Ne fillojmë llogaritjet me rezultatet, të cilat i shpenzojmë duke përdorur çelësat e tyre publikë:Transaksione konfidenciale në Monero, ose si të transferoni gjëra të panjohura në destinacione të panjohuradhe numra të rastitTransaksione konfidenciale në Monero, ose si të transferoni gjëra të panjohura në destinacione të panjohuraSi rezultat, marrim vlerat e mëposhtme:
Transaksione konfidenciale në Monero, ose si të transferoni gjëra të panjohura në destinacione të panjohura, të cilin e përdorim për të llogaritur sfidën
Transaksione konfidenciale në Monero, ose si të transferoni gjëra të panjohura në destinacione të panjohuraçifti tjetër i rezultateve (për ta bërë më të lehtë të kuptojmë se ku po zëvendësojmë, ne i kemi theksuar këto vlera me ngjyra të ndryshme). Të gjitha vlerat e mëposhtme janë llogaritur në një rreth duke përdorur formulat e dhëna në ilustrimin e parë. Gjëja e fundit për t'u llogaritur është sfida për një palë rezultate reale.

Siç mund ta shohim, të gjitha kolonat përveç asaj që përmban rezultate reale përdorin numra të gjeneruar rastësishtTransaksione konfidenciale në Monero, ose si të transferoni gjëra të panjohura në destinacione të panjohura. Për π- kolona do të na duhen gjithashtu. Le të transformohemiTransaksione konfidenciale në Monero, ose si të transferoni gjëra të panjohura në destinacione të panjohuranë s:Transaksione konfidenciale në Monero, ose si të transferoni gjëra të panjohura në destinacione të panjohura
Nënshkrimi në vetvete është një tufë e të gjitha këtyre vlerave:

Transaksione konfidenciale në Monero, ose si të transferoni gjëra të panjohura në destinacione të panjohura

Këto të dhëna më pas shkruhen në një transaksion.

Siç mund ta shohim, MLSAG përmban vetëm një sfidë c0, e cila ju lejon të kurseni në madhësinë e nënshkrimit (e cila tashmë kërkon shumë hapësirë). Më tej, çdo inspektor, duke përdorur të dhënatTransaksione konfidenciale në Monero, ose si të transferoni gjëra të panjohura në destinacione të panjohura, rikthen vlerat c1,…, cm dhe e kontrollon atëTransaksione konfidenciale në Monero, ose si të transferoni gjëra të panjohura në destinacione të panjohura. Kështu unaza jonë është mbyllur dhe firma është verifikuar.

Për transaksionet RingCT të tipit të plotë, një linjë më shumë i shtohet matricës me rezultate të përziera, por ne do të flasim për këtë më poshtë.

Angazhimet e Pedersenit

Skemat e detyrimeve (përdoret më shpesh termi anglez angazhime) në mënyrë që njëra palë të mund të provojë se di një sekret (numër) të caktuar pa e zbuluar atë. Për shembull, ju hedhni një numër të caktuar në zare, merrni parasysh angazhimin dhe ia kaloni palës verifikuese. Kështu, në momentin e zbulimit të numrit sekret, verifikuesi llogarit në mënyrë të pavarur angazhimin, duke u siguruar që ju të mos e keni mashtruar.

Angazhimet Monero përdoren për të fshehur shumat e transfertave dhe për të përdorur opsionin më të zakonshëm - zotimet Pedersen. Nga rruga, një fakt interesant - në fillim zhvilluesit propozuan fshehjen e shumave me përzierje të zakonshme, domethënë shtimin e rezultateve për shuma arbitrare për të futur pasiguri, por më pas ata kaluan në angazhime (nuk është fakt që ata kursyen madhësia e transaksionit, siç do të shohim më poshtë).
Në përgjithësi, angazhimi duket kështu:
Transaksione konfidenciale në Monero, ose si të transferoni gjëra të panjohura në destinacione të panjohuraku C - vetë kuptimi i angazhimit, a - shuma e fshehur, H është një pikë fikse në lakoren eliptike (gjenerator shtesë), dhe x — një lloj maske arbitrare, një faktor fshehës i krijuar rastësisht. Maska është e nevojshme këtu në mënyrë që një palë e tretë të mos mund të hamendësojë thjesht vlerën e angazhimit.

Kur gjenerohet një prodhim i ri, portofoli llogarit angazhimin për të dhe kur shpenzohet, merr ose vlerën e llogaritur gjatë gjenerimit ose e rillogarit atë, në varësi të llojit të transaksionit.

RingCT e thjeshtë

Në rastin e transaksioneve të thjeshta RingCT, për të siguruar që transaksioni të krijojë rezultate në një sasi të barabartë me sasinë e inputeve (nuk ka prodhuar para nga ajri i hollë), është e nevojshme që shuma e angazhimeve të së parës dhe të dytës. ato të jenë të njëjta, domethënë:
Transaksione konfidenciale në Monero, ose si të transferoni gjëra të panjohura në destinacione të panjohura
Komisionet e angazhimit e konsiderojnë atë pak më ndryshe - pa maskë:
Transaksione konfidenciale në Monero, ose si të transferoni gjëra të panjohura në destinacione të panjohuraKu a — shuma e komisionit, është e disponueshme publikisht.

Kjo qasje na lejon t'i dëshmojmë palës mbështetëse se po përdorim të njëjtat shuma pa i zbuluar ato.

Për t'i bërë gjërat më të qarta, le të shohim një shembull. Le të themi se një transaksion shpenzon dy dalje (që do të thotë se ato bëhen hyrje) prej 10 dhe 5 XMR dhe gjeneron tre dalje me vlerë 12 XMR: 3, 4 dhe 5 XMR. Në të njëjtën kohë, ai paguan një komision prej 3 XMR. Kështu, shuma e parave të shpenzuara plus shumën e gjeneruar dhe komisioni është e barabartë me 15 XMR. Le të përpiqemi të llogarisim angazhimet dhe të shohim ndryshimin në shumat e tyre (kujtoni matematikën):

Transaksione konfidenciale në Monero, ose si të transferoni gjëra të panjohura në destinacione të panjohura
Këtu shohim se që ekuacioni të konvergojë, ne kemi nevojë që shumat e maskave hyrëse dhe dalëse të jenë të njëjta. Për ta bërë këtë, portofoli gjeneron rastësisht x1, y1, y2 dhe y3, dhe pjesa e mbetur x2 llogarit kështu:
Transaksione konfidenciale në Monero, ose si të transferoni gjëra të panjohura në destinacione të panjohura
Duke përdorur këto maska, ne mund t'i dëshmojmë çdo verifikuesi se nuk gjenerojmë më shumë fonde sesa shpenzojmë, pa bërë të ditur shumën. Origjinale, apo jo?

RingCT plot

Në transaksionet e plota RingCT, kontrollimi i shumave të transferimit është pak më i ndërlikuar. Në këto transaksione, portofoli nuk rillogarit angazhimet për inputet, por përdor ato të llogaritura kur u krijuan. Në këtë rast, duhet të supozojmë se nuk do të marrim më diferencën në shumat e barabarta me zero, por përkundrazi:
Transaksione konfidenciale në Monero, ose si të transferoni gjëra të panjohura në destinacione të panjohura
Këtu z — ndryshimi midis maskave hyrëse dhe dalëse. Nëse kemi parasysh zG si një çelës publik (që de facto është), atëherë z është çelësi privat. Kështu, ne i njohim çelësat publikë dhe privatë përkatës. Me këto të dhëna në dorë, ne mund t'i përdorim ato në nënshkrimin e ziles së MLSAG së bashku me çelësat publikë të rezultateve që janë të përziera:
Transaksione konfidenciale në Monero, ose si të transferoni gjëra të panjohura në destinacione të panjohura
Kështu, një nënshkrim i vlefshëm i ziles do të sigurojë që ne i dimë të gjithë çelësat privatë të njërës prej kolonave dhe ne mund ta njohim çelësin privat në rreshtin e fundit nëse transaksioni nuk gjeneron më shumë fonde sesa shpenzon. Nga rruga, këtu është përgjigja e pyetjes "pse diferenca në shumat e angazhimeve nuk çon në zero" - nëse zG = 0, atëherë do ta zgjerojmë kolonën me dalje reale.

Si e di marrësi i fondeve se sa para i janë dërguar? Gjithçka është e thjeshtë këtu - dërguesi i transaksionit dhe marrësi shkëmbejnë çelësat duke përdorur protokollin Diffie-Hellman, duke përdorur çelësin e transaksionit dhe çelësin e pamjes së marrësit dhe llogarisin sekretin e përbashkët. Dërguesi shkruan të dhëna për shumat e daljes, të koduara me këtë çelës të përbashkët, në fusha të veçanta të transaksionit.

Provat e diapazonit

Çfarë ndodh nëse përdorni një numër negativ si shumë në angazhimet? Kjo mund të çojë në gjenerimin e monedhave shtesë! Ky rezultat është i papranueshëm, ndaj duhet të garantojmë që shumat që përdorim nuk janë negative (natyrisht, pa i zbuluar këto shuma, përndryshe ka shumë punë dhe gjithçka kot). Me fjalë të tjera, ne duhet të vërtetojmë se shuma është në interval [0, 2n - 1].

Për ta bërë këtë, shuma e çdo prodhimi ndahet në shifra binare dhe angazhimi llogaritet për secilën shifër veç e veç. Është më mirë të shihet se si ndodh kjo me një shembull.

Le të supozojmë se shumat tona janë të vogla dhe përshtaten në 4 bit (në praktikë kjo është 64 bit), dhe ne krijojmë një dalje me vlerë 5 XMR. Ne llogarisim zotimet për secilën kategori dhe angazhimin total për të gjithë shumën:Transaksione konfidenciale në Monero, ose si të transferoni gjëra të panjohura në destinacione të panjohura
Më pas, çdo angazhim përzihet me një zëvendësues (Ci-2iH) dhe është nënshkruar në çift me nënshkrimin e unazës Borromeo (një nënshkrim tjetër i unazës), i propozuar nga Greg Maxwell në 2015 (mund të lexoni më shumë për të këtu):
Transaksione konfidenciale në Monero, ose si të transferoni gjëra të panjohura në destinacione të panjohuraTë marra së bashku, kjo quhet prova e diapazonit dhe ju lejon të siguroheni që angazhimet përdorin shuma në interval [0, 2n - 1].

Çka më tej?

Në zbatimin aktual, provat e diapazonit zënë shumë hapësirë ​​- 6176 bajt për dalje. Kjo çon në transaksione më të mëdha dhe për rrjedhojë tarifa më të larta. Për të reduktuar madhësinë e një transaksioni Monero, zhvilluesit po prezantojnë antiplumb në vend të nënshkrimeve të Borromeo - një mekanizëm provues i rrezes pa angazhime të vogla. Sipas disa vlerësimeve, ata janë në gjendje të zvogëlojnë madhësinë e provës së diapazonit deri në 94%. Nga rruga, në mes të korrikut teknologjia kaloi revizion nga Kudelski Security, e cila nuk zbuloi ndonjë mangësi të konsiderueshme as në vetë teknologjinë dhe as në zbatimin e saj. Teknologjia është përdorur tashmë në rrjetin e testimit, dhe me hard fork-un e ri, ndoshta mund të kalojë në rrjetin kryesor.

Bëni pyetjet tuaja, sugjeroni tema për artikuj të rinj rreth teknologjive në fushën e kriptomonedhës dhe gjithashtu abonohuni në grupin tonë në Facebookpër të qenë të përditësuar me ngjarjet dhe botimet tona.

Burimi: www.habr.com

Shto një koment