Luottamukselliset tapahtumat Monerossa tai tuntemattomien asioiden siirtäminen tuntemattomiin kohteisiin

Jatkamme Monero-lohkoketjua käsittelevää sarjaamme, ja tämänpäiväinen artikkeli keskittyy RingCT (Ring Confidential Transactions) -protokollaan, joka esittelee luottamukselliset tapahtumat ja uudet rengasallekirjoitukset. Valitettavasti Internetissä on vähän tietoa sen toiminnasta, ja yritimme täyttää tämän aukon.

Luottamukselliset tapahtumat Monerossa tai tuntemattomien asioiden siirtäminen tuntemattomiin kohteisiin

Puhumme siitä, kuinka verkko piilottaa siirtosummat tällä protokollalla, miksi he luopuivat klassisista kryptonoterenkaiden allekirjoituksista ja kuinka tämä tekniikka kehittyy edelleen.

Koska tämä protokolla on yksi Moneron monimutkaisimmista teknologioista, lukija tarvitsee perustiedot tämän lohkoketjun suunnittelusta ja ohimenevät tiedot elliptisen käyrän salakirjoituksesta (tämän tiedon päivittämiseksi voit lukea julkaisumme ensimmäiset luvut edellinen artikkeli aiheesta useita allekirjoituksia).

RingCT-protokolla

Yksi mahdollisista hyökkäyksistä kryptonotevaluuttoja vastaan ​​on lohkoketjuanalyysi, joka perustuu tietoon lähetetyn tapahtuman määrästä ja ajasta. Tämä mahdollistaa kaventaa merkittävästi hyökkääjää kiinnostavien uloskäyntien hakualuetta. Suojatakseen tällaista analyysiä vastaan ​​Monero on ottanut käyttöön anonyymin transaktioprotokollan, joka piilottaa verkon siirtomäärät kokonaan.

On syytä huomata, että ajatus summien piilottamisesta ei ole uusi. Bitcoin Coren kehittäjä Greg Maxwell kuvaili sitä ensimmäisten joukossa artikkeli Luottamukselliset tapahtumat. RingCT:n nykyinen toteutus on sen muunnelma, jossa on mahdollisuus käyttää soittoääniä (olipa niitä ilman), ja siitä se sai nimensä - Ring Confidential Transactions.

Protokolla auttaa muun muassa pääsemään eroon pölyn sekoittumisongelmista - pienistä lähdöistä (yleensä tapahtumien muutoksen muodossa), jotka aiheuttivat enemmän ongelmia kuin niiden arvo oli.

Tammikuussa 2017 tapahtui Monero-verkoston hard fork, joka mahdollisti luottamuksellisten tapahtumien valinnaisen käytön. Ja jo saman vuoden syyskuussa version 6 hard forkilla tällaisista tapahtumista tuli ainoita, jotka sallittiin verkossa.

RingCT käyttää useita mekanismeja kerralla: monikerroksisia linkitettyjä spontaaneja anonyymejä ryhmäallekirjoituksia (Multilayered Linkable Spontaneous Anonymous Group Signature, jäljempänä MLSAG), sitoumusjärjestelmää (Pedersen Commitments) ja aluetodistuksia (tälle termille ei ole vakiintunutta käännöstä venäjäksi) .

RingCT-protokolla esittelee kahdenlaisia ​​anonyymejä tapahtumia: yksinkertaisia ​​ja täydellisiä. Lompakko luo ensimmäisen, kun tapahtuma käyttää useampaa kuin yhtä syötettä, toisen - päinvastaisessa tilanteessa. Ne eroavat tapahtumasummien validoinnista ja MLSAG-allekirjoituksella allekirjoitetuista tiedoista (puhumme tästä lisää alla). Lisäksi täysi-tyyppisiä tapahtumia voidaan generoida millä tahansa määrällä syötteitä, perustavaa laatua olevaa eroa ei ole. Kirjassa "Nollasta Moneroon" Tältä osin sanotaan, että päätös rajoittaa kokonaiset tapahtumat yhteen syötteeseen tehtiin kiireessä ja saattaa muuttua tulevaisuudessa.

MLSAG-allekirjoitus

Muistetaan, mitä allekirjoitetut tapahtumasyötteet ovat. Jokainen tapahtuma kuluttaa ja tuottaa varoja. Varojen luominen tapahtuu luomalla tapahtumatulosteita (suora analogia on laskut), ja tulos, jonka tapahtuma käyttää (todellisessa elämässä kulutamme seteleitä) tulee syötteeksi (ole varovainen, se on erittäin helppoa hämmentyä tässä).

Syöte viittaa useisiin ulostuloihin, mutta kuluttaa vain yhden, mikä luo "savuverkon", joka vaikeuttaa käännöshistorian analysointia. Jos tapahtumalla on useampi kuin yksi syöte, niin tällainen rakenne voidaan esittää matriisina, jossa rivit ovat syötteitä ja sarakkeet ovat sekoitettuja lähtöjä. Sen todistamiseksi verkolle, että tapahtuma kuluttaa täsmälleen tulostensa (tietää niiden salaiset avaimet), tulot allekirjoitetaan rengasallekirjoituksella. Tällainen allekirjoitus takaa, että allekirjoittaja tiesi minkä tahansa sarakkeen kaikkien elementtien salaiset avaimet.

Luottamuksellisissa tapahtumissa ei enää käytetä klassisia tapahtumia kryptonote soittoäänet, ne korvattiin MLSAG:lla - versiolla samanlaisista yksikerroksisista soittoäänistä, jotka on mukautettu useille tuloille, LSAG.

Niitä kutsutaan monikerroksisiksi, koska ne allekirjoittavat useita syötteitä kerralla, joista jokainen on sekoitettu useiden muiden kanssa, eli allekirjoitetaan matriisi, ei yksi rivi. Kuten näemme myöhemmin, tämä auttaa säästämään allekirjoituksen koosta.

Katsotaan kuinka rengasallekirjoitus muodostuu, esimerkkinä tapahtumasta, joka kuluttaa 2 todellista lähtöä ja käyttää m - 1 satunnaista lohkoketjusta sekoittamiseen. Merkitään niiden tulosteiden julkiset avaimet, joita käytämme
Luottamukselliset tapahtumat Monerossa tai tuntemattomien asioiden siirtäminen tuntemattomiin kohteisiinja niiden tärkeimmät kuvat: Luottamukselliset tapahtumat Monerossa tai tuntemattomien asioiden siirtäminen tuntemattomiin kohteisiin Siten saamme kokomatriisin 2 x m. Ensin meidän on laskettava ns. haasteet jokaiselle tulosparille:
Luottamukselliset tapahtumat Monerossa tai tuntemattomien asioiden siirtäminen tuntemattomiin kohteisiin
Aloitamme laskelmat ulostuloilla, jotka käytämme heidän julkisilla avaimillaan:Luottamukselliset tapahtumat Monerossa tai tuntemattomien asioiden siirtäminen tuntemattomiin kohteisiinja satunnaisia ​​numeroitaLuottamukselliset tapahtumat Monerossa tai tuntemattomien asioiden siirtäminen tuntemattomiin kohteisiinTuloksena saamme seuraavat arvot:
Luottamukselliset tapahtumat Monerossa tai tuntemattomien asioiden siirtäminen tuntemattomiin kohteisiin, jota käytämme haasteen laskemiseen
Luottamukselliset tapahtumat Monerossa tai tuntemattomien asioiden siirtäminen tuntemattomiin kohteisiinseuraava tulospari (jotta olisi helpompi ymmärtää, mitä korvaamme missä, olemme korostaneet nämä arvot eri väreillä). Kaikki seuraavat arvot lasketaan ympyrässä käyttämällä ensimmäisessä kuvassa annettuja kaavoja. Viimeinen laskettava asia on haaste todellisten tulosten parille.

Kuten näemme, kaikki sarakkeet paitsi se, joka sisältää todellisia tulosteita, käyttävät satunnaisesti generoituja lukujaLuottamukselliset tapahtumat Monerossa tai tuntemattomien asioiden siirtäminen tuntemattomiin kohteisiin. Voit π- sarakkeessa tarvitsemme myös niitä. MuutetaanLuottamukselliset tapahtumat Monerossa tai tuntemattomien asioiden siirtäminen tuntemattomiin kohteisiins:ssä:Luottamukselliset tapahtumat Monerossa tai tuntemattomien asioiden siirtäminen tuntemattomiin kohteisiin
Allekirjoitus itsessään on monikko kaikkia näitä arvoja:

Luottamukselliset tapahtumat Monerossa tai tuntemattomien asioiden siirtäminen tuntemattomiin kohteisiin

Nämä tiedot kirjoitetaan sitten tapahtumaan.

Kuten näemme, MLSAG sisältää vain yhden haasteen c0, jonka avulla voit säästää allekirjoituksen koosta (joka vaatii jo paljon tilaa). Lisäksi kuka tahansa tarkastaja, joka käyttää tietojaLuottamukselliset tapahtumat Monerossa tai tuntemattomien asioiden siirtäminen tuntemattomiin kohteisiin, palauttaa arvot c1,…, cm ja tarkistaa senLuottamukselliset tapahtumat Monerossa tai tuntemattomien asioiden siirtäminen tuntemattomiin kohteisiin. Näin ollen sormumme on suljettu ja allekirjoitus varmistettu.

Täysityyppisille RingCT-tapahtumille matriisiin lisätään vielä yksi rivi, jossa on sekatuloksia, mutta puhumme tästä alla.

Pedersenin sitoumukset

Velvoitejärjestelmät (useammin käytetään englanninkielistä termiä sitoumukset) käytetään, jotta toinen osapuoli voi todistaa tietävänsä tietyn salaisuuden (numeron) paljastamatta sitä. Heität esimerkiksi tietyn numeron noppaa, harkitset sitoutumista ja välität sen todentavalle osapuolelle. Näin ollen salaisen numeron paljastamishetkellä todentaja laskee itsenäisesti sitoumuksen ja varmistaa siten, että et ole pettänyt häntä.

Monero-sitoumuksilla piilotetaan tilisiirtojen määrät ja käytetään yleisintä vaihtoehtoa - Pedersenin sitoumuksia. Muuten, mielenkiintoinen tosiasia - aluksi kehittäjät ehdottivat määrien piilottamista tavallisella sekoittamisella, eli tulosteiden lisäämistä mielivaltaisille määrille epävarmuuden lisäämiseksi, mutta sitten he siirtyivät sitoumuksiin (ei ole tosiasia, että he säästivät tapahtuman koko, kuten alla nähdään).
Yleisesti sitoutuminen näyttää tältä:
Luottamukselliset tapahtumat Monerossa tai tuntemattomien asioiden siirtäminen tuntemattomiin kohteisiinjossa C — itse sitoutumisen merkitys, a - piilotettu määrä, H on kiinteä piste elliptisellä käyrällä (lisägeneraattori), ja x - jonkinlainen mielivaltainen maski, satunnaisesti generoitu piilotekijä. Maskia tarvitaan tässä, jotta kolmas osapuoli ei voi yksinkertaisesti arvata sitoutumisen arvoa.

Kun uusi tuotos syntyy, lompakko laskee sille sitoumuksen, ja käytettynä se ottaa joko generoinnin aikana lasketun arvon tai laskee sen uudelleen tapahtumatyypistä riippuen.

RingCT yksinkertainen

Yksinkertaisten RingCT-tapahtumien tapauksessa, jotta varmistetaan, että tapahtuma loi tuotoksia, jotka ovat yhtä suuret kuin panosten määrä (ei tuottanut rahaa tyhjästä), on välttämätöntä, että ensimmäisen ja toisen sitoumusten summa ne ovat samat, eli:
Luottamukselliset tapahtumat Monerossa tai tuntemattomien asioiden siirtäminen tuntemattomiin kohteisiin
Sitoumuskomissiot pitävät asiaa hieman eri tavalla - ilman maskia:
Luottamukselliset tapahtumat Monerossa tai tuntemattomien asioiden siirtäminen tuntemattomiin kohteisiinMissä a — palkkion määrä, se on julkisesti saatavilla.

Tämän lähestymistavan avulla voimme todistaa luottavalle osapuolelle, että käytämme samoja määriä paljastamatta niitä.

Jotta asiat olisivat selvempiä, katsotaanpa esimerkkiä. Oletetaan, että tapahtuma kuluttaa kaksi lähtöä (eli niistä tulee tuloja) 10 ja 5 XMR ja tuottaa kolme lähtöä, joiden arvo on 12 XMR: 3, 4 ja 5 XMR. Samalla hän maksaa 3 XMR:n provisiota. Siten käytetty rahamäärä plus tuotettu summa ja palkkio on yhtä suuri kuin 15 XMR. Yritetään laskea sitoumukset ja tarkastellaan niiden määrien eroa (muista matematiikka):

Luottamukselliset tapahtumat Monerossa tai tuntemattomien asioiden siirtäminen tuntemattomiin kohteisiin
Tässä näemme, että yhtälön lähentyminen edellyttää, että tulo- ja tulosmaskien summat ovat samat. Tätä varten lompakko luo satunnaisesti x1, y1, y2 ja y3, ja loput x2 laskee näin:
Luottamukselliset tapahtumat Monerossa tai tuntemattomien asioiden siirtäminen tuntemattomiin kohteisiin
Näitä maskeja käyttämällä voimme todistaa kenelle tahansa todentajalle, että emme tuota enempää varoja kuin kulutamme, paljastamatta summaa. Alkuperäinen, eikö?

RingCT täynnä

Täysin RingCT-tapahtumissa siirtosummien tarkistaminen on hieman monimutkaisempaa. Näissä tapahtumissa lompakko ei laske syöttösitoumuksia uudelleen, vaan käyttää niitä, jotka on laskettu niiden luomisen yhteydessä. Tässä tapauksessa meidän on oletettava, että emme saa enää nollan suuruisten summien erotusta, vaan sen sijaan:
Luottamukselliset tapahtumat Monerossa tai tuntemattomien asioiden siirtäminen tuntemattomiin kohteisiin
Täällä z — tulo- ja lähtömaskien välinen ero. Jos ajatellaan zG julkisena avaimena (joka se de facto on), sitten z on yksityinen avain. Näin ollen tiedämme julkiset ja vastaavat yksityiset avaimet. Kun nämä tiedot ovat käsissämme, voimme käyttää sitä MLSAG-rengasallekirjoituksessa yhdessä sekoitettavien tulosten julkisten avainten kanssa:
Luottamukselliset tapahtumat Monerossa tai tuntemattomien asioiden siirtäminen tuntemattomiin kohteisiin
Siten kelvollinen rengasallekirjoitus varmistaa, että tiedämme kaikki yhden sarakkeen yksityiset avaimet, ja voimme tietää viimeisen rivin yksityisen avaimen vain, jos tapahtuma ei tuota enemmän varoja kuin se kuluttaa. Tässä on muuten vastaus kysymykseen "miksi ero sitoumusten määrissä ei johda nollaan" - jos zG = 0, laajennamme saraketta todellisilla tuloilla.

Mistä varojen saaja tietää, kuinka paljon rahaa hänelle lähetettiin? Täällä kaikki on yksinkertaista - tapahtuman lähettäjä ja vastaanottaja vaihtavat avaimia Diffie-Hellman-protokollaa käyttämällä tapahtumaavainta ja vastaanottajan näkymäavainta ja laskevat jaetun salaisuuden. Lähettäjä kirjoittaa tällä jaetulla avaimella salattuja tulostusmääriä koskevia tietoja tapahtuman erityisiin kenttiin.

Aluetodistuksia

Mitä tapahtuu, jos käytät negatiivista lukua sitoumusten summana? Tämä voi johtaa ylimääräisten kolikoiden syntymiseen! Tätä lopputulosta ei voida hyväksyä, joten meidän on taattava, että käyttämämme määrät eivät ole negatiivisia (tietenkin paljastamatta näitä määriä, muuten työtä on niin paljon ja kaikki turhaan). Toisin sanoen meidän on todistettava, että summa on välissä [0, 2n - 1].

Tätä varten kunkin tulosteen summa jaetaan binäärinumeroihin ja sitoutuminen lasketaan jokaiselle numerolle erikseen. On parempi nähdä esimerkin avulla, miten tämä tapahtuu.

Oletetaan, että määrämme ovat pieniä ja mahtuvat 4 bittiin (käytännössä tämä on 64 bittiä), ja luomme 5 XMR:n arvoisen lähdön. Laskemme sitoumukset jokaiselle luokalle ja kokonaissitoumuksen koko summalle:Luottamukselliset tapahtumat Monerossa tai tuntemattomien asioiden siirtäminen tuntemattomiin kohteisiin
Seuraavaksi jokainen sitoumus sekoitetaan korvikkeen kanssa (Ci-2iH) ja se on allekirjoitettu pareittain Greg Maxwellin vuonna 2015 ehdottaman Borromeo-sormusallekirjoituksen kanssa (voit lukea lisää siitä täällä):
Luottamukselliset tapahtumat Monerossa tai tuntemattomien asioiden siirtäminen tuntemattomiin kohteisiinYhdessä tätä kutsutaan aluetodisteeksi, ja sen avulla voit varmistaa, että sitoumuksissa käytetään vaihteluvälin summia [0, 2n - 1].

Mitä seuraavaksi?

Nykyisessä toteutuksessa alueen todisteet vievät paljon tilaa - 6176 tavua lähtöä kohden. Tämä johtaa suurempiin tapahtumiin ja siten korkeampiin maksuihin. Pienentääkseen Monero-tapahtuman kokoa kehittäjät ottavat käyttöön luodinkestäviä Borromeo-allekirjoituksia - etäisyydenkestävän mekanismin ilman bittikohtaisia ​​sitoumuksia. Joidenkin arvioiden mukaan, ne pystyvät pienentämään aluetodistuksen kokoa jopa 94 ​​%. Muuten, heinäkuun puolivälissä tekniikka meni ohi tarkastaa Kudelski Securitylta, joka ei paljastanut merkittäviä puutteita itse tekniikassa tai sen toteutuksessa. Tekniikka on jo käytössä testiverkossa ja uudella hard forkilla se todennäköisesti pääsee siirtymään pääverkkoon.

Esitä kysymyksiä, ehdota aiheita uusille artikkeleille kryptovaluuttojen teknologioista ja tilaa myös ryhmämme Facebookpysyäksesi ajan tasalla tapahtumistamme ja julkaisuistamme.

Lähde: will.com

Lisää kommentti