Konfidentiella transaktioner i Monero, eller hur man överför okända saker till okända destinationer

Vi fortsätter vår serie om Monero-blockkedjan, och dagens artikel kommer att fokusera på RingCT-protokollet (Ring Confidential Transactions), som introducerar konfidentiella transaktioner och nya ringsignaturer. Tyvärr finns det lite information på Internet om hur det fungerar, och vi försökte fylla denna lucka.

Konfidentiella transaktioner i Monero, eller hur man överför okända saker till okända destinationer

Vi kommer att prata om hur nätverket döljer överföringsbelopp med detta protokoll, varför de övergav de klassiska kryptonote-ringsignaturerna och hur denna teknik kommer att utvecklas vidare.

Eftersom detta protokoll är en av de mest komplexa teknologierna i Monero, kommer läsaren att behöva en grundläggande kunskap om designen av denna blockchain och en övergående kunskap om elliptisk kurvkryptografi (för att fräscha upp denna kunskap kan du läsa de första kapitlen i vår tidigare artikel om multisignaturer).

RingCT-protokoll

En av de möjliga attackerna på kryptonotevalutor är blockkedjeanalys baserad på kunskap om mängden och tiden för den skickade transaktionen. Det här tillåter avsevärt begränsa sökområdet efter utgångar av intresse för angriparen. För att skydda mot sådan analys har Monero implementerat ett anonymt transaktionsprotokoll som helt döljer mängden överföringar på nätverket.

Det är värt att notera att tanken på att dölja belopp inte är ny. Bitcoin Core-utvecklaren Greg Maxwell var en av de första som beskrev det i sin artikel Konfidentiella transaktioner. Den nuvarande implementeringen av RingCT är dess modifiering med möjligheten att använda ringsignaturer (oavsett om det inte är dem), och det är så det fick sitt namn - Ring Confidential Transactions.

Protokollet hjälper bland annat att bli av med problem med att blanda dammutgångar - utdata av en liten mängd (vanligtvis mottagen i form av förändringar från transaktioner), som skapade fler problem än de var värda.

I januari 2017 ägde en hård gaffel av Monero-nätverket rum, vilket möjliggjorde valfri användning av konfidentiella transaktioner. Och redan i september samma år, med version 6 hårdgaffel, blev sådana transaktioner de enda tillåtna på nätverket.

RingCT använder flera mekanismer samtidigt: flerlagers länkade spontana anonyma gruppsignaturer (Multilayered Linkable Spontaneous Anonymous Group Signature, nedan kallad MLSAG), ett åtagandesystem (Pedersen Commitments) och räckviddsbevis (denna term har inte en etablerad översättning till ryska) .

RingCT-protokollet introducerar två typer av anonyma transaktioner: enkla och fullständiga. Plånboken genererar den första när en transaktion använder mer än en ingång, den andra - i motsatt situation. De skiljer sig åt i valideringen av transaktionsbelopp och data signerade med en MLSAG-signatur (vi kommer att prata mer om detta nedan). Dessutom kan transaktioner av typen full genereras med valfritt antal ingångar, det finns ingen grundläggande skillnad. I boken "Noll till Monero" I detta avseende sägs det att beslutet att begränsa hela transaktioner till en insats togs i hast och kan komma att ändras i framtiden.

MLSAG signatur

Låt oss komma ihåg vad signerade transaktionsingångar är. Varje transaktion spenderar och genererar några pengar. Genereringen av medel sker genom att skapa transaktionsutdata (en direkt analogi är räkningar), och utdata som transaktionen spenderar (i verkligheten spenderar vi trots allt sedlar) blir input (var försiktig, det är mycket lätt att bli förvirrad här).

En ingång refererar till flera utgångar, men spenderar bara en, vilket skapar en "rökskärm" för att göra det svårt att analysera översättningshistoriken. Om en transaktion har mer än en ingång kan en sådan struktur representeras som en matris, där raderna är indata och kolumnerna är de blandade utdata. För att bevisa för nätverket att transaktionen spenderar exakt sina utgångar (vet deras hemliga nycklar), signeras ingångarna med en ringsignatur. En sådan signatur garanterar att undertecknaren kände till de hemliga nycklarna för alla element i någon av kolumnerna.

Konfidentiella transaktioner använder inte längre klassiska transaktioner kryptonote ringsignaturer, de ersattes av MLSAG - en version av liknande ringsignaturer i ett lager anpassade för flera ingångar, LSAG.

De kallas multilayer eftersom de signerar flera ingångar på en gång, som var och en är blandad med flera andra, det vill säga en matris är signerad och inte en rad. Som vi kommer att se senare hjälper detta till att spara på signaturstorleken.

Låt oss titta på hur en ringsignatur bildas, med hjälp av exemplet på en transaktion som spenderar 2 riktiga utgångar och använder m - 1 slumpmässiga från blockkedjan för att blanda. Låt oss beteckna de publika nycklarna för de utgångar som vi spenderar som
Konfidentiella transaktioner i Monero, eller hur man överför okända saker till okända destinationer, och nyckelbilder för dem i enlighet med detta: Konfidentiella transaktioner i Monero, eller hur man överför okända saker till okända destinationer Således får vi en matris av storlek 2 x m. Först 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ända saker till okända destinationer
Vi börjar beräkningarna med utdata, som vi spenderar med deras publika nycklar:Konfidentiella transaktioner i Monero, eller hur man överför okända saker till okända destinationeroch slumptalKonfidentiella transaktioner i Monero, eller hur man överför okända saker till okända destinationerSom ett resultat får vi följande värden:
Konfidentiella transaktioner i Monero, eller hur man överför okända saker till okända destinationer, som vi använder för att beräkna utmaning
Konfidentiella transaktioner i Monero, eller hur man överför okända saker till okända destinationernästa par utgångar (för att göra det lättare att förstå vad vi ersätter var har vi markerat dessa värden i olika färger). Alla följande värden beräknas i en cirkel med formlerna i den första illustrationen. Det sista att beräkna är utmaningen för ett par riktiga utgångar.

Som vi kan se använder alla kolumner utom den som innehåller verkliga utdata slumpmässigt genererade talKonfidentiella transaktioner i Monero, eller hur man överför okända saker till okända destinationer. För π- kolumn vi kommer också att behöva dem. Låt oss förvandlaKonfidentiella transaktioner i Monero, eller hur man överför okända saker till okända destinationeri s:Konfidentiella transaktioner i Monero, eller hur man överför okända saker till okända destinationer
Signaturen i sig är en tupel av alla dessa värden:

Konfidentiella transaktioner i Monero, eller hur man överför okända saker till okända destinationer

Dessa data skrivs sedan in i en transaktion.

Som vi kan se innehåller MLSAG bara en utmaning c0, vilket gör att du kan spara på signaturstorlek (som redan kräver mycket utrymme). Vidare, alla inspektörer som använder uppgifternaKonfidentiella transaktioner i Monero, eller hur man överför okända saker till okända destinationer, återställer värdena c1,..., cm och kontrollerar detKonfidentiella transaktioner i Monero, eller hur man överför okända saker till okända destinationer. Därmed är vår ring stängd och signaturen har verifierats.

För RingCT-transaktioner av full typ läggs ytterligare en rad till matrisen med blandade utgångar, men vi kommer att prata om detta nedan.

Pedersen åtaganden

Skyldighetssystem (den engelska termen commitments används oftare) används för att en part ska kunna bevisa att de känner till en viss hemlighet (nummer) utan att faktiskt avslöja den. Till exempel kastar du ett visst antal på tärningen, överväger engagemang och skickar det vidare till den verifierande parten. Således, i det ögonblick då det hemliga numret avslöjas, beräknar verifieraren självständigt åtagandet och säkerställer därmed att du inte lurade honom.

Monero-åtaganden används för att dölja överföringsbeloppen och använder det vanligaste alternativet - Pedersen-åtaganden. Förresten, ett intressant faktum - först föreslog utvecklarna att dölja beloppen genom vanlig blandning, det vill säga lägga till utdata för godtyckliga belopp för att skapa osäkerhet, men sedan bytte de till åtaganden (det är inte ett faktum att de sparade på transaktionsstorleken, som vi kommer att se nedan).
Generellt sett ser engagemanget ut så här:
Konfidentiella transaktioner i Monero, eller hur man överför okända saker till okända destinationervar C — innebörden av själva åtagandet, a - dolt belopp, H är en fast punkt på den elliptiska kurvan (extra generator), och x — någon form av godtycklig mask, en döljande faktor som genereras slumpmässigt. Masken behövs här så att en tredje part inte bara kan gissa värdet av engagemang.

När en ny utdata genereras, beräknar plånboken engagemang för den, och när den spenderas tar den antingen värdet som beräknats under genereringen eller räknar om det, beroende på typen av transaktion.

RingCT enkelt

I fallet med enkla RingCT-transaktioner, för att säkerställa att transaktionen skapade utgångar i ett belopp som motsvarar mängden insatser (inte producerade pengar ur tomma intet), är det nödvändigt att summan av åtaganden för den första och andra de är desamma, det vill säga:
Konfidentiella transaktioner i Monero, eller hur man överför okända saker till okända destinationer
Åtagandekommissioner anser det lite annorlunda - utan mask:
Konfidentiella transaktioner i Monero, eller hur man överför okända saker till okända destinationervar a — Provisionsbeloppet, det är allmänt tillgängligt.

Detta tillvägagångssätt tillåter oss att bevisa för den förtroende parten att vi använder samma belopp utan att avslöja dem.

För att göra saker tydligare, låt oss titta på ett exempel. Låt oss säga att en transaktion spenderar två utgångar (vilket betyder att de blir ingångar) på 10 och 5 XMR och genererar tre utgångar värda 12 XMR: 3, 4 och 5 XMR. Samtidigt betalar han en provision på 3 XMR. Således är summan av pengar som spenderas plus det genererade beloppet och provisionen lika med 15 XMR. Låt oss försöka beräkna åtaganden och titta på skillnaden i deras belopp (kom ihåg matematiken):

Konfidentiella transaktioner i Monero, eller hur man överför okända saker till okända destinationer
Här ser vi att för att ekvationen ska konvergera behöver vi summan av ingångs- och utgångsmaskerna vara desamma. För att göra detta genererar plånboken slumpmässigt x1, y1, y2 och y3, och resten x2 räknar ut så här:
Konfidentiella transaktioner i Monero, eller hur man överför okända saker till okända destinationer
Genom att använda dessa masker kan vi bevisa för alla verifierare att vi inte genererar mer pengar än vi spenderar, utan att avslöja beloppet. Original, eller hur?

RingCT full

I fullständiga RingCT-transaktioner är det lite mer komplicerat att kontrollera överföringsbeloppen. I dessa transaktioner räknar inte plånboken om åtaganden för insatser, utan använder de som beräknades när de genererades. I det här fallet måste vi anta att vi inte längre får skillnaden i summor lika med noll, utan istället:
Konfidentiella transaktioner i Monero, eller hur man överför okända saker till okända destinationer
Här z — Skillnaden mellan ingångs- och utgångsmasker. Om vi ​​överväger zG som en offentlig nyckel (vilket den de facto är), alltså z är den privata nyckeln. Således känner vi till de offentliga och motsvarande privata nycklarna. Med denna data i handen kan vi använda den i MLSAG-ringsignaturen tillsammans med de publika nycklarna för utgångarna som blandas:
Konfidentiella transaktioner i Monero, eller hur man överför okända saker till okända destinationer
Således kommer en giltig ringsignatur att säkerställa att vi känner till alla privata nycklar i en av kolumnerna, och vi kan bara känna till den privata nyckeln i sista raden om transaktionen inte genererar mer pengar än den spenderar. Förresten, här är svaret på frågan "varför leder inte skillnaden i beloppen av åtaganden till noll" - om zG = 0, så kommer vi att utöka kolumnen med verkliga utdata.

Hur vet mottagaren av medlen hur mycket pengar som skickades till honom? Allt är enkelt här - avsändaren av transaktionen och mottagaren byter nycklar med hjälp av Diffie-Hellman-protokollet, använder transaktionsnyckeln och mottagarens vynyckel och beräknar den delade hemligheten. Avsändaren skriver data om utgående belopp, krypterad med denna delade nyckel, i specialfält för transaktionen.

Räckviddsbevis

Vad händer om du använder ett negativt tal som belopp i åtaganden? Detta kan leda till generering av ytterligare mynt! Detta resultat är oacceptabelt, så vi måste garantera att beloppen vi använder inte är negativa (utan att avslöja dessa belopp, naturligtvis, annars är det så mycket arbete och allt förgäves). Med andra ord måste vi bevisa att summan ligger i intervallet [0, 2n - 1].

För att göra detta delas summan av varje utdata upp i binära siffror och åtagandet beräknas för varje siffra separat. Det är bättre att se hur detta händer med ett exempel.

Låt oss anta att våra mängder är små och passar in i 4 bitar (i praktiken är detta 64 bitar), och vi skapar en utdata värd 5 XMR. Vi beräknar åtaganden för varje kategori och det totala åtagandet för hela beloppet:Konfidentiella transaktioner i Monero, eller hur man överför okända saker till okända destinationer
Därefter blandas varje engagemang med ett surrogat (Ci-2iH) och är signerad i par med Borromeo-ringsignaturen (en annan ringsignatur), föreslagen av Greg Maxwell 2015 (du kan läsa mer om den här):
Konfidentiella transaktioner i Monero, eller hur man överför okända saker till okända destinationerSammantaget kallas detta för intervallsäkring och låter dig säkerställa att åtaganden använder belopp i intervallet [0, 2n - 1].

Vad händer nu?

I den nuvarande implementeringen tar avståndsbevis mycket utrymme - 6176 byte per utgång. Detta leder till större transaktioner och därmed högre avgifter. För att minska storleken på en Monero-transaktion introducerar utvecklare skottsäkra istället för Borromeo-signaturer – en mekanism för intervallsäkring utan bitvisa åtaganden. Enligt vissa uppskattningar, kan de minska storleken på räckviddsbeviset med upp till 94 %. Förresten, i mitten av juli gick tekniken granska från Kudelski Security, som inte avslöjade några väsentliga brister vare sig i själva tekniken eller i dess implementering. Tekniken används redan i testnätverket och med den nya hårdgaffeln kan den förmodligen flytta till huvudnätet.

Ställ dina frågor, föreslå ämnen för nya artiklar om teknologier inom kryptovaluta och prenumerera även på vår grupp i Facebookför att hålla dig uppdaterad med våra evenemang och publikationer.

Källa: will.com

Lägg en kommentar