Om anonymitet i account-baserede blockchains

Vi har længe været interesserede i emnet anonymitet inden for kryptovalutaer og forsøger at følge udviklingen af teknologier på dette område. I vores artikler har vi allerede grundigt gennemgået principperne for konfidentielle transaktioner i Monero, samt udført en sammenlignende oversigt over de teknologier, der findes på dette felt. Alle anonymiserede kryptovalutaer i dag er dog baseret på den datamodel, der foreslås af Bitcoin — Unspent Transaction Output (senere UTXO). For account-baserede blockchains som Ethereum har eksisterende løsninger til implementering af anonymitet og fortrolighed (for eksempel Mobius eller Aztec) forsøgt at genskabe UTXO-modellen i smarte kontrakter.

I februar 2019 præsenterede en gruppe forskere fra Stanford Universitet og Visa Research har udgivet et fortryk "Zether: Mod privatliv i smart kontrakters verden". Forfatterne foreslog for første gang en tilgang til at sikre anonymitet i account-baserede blockchains og præsenterede to varianter af smarte kontrakter: til konfidentielle (skjul balancer og overførselsbeløb) og anonyme (skjul modtager og afsender) transaktioner. Vi finder den foreslåede teknologi interessant og ønsker at dele, hvordan den fungerer, samt diskutere, hvorfor anonymitetsproblemet i account-baserede blockchains anses for at være meget komplekst, og om forfatterne har formået at løse det fuldt ud.

Om hvordan disse datamodeller fungerer

I UTXO-modellen består en transaktion af "inputs" og "outputs". Den direkte analog til "outputs" er sedlerne i din tegnebog: hver "output" har en bestemt værdi. Når du betaler for noget (danner en transaktion), bruger du en eller flere "outputs", som derefter bliver "inputs" i transaktionen, og blockchain markerer dem som brugte. Modtageren af din betaling (eller du selv, hvis du har brug for veksel) modtager ny-genererede "outputs". Dette kan skematisk skildres som:

Om anonymitet i account-baserede blockchains

Account-baserede blockchains fungerer omtrent som din bankkonto. De opererer kun med beløbet på din konto og overførselsbeløbet. Når du overfører et beløb fra din konto, brænder du ikke nogen "outputs"; netværket behøver ikke at huske, hvilke mønter der er brugt, og hvilke der ikke er. I den simpleste form reduceres kontrol af transaktionen til at kontrollere afsenderens signatur og beløbet på hans saldo:

Om anonymitet i account-baserede blockchains

Gennemgang af teknologien

Lad os tale om, hvordan Zether skjuler transaktionsbeløb, modtager og afsender. I beskrivelsen af dets funktioner vil vi bemærke forskellene mellem den fortrolige og anonyme version. Da det er meget lettere at sikre fortrolighed i account-baserede blokke, vil nogle af de begrænsninger, der pålægges anonymisering, ikke være relevante for den fortrolige version af teknologien.

Skjule saldoer og overførselsbeløb

Til kryptering af saldoer og overførselsbeløb i Zether anvendes en krypteringsskema ElGamal. Det fungerer på følgende måde. Når Alice ønsker at sende til Bob b mønter til adressen (hans offentlige nøgle) Y, vælger hun et tilfældigt tal r og krypterer beløbet:

Om anonymitet i account-baserede blockchains
hvor C — det krypterede beløb, D — en hjælpeværdi, der er nødvendig for at dekryptere dette beløb, G — et fast punkt på den elliptiske kurve, der giver den offentlige nøgle ved at multiplicere den hemmelige nøgle med det.

Når Bob modtager disse værdier, lægger han dem blot til sin krypterede saldo, hvilket gør denne ordning praktisk.

På tilsvarende måde trækker Alice de samme værdier fra sin saldo, kun i stedet for Y bruger hun sin offentlige nøgle.

Skjule modtager og afsender

Blanding af "udgange" i UTXO opstod allerede i kryptovalutaernes begyndelse og hjælper med at skjule afsenderen. Til dette vælger afsenderen tilfældige "udgange" i blockchainen ved overførsel og blander dem med sine egne. Derefter underskriver han "udgangene" med en ringunderskrift — en kryptografisk mekanisme, der giver mulighed for at overbevise kontrolleren om, at blandt de blandede "udgange" er der mønter fra afsenderen. De blandede mønter bruges naturligvis ikke.

Men for at skjule modtageren kan vi ikke generere falske "udgange". Derfor har hver "udgang" i UTXO sin unikke adresse, og den er kryptografisk forbundet med modtagerens adresse for disse mønter. I øjeblikket er der ingen måde at afsløre forbindelsen mellem den unikke adresse for "udgangen" og modtagerens adresse uden at kende dens hemmelige nøgler.

I account-baserede modeller kan vi ikke bruge engangsadresser (ellers ville det være en 'udgangs'-model). Derfor skal modtageren og afsenderen blandes blandt andre konti i blockchainen. For de konti, der blandes, trækkes der 0 kryptovaluta (eller tilføjes 0 — i tilfælde af at modtageren blandes), hvilket faktisk ikke ændrer deres reelle saldo.

Da både afsender og modtager altid har en fast adresse, opstår der behov for at bruge de samme grupper til at blande ved overførsler til de samme adresser. Det er nemmere at forstå ved et eksempel.

Lad os sige, at Alice ønsker at donere til Bobs velgørende organisation, men hun foretrækker, at denne overførsel forbliver anonym for en ekstern observatør. For at skjule sig i afsenderfeltet skriver hun også Adams og Athels konti. For at skjule Bob tilføjer hun Ben og Bills konti i modtagerfeltet. Ved den næste donation besluttede Alice at tilføje Alex og Amanda ved siden af sig selv, og Bruce og Benji ved siden af Bob. I dette tilfælde vil der ved analyse af blockchain kun være ét krydsende deltagerpar i de to transaktioner — Alice og Bob, hvilket de-anonymiserer disse transaktioner.

Om anonymitet i account-baserede blockchains

Transaktionsløb

Som vi allerede har nævnt, for at skjule sin saldo i account-baserede systemer krypterer brugeren sin saldo og overførselsbeløb. Samtidig skal han bevise, at saldoen på hans konto forbliver ikke-negativ. Problemet er, at når brugeren danner en transaktion, bygger han beviset på sin nuværende kontostand. Hvad sker der, hvis Bob sender en transaktion til Alice, og den bliver accepteret, før Alices transaktion? Så vil Alices transaktion blive betragtet som ugyldig, da beviset for saldoen blev bygget før modtagelsen af Bobs transaktion.

Om anonymitet i account-baserede blockchains

Den første løsning, der kommer til at tænke på i en sådan situation, er at fryse kontoen indtil transaktionen er gennemført. Men denne tilgang er ikke brugbar, da det, udover kompleksiteten ved at løse en sådan opgave i et distribueret system, ikke vil være klart, hvis det vil være, hvis vi skal blokere hvilken konto i et anonymt skema.

For at løse dette problem opdeler teknologien indgående og udgående transaktioner: forbruget af midler har en øjeblikkelig effekt på balance-statussen, mens indbetalinger har en forsinket effekt. Dette introducerer begrebet "æra" - en gruppe af blokke i fast størrelse. Den aktuelle "æra" bestemmes ved at dividere blokhøjden med gruppens størrelse. Ved at behandle en transaktion opdaterer netværket straks afsenderens balance, mens modtagerens midler akkumuleres. De akkumulerede midler er kun tilgængelige for modtageren af betalingen ved starten af en ny "æra".

Som et resultat kan brugeren sende transaktioner uanset hvor ofte midlerne tilgår (så længe det er inden for hans balance, naturligvis). Størrelsen af æraen bestemmes ud fra, hvor hurtigt blokke spreder sig gennem netværket, og hvor hurtigt en transaktion kommer ind i en blok.

Denne løsning fungerer godt i tilfælde af fortrolige overførsler, men med anonyme transaktioner, som vi vil se senere, skaber den alvorlige problemer.

Beskyttelse mod replay-angreb

I konto-baserede blokke er hver transaktion underskrevet med afsenderens private nøgle, hvilket overbeviser verificeren om, at transaktionen ikke er blevet ændret, og at den er skabt af ejer af nøglen. Men hvad hvis en angriber, der lytter til transmissionskanalen, opsnapper denne meddelelse og sender en identisk kopi? Verificeren vil bekræfte transaktionens underskrift og være overbevist om dens autenticitet, og netværket vil trække det samme beløb fra afsenderens balance igen.

Denne type angreb kaldes et replay-angreb. I UTXO-modellen er sådanne angreb ikke relevante, da angriberen vil forsøge at bruge brugte udgange, hvilket i sig selv ikke er gyldigt og afvises af netværket.

For at undgå dette indarbejdes et felt med tilfældige data i transaktionen, som kaldes nonce eller bare "salt". Ved gentagen forsendelse af transaktionen med "salt" ser verificeren, om denne nonce er blevet brugt tidligere, og hvis ikke, betragter han denne transaktion som gyldig. For ikke at gemme hele historien om brugernes nonces i blokken, antager man normalt, at den første transaktion har en nonce lig med nul og øger den med én enhed derefter. Netværket skal blot kontrollere, at nonce for den nye transaktion adskiller sig fra den tidligere med én enhed.

I en anonym overførselsordning opstår problemet med validering af nonce-værdierne for transaktioner. Vi kan ikke entydigt knytte nonce til afsenderens adresse, da dette åbenlyst ville de-anonymisere overførslen. Vi kan heller ikke tilføre en enhed til nonce for alle involverede konti, da dette kunne konfliktere med andre overførsler, der er under behandling.

Forfatterne af Zether foreslår at generere nonce kryptografisk — afhængig af "æraen". For eksempel:

Om anonymitet i account-baserede blockchains
Her x — afsenderens hemmelige nøgle, og Gepoch — en ekstra generator for æraen, der opnås ved at hash'e en streng af typen 'Zether + '. Nu ser det ud til, at problemet er løst — vi afslører ikke afsenderens nonce og blander os ikke i nonce for uafhængige deltagere. Men denne tilgang pålægger en alvorlig begrænsning: én konto kan ikke sende mere end én transaktion per "æra". Dette problem er desværre stadig uløst og gør i øjeblikket den anonyme version af Zether, efter vores mening, knap brugbar.

Sværhedsgraden ved null disclosure proofs

I UTXO skal afsenderen bevise overfor 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, har vi skrevet om i en af vores tidligere artikler). Og også underskrive "indgange" med en ringunderskrift for at bekræfte, at blandt de blandede mønter er der midler, der tilhører ham.

I den anonyme version af account-based blockchain bliver udtryk for bevis betydeligt mere komplekse. Afsenderen beviser, at:

  1. Det sendte beløb er positivt;
  2. Balancen forbliver ikke-negativ;
  3. Afsenderen har korrekt krypteret beløbene for overførsler (herunder nul);
  4. Balancen ændres kun for afsenderen og modtageren;
  5. Afsenderen ejer den hemmelige nøgle til sin konto og er faktisk til stede på listen over afsendere (blandt de blandede);
  6. Nonce, der bruges i transaktionen, er dannet korrekt.

For et så komplekst bevis bruger forfatterne en blanding Bulletproof (en af forfatterne deltog, forresten, i dens udvikling) og Sigma protocol, som kaldes Sigma-bullets. Det formelle bevis for en sådan påstand er en ret kompleks opgave, og det begrænser kraftigt antallet af dem, der ønsker at implementere teknologien.

Hvad ender vi med?

Efter vores mening kan Zether, der bringer privatliv til account-baserede blockchains, allerede bruges nu. Men i øjeblikket pålægger den anonyme version af teknologien betydelige begrænsninger for dens anvendelse, og dens kompleksitet påvirker implementeringen. Vær dog opmærksom på, at forfatterne kun har udgivet den for et par måneder siden, og måske vil nogen finde løsninger på de nuværende problemer. Det er netop sådan, videnskab fungerer.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster