Om anonymitet i kontobaserede blockchains

Vi har været interesseret i emnet anonymitet i kryptovalutaer i lang tid og forsøger at følge udviklingen af ​​teknologier på dette område. I vores artikler har vi allerede diskuteret i detaljer principperne for drift fortrolige transaktioner i Monero, og også udført sammenlignende anmeldelse eksisterende teknologier på dette område. Dog er alle anonyme kryptovalutaer i dag bygget på datamodellen foreslået af Bitcoin - Unspent Transaction Output (herefter UTXO). For kontobaserede blockchains som Ethereum, eksisterende løsninger til implementering af anonymitet og fortrolighed (f.eks. Mobius eller Aztec) forsøgte at replikere UTXO-modellen i smarte kontrakter.

I februar 2019, en gruppe forskere fra Stanford University og Visa Research frigivet fortryk "Zether: Mod privatliv i en verden af ​​smarte kontrakter." Forfatterne var de første til at foreslå en tilgang til at sikre anonymitet i kontobaserede blockchains og præsenterede to versioner af en smart kontrakt: for fortrolige (skjuler saldi og overførselsbeløb) og anonyme (skjuler modtager og afsender) transaktioner. Vi finder den foreslåede teknologi interessant og vil gerne dele dens design, samt tale om, hvorfor problemet med anonymitet i kontobaserede blockchains anses for meget vanskeligt, og om forfatterne formåede at løse det fuldt ud.

Om strukturen af ​​disse datamodeller

I UTXO-modellen består en transaktion af "input" og "output". En direkte analog af "output" er regningerne i din tegnebog: hver "output" har en pålydende værdi. Når du betaler nogen (danner en transaktion), bruger du et eller flere "outputs", i hvilket tilfælde de bliver "inputs" af transaktionen, og blockchain markerer dem som brugte. I dette tilfælde modtager modtageren af ​​din betaling (eller dig selv, hvis du har brug for ændring) de nygenererede "outputs". Dette kan repræsenteres skematisk således:

Om anonymitet i kontobaserede blockchains

Kontobaserede blockchains er struktureret meget ligesom din bankkonto. De behandler kun beløbet på din konto og overførselsbeløbet. Når du overfører et eller andet beløb fra din konto, brænder du ingen "outputs", netværket behøver ikke at huske, hvilke mønter der er brugt, og hvilke der ikke er. I det enkleste tilfælde handler transaktionsbekræftelse om at kontrollere afsenderens underskrift og beløbet på hans saldo:

Om anonymitet i kontobaserede blockchains

Analyse af teknologi

Dernæst vil vi tale om, hvordan Zether skjuler transaktionsbeløbet, modtageren og afsenderen. Når vi beskriver principperne for dets drift, vil vi bemærke forskellene i de fortrolige og anonyme versioner. Da det er meget nemmere at sikre fortrolighed i kontobaserede blockchains, vil nogle af de restriktioner, der pålægges ved anonymisering, ikke være relevante for den fortrolige version af teknologien.

Skjul saldi og overførselsbeløb

Et krypteringsskema bruges til at kryptere saldi og overføre beløb i Zether El Gamal. Det fungerer som følger. Når Alice vil sende Bob b mønter efter adresse (den offentlige nøgle) Y, vælger hun et tilfældigt tal r og krypterer beløbet:

Om anonymitet i kontobaserede blockchains
где C - krypteret beløb, D - hjælpeværdi, der er nødvendig for at dechifrere dette beløb, G - et fast punkt på den elliptiske kurve, når multipliceret med den hemmelige nøgle, opnås den offentlige nøgle.

Når Bob modtager disse værdier, tilføjer han dem simpelthen til sin krypterede saldo på samme måde, hvorfor denne ordning er praktisk.

På samme måde trækker Alice de samme værdier fra sin balance, kun som Y bruger din offentlige nøgle.

Skjuler modtager og afsender

Blanding af "output" i UTXO går tilbage til de tidlige dage med kryptovalutaer og hjælper med at skjule afsenderen. For at gøre dette samler afsenderen selv, når han foretager en overførsel, tilfældige "output" i blockchain og blander dem med sine egne. Dernæst underskriver han "output" med en ringsignatur - en kryptografisk mekanisme, der gør det muligt for ham at overbevise verifikatoren om, at afsenderens mønter er til stede blandt de involverede "outputs". Selve de blandede mønter bliver selvfølgelig ikke brugt.

Vi vil dog ikke være i stand til at generere falske output for at skjule modtageren. Derfor har hver "output" i UTXO sin egen unikke adresse, og den er kryptografisk knyttet til adressen på modtageren af ​​disse mønter. I øjeblikket er der ingen måde at identificere forholdet mellem den unikke outputadresse og modtageradressen uden at kende dens hemmelige nøgler.

I den kontobaserede model kan vi ikke bruge engangsadresser (ellers vil det allerede være en "exits"-model). Derfor skal modtager og afsender blandes blandt andre konti i blockchainen. I dette tilfælde debiteres en krypteret 0-mønter fra de blandede konti (eller 0 tilføjes, hvis modtageren er blandet), uden faktisk at ændre deres reelle saldo.

Da både afsender og modtager altid har en fast adresse, bliver det nødvendigt at bruge de samme grupper til blanding ved overførsel til de samme adresser. Det er nemmere at se på dette med et eksempel.

Lad os sige, at Alice beslutter sig for at give et bidrag til Bobs velgørenhed, men foretrækker, at overførslen forbliver anonym for en ekstern observatør. Så, for at forklæde sig i afsenderfeltet, kommer hun også ind på Adam og Adeles regnskaber. Og for at skjule Bob skal du tilføje Ben og Bills beretninger i modtagerfeltet. I det næste bidrag besluttede Alice at skrive Alex og Amanda ved siden af ​​hende, og Bruce og Benjen ved siden af ​​Bob. I dette tilfælde, når man analyserer blockchain, er der i disse to transaktioner kun ét krydsende par deltagere - Alice og Bob, som de-anonymiserer disse transaktioner.

Om anonymitet i kontobaserede blockchains

Transaktionsløb

Som vi allerede har nævnt, for at skjule din saldo i kontobaserede systemer, krypterer brugeren sin saldo og overførselsbeløbet. Samtidig skal han bevise, at saldoen på hans konto forbliver ikke-negativ. Problemet er, at når brugeren opretter en transaktion, bygger brugeren et bevis vedrørende sin nuværende kontostatus. Hvad sker der, hvis Bob sender en transaktion til Alice, og den accepteres før den, Alice sendte? Så vil Alices transaktion blive betragtet som ugyldig, da balancebeviset blev bygget før Bobs transaktion blev accepteret.

Om anonymitet i kontobaserede blockchains

Den første beslutning, der kommer i en sådan situation, er at fryse kontoen, indtil transaktionen er gennemført. Men denne tilgang er ikke egnet, for ud over kompleksiteten ved at løse et sådant problem i et distribueret system, vil det i en anonym ordning ikke være klart, hvis konto der skal blokeres.

For at løse dette problem adskiller teknologien indgående og udgående transaktioner: forbrug har en øjeblikkelig effekt på balancen, mens kvitteringer har en forsinket effekt. For at gøre dette introduceres begrebet "epoke" - en gruppe blokke af en fast størrelse. Den aktuelle "epoke" bestemmes ved at dividere blokhøjden med gruppestørrelsen. Ved behandling af en transaktion opdaterer netværket straks afsenderens saldo og gemmer modtagerens midler i en lagertank. De akkumulerede midler stilles først til rådighed for betalingsmodtageren, når en ny "æra" begynder.

Som et resultat kan brugeren sende transaktioner uanset hvor ofte penge modtages (så vidt hans saldo tillader det, selvfølgelig). Epokestørrelsen bestemmes ud fra, hvor hurtigt blokke udbreder sig gennem netværket, og hvor hurtigt en transaktion kommer ind i en blok.

Denne løsning fungerer godt til fortrolige overførsler, men med anonyme transaktioner, som vi vil se senere, skaber det alvorlige problemer.

Beskyttelse mod gentagelsesangreb

I kontobaserede blockchains er hver transaktion underskrevet af afsenderens private nøgle, hvilket overbeviser verifikatoren om, at transaktionen ikke er blevet ændret og blev oprettet af ejeren af ​​denne nøgle. Men hvad nu hvis en angriber, der lyttede til transmissionskanalen, opsnapper denne besked og sender nøjagtig den samme anden? Verifikatoren vil verificere signaturen på transaktionen og vil være overbevist om dens forfatterskab, og netværket vil afskrive det samme beløb fra afsenderens saldo igen.

Dette angreb kaldes et replay-angreb. I UTXO-modellen er sådanne angreb ikke relevante, da angriberen vil forsøge at bruge brugte output, som i sig selv ikke er gyldige og afvises af netværket.

For at forhindre dette i at ske, er et felt med tilfældige data indbygget i transaktionen, som kaldes en nonce eller blot "salt". Når du genindsender en transaktion med et salt, ser verifikatoren efter, om nonce er blevet brugt før, og hvis ikke, betragter transaktionen som gyldig. For ikke at gemme hele historikken for brugernonces i blockchain, er den normalt i den allerførste transaktion sat lig med nul og derefter øget med én. Netværket kan kun kontrollere, at den nye transaktion afviger fra den foregående en efter en.

I den anonyme overførselsordning opstår problemet med at validere transaktionsbeskeder. Vi kan ikke udtrykkeligt binde nonce til afsenderens adresse, da dette naturligvis de-anonymiserer overførslen. Vi kan heller ikke tilføje en til nonces på alle deltagende konti, da dette kan være i konflikt med andre overførsler, der behandles.

Forfatterne af Zether foreslår at generere nonce kryptografisk, afhængigt af "epoken". For eksempel:

Om anonymitet i kontobaserede blockchains
Her x er afsenderens hemmelige nøgle, og Gepoch — en ekstra generator for epoken, opnået ved at hashe en streng med formen 'Zether +'. Nu ser problemet ud til at være løst - vi afslører ikke afsenderens nonce og blander os ikke i nonces fra uinvolverede deltagere. Men denne tilgang pålægger en alvorlig begrænsning: én konto kan ikke sende mere end én transaktion pr. "epoke". Dette problem forbliver desværre uløst og gør i øjeblikket den anonyme version af Zether, efter vores mening, næppe egnet til brug.

Kompleksiteten af ​​Zero Knowledge Proofs

I UTXO skal afsenderen bevise over for netværket, at han ikke bruger et negativt beløb, ellers bliver det muligt at generere nye mønter ud af den blå luft (hvorfor det er muligt, skrev vi i en af ​​de tidligere artikler). Og underskriv også "inputs" med en ringsignatur for at bevise, at blandt de mønter, der blandes, er der midler, der tilhører ham.

I den anonyme version af den kontobaserede blockchain er udtryk for beviser meget mere komplekse. Afsenderen beviser, at:

  1. Det afsendte beløb er positivt;
  2. Balancen forbliver ikke-negativ;
  3. Afsenderen krypterede overførselsbeløbene korrekt (inklusive nul);
  4. Saldoen på saldoen ændres kun for afsender og modtager;
  5. Afsenderen ejer den private nøgle til sin konto, og han er faktisk på listen over afsendere (blandt de involverede);
  6. Den nonce, der bruges i transaktionen, er sammensat korrekt.

For et så komplekst bevis bruger forfatterne en blanding Skudsikker (en af ​​forfatterne deltog i øvrigt i dens tilblivelse) og Sigma protokol, som kaldes Sigma-kugler. Formelt bevis for en sådan erklæring er en ret vanskelig opgave, og det begrænser i høj grad antallet af mennesker, der er villige til at implementere teknologien.

Resultatet?

Efter vores mening kan den del af Zether, der bringer privatliv til kontobaserede blockchains, bruges lige nu. Men i øjeblikket pålægger den anonyme version af teknologien alvorlige begrænsninger på dens brug og dens kompleksitet på dens implementering. Det skal dog ikke udelukkes, at forfatterne udgav den for kun et par måneder siden, og måske vil en anden finde en løsning på de problemer, der eksisterer i dag. Det er jo sådan videnskaben foregår.

Kilde: www.habr.com

Tilføj en kommentar