Fertroulike transaksjes yn Monero, of hoe't jo ûnbekende dingen kinne oerdrage nei ûnbekende bestimmingen

Wy geane troch mei ús searje oer de Monero blockchain, en it artikel fan hjoed sil rjochtsje op it RingCT (Ring Confidential Transactions) protokol, dat yntrodusearret fertroulike transaksjes en nije ring hântekeningen. Spitigernôch, der is net folle ynformaasje op it ynternet oer hoe't it wurket, en wy besocht te foljen dit gat.

Fertroulike transaksjes yn Monero, of hoe't jo ûnbekende dingen kinne oerdrage nei ûnbekende bestimmingen

Wy sille prate oer hoe't it netwurk ferberget oerdracht bedraggen mei help fan dit protokol, wêrom't se ferlitte de klassike cryptonote ring hântekeningen, en hoe't dizze technology sil ûntwikkelje fierder.

Om't dit protokol ien fan 'e meast komplekse technologyen yn Monero is, sil de lêzer in basiskennis nedich hawwe oer it ûntwerp fan dizze blockchain en in trochrinnende kennis fan elliptyske kromme-kryptografy (om dizze kennis op te poetsen, kinne jo de earste haadstikken fan ús lêze foarige artikel oer multisignatures).

RingCT protokol

Ien fan 'e mooglike oanfallen op cryptonote-faluta is blockchain-analyse basearre op kennis fan it bedrach en tiid fan' e ferstjoerde transaksje. Dit makket it mooglik signifikant beheine it sykgebiet foar útgongen fan belang foar de oanfaller. Om te beskermjen tsjin sokke analyse, hat Monero in anonime transaksjeprotokol ymplementearre dy't de bedraggen fan transfers op it netwurk folslein ferberget.

It is de muoite wurdich op te merken dat it idee om bedraggen te ferbergjen net nij is. Bitcoin Core developer Greg Maxwell wie ien fan de earsten dy't beskriuwe it yn syn artikel Fertroulike Transaksjes. De hjoeddeistige ymplemintaasje fan RingCT is de wiziging dêrfan mei de mooglikheid om ringhântekeningen te brûken (as it sûnder har), en dat is hoe't it syn namme krige - Ring Confidential Transactions.

Under oaren helpt it protokol om problemen te heljen mei it mingjen fan stofútgongen - útgongen fan in lyts bedrach (meastentiids ûntfongen yn 'e foarm fan feroaring fan transaksjes), dy't mear problemen makke as se wurdich wiene.

Yn jannewaris 2017 fûn in hurde gabel fan it Monero-netwurk plak, wêrtroch it opsjoneel gebrûk fan fertroulike transaksjes mooglik is. En al yn septimber fan itselde jier, mei de hurde gabel fan ferzje 6, waarden sokke transaksjes de iennigen tastien op it netwurk.

RingCT brûkt ferskate meganismen tagelyk: mearlaachige keppele spontane anonime groepshantekeningen (Multilayered Linkable Spontaneous Anonymous Group Signature, hjirnei oantsjutten as MLSAG), in ynsetskema (Pedersen Commitments) en berikbewiis (dizze term hat gjin fêststelde oersetting yn it Russysk) .

It RingCT-protokol yntroduseart twa soarten anonime transaksjes: ienfâldich en fol. De slûf genereart de earste as in transaksje mear as ien ynput brûkt, de twadde - yn 'e tsjinoerstelde situaasje. Se ferskille yn 'e falidaasje fan transaksjebedragen en de gegevens ûndertekene mei in MLSAG-hântekening (wy sille hjirûnder mear oer prate). Boppedat kinne transaksjes fan type fol wurde generearre mei elk oantal ynputen, d'r is gjin fûnemintele ferskil. Yn it boek "Nul nei Monero" Yn dit ferbân wurdt sein dat it beslút om folsleine transaksjes te beheinen ta ien ynput waard makke yn hasten en kin feroarje yn 'e takomst.

MLSAG hantekening

Lit ús ûnthâlde wat ûndertekene transaksje-ynputs binne. Elke transaksje besteget en generearret wat fûnsen. De generaasje fan fûnsen fynt plak troch it meitsjen fan transaksje-útgongen (in direkte analogy is rekkens), en de útfier dy't de transaksje besteget (ommers, yn it echte libben besteegje wy bankbiljetten út) wurdt de ynfier (wês foarsichtich, it is heul maklik om yn 'e war te kommen hjir).

In ynfier ferwiist nei meardere útgongen, mar besteget mar ien, sadat in "smokescreen" ûntstiet om it lestich te meitsjen om de oersettingsskiednis te analysearjen. As in transaksje mear as ien ynfier hat, dan kin sa'n struktuer fertsjintwurdige wurde as in matrix, wêrby't de rigen de yngongen binne en de kolommen de mingde útgongen. Om te bewizen oan it netwurk dat de transaksje krekt syn útgongen besteegje (kent harren geheime kaaien), de yngongen wurde tekene mei in ring hântekening. Sa'n hantekening garandearret dat de ûndertekener de geheime kaaien wist foar alle eleminten fan ien fan 'e kolommen.

Fertroulike transaksjes brûke gjin klassike mear kryptonote ring hântekeningen, se waarden ferfongen troch MLSAG - in ferzje fan ferlykbere single-layer ring hântekeningen oanpast foar meardere yngongen, LSAG.

Se wurde multilayer neamd, om't se ferskate yngongen tagelyk ûndertekenje, wêrfan elk wurdt mingd mei ferskate oaren, d.w.s. in matrix is ​​tekene, en net ien rige. Lykas wy letter sille sjen, helpt dit te besparjen op hântekeninggrutte.

Litte wy sjen nei hoe't in ringhântekening wurdt foarme, mei it foarbyld fan in transaksje dy't 2 echte útgongen besteget en m - 1 willekeurige brûkt fan 'e blockchain foar mingen. Lit ús de iepenbiere kaaien oantsjutte fan 'e útgongen dy't wy besteegje as
Fertroulike transaksjes yn Monero, of hoe't jo ûnbekende dingen kinne oerdrage nei ûnbekende bestimmingen, en kaaiôfbyldings foar har dêrmei: Fertroulike transaksjes yn Monero, of hoe't jo ûnbekende dingen kinne oerdrage nei ûnbekende bestimmingen Sa krije wy in matrix fan grutte 2 x m. Earst moatte wy de saneamde útdagings foar elk pear útgongen berekkenje:
Fertroulike transaksjes yn Monero, of hoe't jo ûnbekende dingen kinne oerdrage nei ûnbekende bestimmingen
Wy begjinne de berekkeningen mei de útgongen, dy't wy besteegje mei har iepenbiere kaaien:Fertroulike transaksjes yn Monero, of hoe't jo ûnbekende dingen kinne oerdrage nei ûnbekende bestimmingenen willekeurige nûmersFertroulike transaksjes yn Monero, of hoe't jo ûnbekende dingen kinne oerdrage nei ûnbekende bestimmingenAs gefolch krije wy de folgjende wearden:
Fertroulike transaksjes yn Monero, of hoe't jo ûnbekende dingen kinne oerdrage nei ûnbekende bestimmingen, dy't wy brûke om útdaging te berekkenjen
Fertroulike transaksjes yn Monero, of hoe't jo ûnbekende dingen kinne oerdrage nei ûnbekende bestimmingenit folgjende pear útgongen (om it makliker te meitsjen om te begripen wat wy wêr ferfange, hawwe wy dizze wearden yn ferskate kleuren markearre). Alle folgjende wearden wurde berekkene yn in sirkel mei de formules jûn yn 'e earste yllustraasje. It lêste ding om te berekkenjen is de útdaging foar in pear echte útgongen.

Sa't wy sjen kinne, brûke alle kolommen útsein dejinge mei echte útgongen willekeurich oanmakke nûmersFertroulike transaksjes yn Monero, of hoe't jo ûnbekende dingen kinne oerdrage nei ûnbekende bestimmingen. foar π- kolom wy sille ek nedich se. Lit ús transformearjeFertroulike transaksjes yn Monero, of hoe't jo ûnbekende dingen kinne oerdrage nei ûnbekende bestimmingenyn s:Fertroulike transaksjes yn Monero, of hoe't jo ûnbekende dingen kinne oerdrage nei ûnbekende bestimmingen
De hantekening sels is in tuple fan al dizze wearden:

Fertroulike transaksjes yn Monero, of hoe't jo ûnbekende dingen kinne oerdrage nei ûnbekende bestimmingen

Dizze gegevens wurde dan skreaun yn in transaksje.

As wy kinne sjen, befettet MLSAG mar ien útdaging c0, wêrmei jo te besparjen op hantekeninggrutte (wat al in protte romte fereasket). Fierder, elke ynspekteur, mei help fan de gegevensFertroulike transaksjes yn Monero, of hoe't jo ûnbekende dingen kinne oerdrage nei ûnbekende bestimmingen, herstelt de wearden c1,..., cm en kontrolearret datFertroulike transaksjes yn Monero, of hoe't jo ûnbekende dingen kinne oerdrage nei ûnbekende bestimmingen. Sa is ús ring sletten en is de hantekening ferifiearre.

Foar RingCT-transaksjes fan it folsleine type wurdt noch ien rigel tafoege oan 'e matrix mei mingde útgongen, mar wy sille hjirûnder prate.

Pedersen Ferplichtingen

Ferplichtingsregelingen (de Ingelske term commitments wurdt faker brûkt) wurde brûkt sadat ien partij bewize kin dat se in beskaat geheim (nûmer) kenne sûnder dat eins te iepenbierjen. Bygelyks, jo rôlje in bepaald oantal op 'e dobbelstiennen, beskôgje ynset en jou it troch oan de ferifiearjen partij. Sa, op it momint fan it iepenbierjen fan it geheime nûmer, berekkent de ferifiearder selsstannich de ynset, en soarget derfoar dat jo him net ferrifelje.

Monero-ferplichtingen wurde brûkt om de bedraggen fan transfers te ferbergjen en de meast foarkommende opsje te brûken - Pedersen-ferplichtingen. Trouwens, in nijsgjirrich feit - yn 't earstoan stelden de ûntwikkelders foar om de bedraggen te ferbergjen troch gewoane mingen, dat is it tafoegjen fan útgongen foar willekeurige bedraggen om ûnwissichheid yn te fieren, mar doe gongen se oer nei ferplichtingen (it is gjin feit dat se besparre op de grutte fan 'e transaksje, lykas wy hjirûnder sille sjen).
Yn 't algemien sjocht ynset der sa út:
Fertroulike transaksjes yn Monero, of hoe't jo ûnbekende dingen kinne oerdrage nei ûnbekende bestimmingenWêr C - de betsjutting fan ynset sels, a - ferburgen bedrach, H is in fêst punt op de elliptyske kromme (ekstra generator), en x - in soarte fan willekeurich masker, in hiding faktor willekeurich oanmakke. It masker is hjir nedich, sadat in tredde partij net gewoan de wearde fan ynset kin riede.

As in nije útfier wurdt oanmakke, berekkent de slûf de ynset foar it, en as it wurdt bestege, nimt it of de wearde berekkene tidens generaasje of berekkent it opnij, ôfhinklik fan it type transaksje.

RingCT ienfâldich

Yn it gefal fan ienfâldige RingCT transaksjes, om te soargjen dat de transaksje makke útgongen yn in bedrach lyk oan it bedrach fan ynput (net produsearre jild út 'e tinne lucht), is it nedich dat de som fan ferplichtings fan de earste en twadde ien wêze itselde, dat is:
Fertroulike transaksjes yn Monero, of hoe't jo ûnbekende dingen kinne oerdrage nei ûnbekende bestimmingen
Ferplichtingskommisjes beskôgje it in bytsje oars - sûnder in masker:
Fertroulike transaksjes yn Monero, of hoe't jo ûnbekende dingen kinne oerdrage nei ûnbekende bestimmingenwêr a - it bedrach fan 'e kommisje, it is iepenbier beskikber.

Dizze oanpak lit ús de fertroude partij bewize dat wy deselde bedraggen brûke sûnder se te iepenbierjen.

Om dingen dúdliker te meitsjen, litte wy nei in foarbyld sjen. Litte wy sizze dat in transaksje twa útgongen útjout (dat betsjut dat se ynputen wurde) fan 10 en 5 XMR en genereart trije útgongen wurdich 12 XMR: 3, 4 en 5 XMR. Tagelyk betellet hy in kommisje fan 3 XMR. Sa, it bedrach fan jild bestege plus it bedrach generearre en de kommisje is gelyk oan 15 XMR. Litte wy besykje de ferplichtingen te berekkenjen en te sjen nei it ferskil yn har bedraggen (ûnthâld de wiskunde):

Fertroulike transaksjes yn Monero, of hoe't jo ûnbekende dingen kinne oerdrage nei ûnbekende bestimmingen
Hjir sjogge wy dat foar de fergeliking om te konvergearjen, wy de sommen fan 'e ynfier- en útfiermasken itselde moatte wêze. Om dit te dwaan, genereart de beurs willekeurich x1, y1, y2 en y3, en de oerbleaune x2 berekkent sa:
Fertroulike transaksjes yn Monero, of hoe't jo ûnbekende dingen kinne oerdrage nei ûnbekende bestimmingen
Mei help fan dizze maskers kinne wy ​​​​oan elke ferifiateur bewize dat wy net mear fûnsen generearje dan wy besteegje, sûnder it bedrach te iepenbierjen. Oarspronklik, krekt?

RingCT fol

Yn folsleine RingCT-transaksjes is it kontrolearjen fan de oerdrachtbedragen in bytsje yngewikkelder. Yn dizze transaksjes, de beurs net recalculate ferplichtings foar ynput, mar brûkt dy berekkene doe't se waarden oanmakke. Yn dit gefal moatte wy oannimme dat wy net langer it ferskil yn 'e sommen lyk oan nul krije, mar ynstee:
Fertroulike transaksjes yn Monero, of hoe't jo ûnbekende dingen kinne oerdrage nei ûnbekende bestimmingen
it is z - ferskil tusken ynfier- en útfiermasken. As wy beskôgje zG as in iepenbiere kaai (wat it de facto is), dan z is de privee kaai. Sa kenne wy ​​de iepenbiere en oerienkommende privee kaaien. Mei dizze gegevens yn 'e hân kinne wy ​​it brûke yn' e MLSAG-ringhântekening tegearre mei de iepenbiere kaaien fan 'e útgongen dy't wurde mingd:
Fertroulike transaksjes yn Monero, of hoe't jo ûnbekende dingen kinne oerdrage nei ûnbekende bestimmingen
Sa, in jildich ring hântekening sil soargje dat wy kenne alle privee kaaien fan ien fan de kolommen, en wy kinne allinne witte de privee kaai yn 'e lêste rige as de transaksje net generearje mear fûnsen as it besteget. Trouwens, hjir is it antwurd op de fraach "wêrom liedt it ferskil yn 'e bedraggen fan ferplichtingen net ta nul" - as zG = 0, dan sille wy de kolom útwreidzje mei echte útgongen.

Hoe wit de ûntfanger fan 'e fûnsen hoefolle jild nei him stjoerd is? Alles is hjir ienfâldich - de stjoerder fan 'e transaksje en de ûntfanger wikselje kaaien mei it Diffie-Hellman-protokol, mei de transaksjekaai en de werjeftekaai fan 'e ûntfanger en berekkenje it dielde geheim. De stjoerder skriuwt gegevens oer de útfierbedragen, fersifere mei dizze dielde kaai, yn spesjale fjilden fan 'e transaksje.

Range bewiis

Wat bart der as jo in negatyf nûmer brûke as it bedrach yn ferplichtingen? Dit kin liede ta de generaasje fan ekstra munten! Dizze útkomst is net akseptabel, dus wy moatte garandearje dat de bedraggen dy't wy brûke net negatyf binne (sûnder dizze bedraggen te iepenbierjen, fansels, oars is der safolle wurk en alles om 'e nocht). Mei oare wurden, wy moatte bewize dat de som is yn it ynterval [0, 2n - 1].

Om dit te dwaan, wurdt de som fan elke útfier ferdield yn binêre sifers en wurdt de tasizzing foar elke sifer apart berekkene. It is better om te sjen hoe't dit bart mei in foarbyld.

Litte wy oannimme dat ús bedraggen lyts binne en passe yn 4 bits (yn 'e praktyk is dit 64 bits), en wy meitsje in útfier wurdich 5 XMR. Wy berekkenje ferplichtingen foar elke kategory en de totale ynset foar it heule bedrach:Fertroulike transaksjes yn Monero, of hoe't jo ûnbekende dingen kinne oerdrage nei ûnbekende bestimmingen
Dêrnei wurdt elke ynset mingd mei in surrogaat (Ci-2iH) en wurdt yn pearen tekene mei de Borromeo-ringhântekening (in oare ringhântekening), foarsteld troch Greg Maxwell yn 2015 (jo kinne der mear oer lêze hjir):
Fertroulike transaksjes yn Monero, of hoe't jo ûnbekende dingen kinne oerdrage nei ûnbekende bestimmingenMei-inoar wurdt dit berikbewiis neamd en kinne jo derfoar soargje dat ferplichtingen bedraggen yn it berik brûke [0, 2n - 1].

Wat is folgjende?

Yn 'e hjoeddeistige ymplemintaasje nimme berikbewiis in soad romte - 6176 bytes per útfier. Dit liedt ta gruttere transaksjes en dus hegere fergoedingen. Om de grutte fan in Monero-transaksje te ferminderjen, yntrodusearje ûntwikkelders kûgelproofs ynstee fan Borromeo-hantekeningen - in berikbewiismeganisme sûnder bitwize ferplichtingen. Neffens guon rûzings, se binne by steat om te ferminderjen de grutte fan berik bewiis troch oant 94%. Troch de wei, heal july de technology trochjûn kontrôle fan Kudelski Security, dy't gjin signifikante tekoarten iepenbiere yn 'e technology sels of yn' e ymplemintaasje dêrfan. De technology wurdt al brûkt yn it testnetwurk, en mei de nije hurde gabel kin it wierskynlik nei it haadnetwurk ferpleatse.

Stel jo fragen, suggerearje ûnderwerpen foar nije artikels oer technologyen op it mêd fan cryptocurrency, en abonnearje ek op ús groep yn facebookom op 'e hichte te bliuwen fan ús eveneminten en publikaasjes.

Boarne: www.habr.com

Add a comment