Konfidentiella transaktioner i Monero, eller hur man överför okÀnt till okÀnt stÀlle

Vi fortsÀtter vÄr serie om hur Moneros blockkedja fungerar, och dagens artikel kommer att handla om protokollet RingCT (Ring Confidential Transactions), dÀr konfidentiella transaktioner och nya ring-signaturer presenteras. TyvÀrr finns det lite information pÄ internet om hur det fungerar, och vi har försökt fylla detta gap.

Konfidentiella transaktioner i Monero, eller hur man överför okÀnt till okÀnt stÀlle

Vi kommer att diskutera hur detta protokoll gör att nÀtverket döljer överföringsbeloppen, varför man avstod frÄn de klassiska ring-signaturerna för cryptonote och hur denna teknik kommer att utvecklas i framtiden.

Eftersom detta protokoll Àr en av de mest komplexa teknologierna inom Monero, behöver lÀsaren grundlÀggande kunskaper om hur denna blockkedja fungerar samt ytlig kunskap inom kryptografi baserat pÄ elliptiska kurvor (för att frÀscha upp dessa kunskaper kan man lÀsa de första kapitlen i vÄr tidigare artikel om multisignaturer).

RingCT-protokollet

En möjlig attack mot cryptonote-valutor Àr blockkedjeanalys baserat pÄ kunskap om beloppet och tidpunkten för den skickade transaktionen. Detta gör att man kan snÀva in omrÄdet för de utgÄngar som intresserar angriparen betydligt. För att skydda mot sÄdan analys har Monero implementerat ett protokoll för anonyma transaktioner som helt döljer överföringsbeloppen inom nÀtverket.

Det Ă€r vĂ€rt att notera att idĂ©n om att dölja belopp inte Ă€r ny. En av de första som beskrev den var Bitcoin Core-utvecklaren Greg Maxwell i sin artikel Confidential Transactions. Den nuvarande implementationen av RingCT Ă€r en modifiering av denna med möjlighet att anvĂ€nda ring-signaturer (hur kan man klara sig utan dem), och den fick sitt namn — Ring Confidential Transactions.

Dessutom hjĂ€lper protokollet till att lösa problem med blandning av smĂ„ utgĂ„ngar — utgĂ„ngar med en liten summa (vilket ofta uppstĂ„r i form av vĂ€xel frĂ„n transaktioner) som har skapat fler problem Ă€n de har varit vĂ€rda.

I januari 2017 skedde en hÄrd gaffel inom Monero-nÀtverket som möjliggör valfri anvÀndning av konfidentiella transaktioner. Redan i september samma Är blev sÄdana transaktioner de enda tillÄtna i nÀtverket efter hÄrdgaffeln av version 6.

RingCT anvĂ€nder flera mekanismer: multilayered linkable spontaneous anonymous group signatures (Multilayered Linkable Spontaneous Anonymous Group Signature, nedan — MLSAG), en Ă„tagandeskema (Pedersen Commitments) och range proofs (det finns inget etablerat svenskt översĂ€ttning av denna term).

RingCT-protokollet introducerar tvÄ typer av anonyma transaktioner: simple och full. Den första genereras av plÄnboken nÀr en transaktion anvÀnder mer Àn en ingÄng, medan den andra görs i motsatt situation. De skiljer sig Ät i validering av transaktionsbelopp och de data som signeras med MLSAG-signatur (mer om detta diskuteras nedan). Fulltransaktioner kan genereras med valfritt antal ingÄngar, det spelar ingen verklig roll. I boken «Zero to Monero» nÀmns att beslutet att begrÀnsa fulltransaktioner till en ingÄng togs hastigt och kan komma att Àndras i framtiden.

MLSAG-signatur

LĂ„t oss pĂ„minna oss om vad de signerade ingĂ„ngarna till transaktionen representerar. Varje transaktion spenderar vissa medel och genererar. Genereringen av medel sker genom att skapa utgĂ„ngar frĂ„n transaktionen (en direkt analogi — sedlar), och den utgĂ„ng som transaktionen spenderar (eftersom vi i verkliga livet spenderar just sedlar) blir en ingĂ„ng (var försiktig, hĂ€r Ă€r det mycket lĂ€tt att bli förvirrad).

En ingÄng refererar till flera utgÄngar men spenderar endast en, vilket skapar en "rökdimma" för att komplicera analysen av överföringshistoriken. Om transaktionen har mer Àn en ingÄng kan denna struktur representeras i form av en matris, dÀr raderna Àr ingÄngar och kolumnerna Àr involverade utgÄngar. För att bevisa för nÀtverket att transaktionen faktiskt spenderar sina egna utgÄngar (kÀnner till deras hemliga nycklar) signeras ingÄngarna med en ring-signatur. Denna signatur garanterar att den signerande kÀnde till de hemliga nycklarna för alla element i nÄgon kolumn.

Konfidentiella transaktioner anvĂ€nder inte lĂ€ngre de klassiska för cryptonote ringsignaturerna, istĂ€llet kom MLSAG — en anpassad version av liknande enfaldiga ringsignaturer för flera ingĂ„ngar. LSAG.

De kallas flerskiktade eftersom de signerar flera ingÄngar samtidigt, var och en som mixas med flera andra, dvs. en matris signeras och inte bara en rad. Som vi kommer att se senare hjÀlper detta att spara pÄ storleken av signaturen.

LĂ„t oss titta pĂ„ hur en ringsignatur bildas, med ett exempel pĂ„ en transaktion som spenderar 2 verkliga utgĂ„ngar och anvĂ€nder m — 1 slumpmĂ€ssiga frĂ„n blockkedjan för mixning. Vi betecknar de offentliga nycklarna för utgĂ„ngarna vi spenderar som
Konfidentiella transaktioner i Monero, eller hur man överför okÀnt till okÀnt stÀlle, och key images för dem motsvarande: Konfidentiella transaktioner i Monero, eller hur man överför okÀnt till okÀnt stÀlle SÄledes fÄr vi en matris av storlek 2 x m. För att börja mÄste vi berÀkna de sÄ kallade utmaningarna för varje par av utgÄngar:
Konfidentiella transaktioner i Monero, eller hur man överför okÀnt till okÀnt stÀlle
BerÀkningarna inleds med utgÄngarna som vi spenderar, genom att anvÀnda deras publika nycklar:Konfidentiella transaktioner i Monero, eller hur man överför okÀnt till okÀnt stÀlleoch slumpmÀssiga talKonfidentiella transaktioner i Monero, eller hur man överför okÀnt till okÀnt stÀlleTill slut fÄr vi vÀrden:
Konfidentiella transaktioner i Monero, eller hur man överför okÀnt till okÀnt stÀlle, som vi anvÀnder för att berÀkna utmaningen
Konfidentiella transaktioner i Monero, eller hur man överför okÀnt till okÀnt stÀlleför nÀsta par av utgÄngar (för att göra det enklare att förstÄ vad vi sÀtter var, har vi markerat dessa vÀrden med olika fÀrger). Alla följande vÀrden berÀknas cykliskt enligt formlerna som ges i den första illustrationen. Den sista utmaningen berÀknas för paret av verkliga utgÄngar.

Som vi ser anvĂ€nds i alla kolumner utom den som innehĂ„ller verkliga utgĂ„ngar slumpmĂ€ssigt genererade tal.Konfidentiella transaktioner i Monero, eller hur man överför okĂ€nt till okĂ€nt stĂ€lle. För π-te kolumn behöver vi ocksĂ„. Vi omvandlarKonfidentiella transaktioner i Monero, eller hur man överför okĂ€nt till okĂ€nt stĂ€lletill s:Konfidentiella transaktioner i Monero, eller hur man överför okĂ€nt till okĂ€nt stĂ€lle
SjÀlva signaturen utgörs av en körtel av alla dessa vÀrden:

Konfidentiella transaktioner i Monero, eller hur man överför okÀnt till okÀnt stÀlle

DĂ€refter skrivs dessa data in i en transaktion.

Som vi ser innehĂ„ller MLSAG endast en utmaning c0, vilket gör att vi kan spara pĂ„ storleken av signaturen (som redan krĂ€ver mycket plats). DĂ€refter Ă„terstĂ€ller varje verifierare, genom att anvĂ€nda dataKonfidentiella transaktioner i Monero, eller hur man överför okĂ€nt till okĂ€nt stĂ€lle, vĂ€rdena c1,
, cm och kontrollerar attKonfidentiella transaktioner i Monero, eller hur man överför okĂ€nt till okĂ€nt stĂ€lle. SĂ„ledes har vĂ„r ring slutit sig och signaturen har passerat verifieringen.

För RingCT-transaktioner av typen full lÀggs en extra rad till matrisen med blandade utgÄngar, men vi kommer att berÀtta mer om det senare.

Pedersen Commitments

Commitments-schema (den engelska termen — commitments anvĂ€nds oftare) anvĂ€nds för att en part ska kunna bevisa att den kĂ€nner till en viss hemlighet (nummer), utan att avslöja den. Till exempel kastar du ett visst nummer med tĂ€rningen, berĂ€knar commitment och överlĂ€mnar det till den verifierande parten. DĂ€rmed, vid tidpunkten för avslöjandet av det hemliga numret, berĂ€knar den verifierande parten sjĂ€lv commitment och försĂ€krar sig om att du inte har lurat dem.

I Monero anvĂ€nds commitments för att dölja summor av överföringar och tillĂ€mpar den mest vedertagna varianten — Pedersen commitments. För övrigt en intressant detalj — initialt föreslog utvecklarna att dölja summor genom vanlig blandning, det vill sĂ€ga att lĂ€gga till utgĂ„ngar pĂ„ slumpmĂ€ssiga summor för att introducera osĂ€kerhet, men de övergick sedan till commitments (utan att det Ă€r sĂ€kert att de sparade pĂ„ storleken av transaktionen, som vi kommer att se nedan).
I allmÀnhet ser en commitment ut pÄ följande sÀtt:
Konfidentiella transaktioner i Monero, eller hur man överför okĂ€nt till okĂ€nt stĂ€lleDĂ€r C — vĂ€rdet av sjĂ€lva commitmenten, a — den dolda summan, H — en fast punkt pĂ„ en elliptisk kurva (en ytterligare generator), och x — nĂ„gon slags godtycklig mask, en dolda faktorn som genereras slumpmĂ€ssigt. Masken behövs hĂ€r för att en tredje part inte enkelt ska kunna gissa vĂ€rdet av commitment genom att pröva olika alternativ.

Vid generering av en ny utgĂ„ng berĂ€knar plĂ„nboken commitment för den, och vid utgifter antingen anvĂ€nder det berĂ€knade vĂ€rdet eller omberĂ€knar det — beroende pĂ„ typ av transaktion.

RingCT simple

I fallet med simple RingCT-transaktioner mÄste vi för att garantera att transaktionen skapar utgÄngar som summerar till ingÄngarnas summa (inte skapar pengar ur intet) se till att summan av commitments för den första och andra Àr densamma, det vill sÀga:
Konfidentiella transaktioner i Monero, eller hur man överför okÀnt till okÀnt stÀlle
Commitment av avgifter berĂ€knas lite annorlunda — utan mask:
Konfidentiella transaktioner i Monero, eller hur man överför okĂ€nt till okĂ€nt stĂ€lle, dĂ€r a — summan av avgiften Ă€r offentligt tillgĂ€nglig.

Denna metod gör det möjligt att bevisa för den kontrollerande parten att vi anvÀnder samma summor utan att avslöja dem.

För att göra allt tydligare, lÄt oss titta pÄ ett exempel. Anta att transaktionen anvÀnder tvÄ utgÄngar (det vill sÀga de blir ingÄngar) pÄ 10 och 5 XMR och generar tre utgÄngar pÄ totalt 12 XMR: 3, 4 och 5 XMR. Under tiden betalar den en avgift pÄ 3 XMR. SÄledes Àr summan av anvÀnda medel plus summan av genererade medel och avgiften lika med 15 XMR. LÄt oss försöka berÀkna commitments och titta pÄ skillnaden i deras summor (lÄt oss minnas matematiken):

Konfidentiella transaktioner i Monero, eller hur man överför okÀnt till okÀnt stÀlle
HÀr ser vi att för att ekvationen ska gÄ ihop behövs summorna av maskerna för ingÄngarna och utgÄngarna vara lika. För detta genererar plÄnboken slumpmÀssigt x1, y1, y2 och y3, medan den ÄterstÄende x2 berÀknas sÄ hÀr:
Konfidentiella transaktioner i Monero, eller hur man överför okÀnt till okÀnt stÀlle
Genom att anvÀnda dessa masker kan vi bevisa för nÄgon kontrollerande att vi inte genererar mer medel Àn vi spenderar, utan att avslöja summorna. Originalt, eller hur?

RingCT full

I full RingCT-transaktioner Àr kontrollen av överföringsbeloppen nÄgot mer invecklad. I dessa transaktioner omberÀknar plÄnboken inte commitments för ingÄngarna, utan anvÀnder de som berÀknades vid deras generering. HÀr mÄste vi rÀkna med att skillnaden mellan summorna inte lÀngre blir noll, utan istÀllet:
Konfidentiella transaktioner i Monero, eller hur man överför okÀnt till okÀnt stÀlle
HĂ€r z — skillnaden mellan maskerna för ingĂ„ngar och utgĂ„ngar. Om vi ser pĂ„ zG som en offentlig nyckel (vilket det de facto Ă€r), sĂ„ z — detta Ă€r den privata nyckeln. SĂ„ledes kĂ€nner vi till den offentliga och motsvarande privata nycklarna. Med dessa uppgifter kan vi anvĂ€nda dem i MLSAG-ringunderteckningen tillsammans med de offentliga nycklarna för de blandade utgĂ„ngarna:
Konfidentiella transaktioner i Monero, eller hur man överför okÀnt till okÀnt stÀlle
DĂ€rför kommer en giltig ringunderteckning att garantera att vi kĂ€nner till alla privata nycklar för en av kolumnerna, och den privata nyckeln i den sista raden kan vi endast kĂ€nna till om transaktionen inte genererar mer medel Ă€n den spenderar. Förresten, hĂ€r Ă€r svaret pĂ„ frĂ„gan «varför hĂ€r skillnaden mellan summorna commitments inte ger noll» — om zG = 0, sĂ„ kommer vi att avslöja kolumnen med verkliga utgĂ„ngar.

Men hur kommer mottagaren av medlen att veta hur mycket pengar de har fĂ„tt? HĂ€r Ă€r allt enkelt — avsĂ€ndaren av transaktionen och mottagaren utbyter nycklar enligt Diffie-Hellman-protokollet, anvĂ€nder transaktionsnyckeln och mottagarens view-nyckel och berĂ€knar en gemensam hemlighet. AvsĂ€ndaren skriver in uppgifter om utgĂ„ngssummorna i sĂ€rskilda fĂ€lt i transaktionen, krypterade med denna gemensamma nyckel.

Intervallbevis

Vad hĂ€nder om vi anvĂ€nder ett negativt tal som summa i commitments? Det kan leda till generering av ytterligare mynt! Denna utgĂ„ng Ă€r oacceptabel, sĂ„ vi behöver en garanti för att de summor vi anvĂ€nder inte Ă€r negativa (utan att avslöja dessa summor, naturligtvis, annars skulle all den hĂ€r anstrĂ€ngningen vara förgĂ€ves). Med andra ord, vi mĂ„ste bevisa att summan ligger inom intervallet [0, 2n — 1].

För detta delas summan av varje utgÄng upp i binÀra siffror och en commitment berÀknas för varje siffra separat. Hur detta gÄr till Àr bÀst att betrakta i ett exempel.

Anta att vÄra summor Àr smÄ och fÄr plats i 4 bitar (i praktiken Àr det 64 bitar), och vi skapar en utgÄng pÄ 5 XMR. Vi berÀknar commitments för varje siffra och total commitment för hela summan:Konfidentiella transaktioner i Monero, eller hur man överför okÀnt till okÀnt stÀlle
DÀrefter blandas varje commitment med en surrogat- (Ci-2iH) och undertecknas parvis med en Borromeo-ringunderteckning (Ànnu en ringunderteckning), föreslagen av Greg Maxwell 2015 (mer om den kan lÀsas hÀr):
Konfidentiella transaktioner i Monero, eller hur man överför okĂ€nt till okĂ€nt stĂ€lleAllt detta kallas intervallbevis och möjliggör en garanti för att summorna i commitments ligger inom intervallet [0, 2n — 1].

Vad hÀnder hÀrnÀst?

I den nuvarande implementeringen tar range proofs upp vĂ€ldigt mycket utrymme — 6176 byte per utgĂ„ng. Detta leder till stora transaktioner och dĂ€rmed högre avgifter. För att minska storleken pĂ„ transaktionen inför Monero-utvecklarna istĂ€llet för Borromeo-signaturer bulletproofs — en mekanism för range proof utan bitvisa commitments. Enligt vissa uppskattningar, kan de minska storleken pĂ„ range proof med upp till 94%. Som en notis, i mitten av juli genomgick teknologin revision av företaget Kudelski Security, som inte pĂ„visade nĂ„gra betydande brister varken i teknologin eller dess implementation. Teknologin anvĂ€nds redan i testnĂ€tet och kan, med den nya hĂ„rdgaffeln, troligtvis flyttas över till huvudnĂ€tet.

StÀll dina frÄgor, föreslÄ Àmnen för nya artiklar om teknologi inom kryptovalutor och följ vÄr grupp pÄ Facebook, för att hÄlla dig uppdaterad om vÄra evenemang och publikationer.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster