Om anonymitet i kontobaserade blockkedjor

Vi har lĂ€nge varit intresserade av anonymitet inom kryptovalutor och försöker följa utvecklingen av teknologier inom detta omrĂ„de. I vĂ„ra artiklar har vi redan ingĂ„ende behandlat principerna för konfidentiella transaktioner i Monero, samt genomfört en jĂ€mförande översyn teknologier som finns inom detta fĂ€lt. Alla anonyma kryptovalutor idag bygger dock pĂ„ datamodellen föreslagen av Bitcoin — Unspent Transaction Output (UTXO). För anvĂ€ndarbaserade blockkedjor som Ethereum har de befintliga lösningarna för att implementera anonymitet och konfidentialitet (till exempel Mobius eller Aztec) försökt efterlikna UTXO-modellen i smarta kontrakt.

I februari 2019 presenterade en grupp forskare frÄn Stanford University och Visa Research utvecklarna av musikservicen Spotify. Den modifierade Spotify Lite ser ut som den fullstÀndiga versionen, men saknar mÄnga instÀllningar och tillÄter inte nedladdning av lÄtar för lyssning utan internetanslutning. ett preprint "Zether: Mot privatliv i vÀrlden av smarta kontrakt". För första gÄngen föreslog författarna en metod för att sÀkerstÀlla anonymitet i anvÀndarbaserade blockkedjor och presenterade tvÄ varianter av smarta kontrakt: för konfidentiella (dÀr saldon och belopp av transaktioner döljs) och anonyma (dÀr mottagare och avsÀndare döljs) transaktioner. Vi finner den föreslagna teknologin intressant och skulle vilja dela dess uppbyggnad, samt diskutera varför anonymitetsproblematiken i anvÀndarbaserade blockkedjor anses vara mycket komplex och om författarna har lyckats lösa den fullt ut.

Om dessa datamodellers struktur

I UTXO-modellen bestÄr en transaktion av "insats" och "utslag". En direkt analogi till "utslagen" Àr sedlarna i din plÄnbok: varje "utslag" har ett visst vÀrde. NÀr du betalar nÄgon (skapar en transaktion) anvÀnder du ett eller flera "utslag", som dÄ blir "insatser" i transaktionen, och blockkedjan markerar dem som anvÀnda. Samtidigt fÄr mottagaren av din betalning (eller du sjÀlv, om du behöver vÀxel) nygenererade "utslag". Schematisk kan detta illustreras sÄ hÀr:

Om anonymitet i kontobaserade blockkedjor

AnvÀndarbaserade blockkedjor fungerar ungefÀr som ditt bankkonto. De hanterar endast summan pÄ ditt konto och summan av överföringen. NÀr du överför ett belopp frÄn ditt konto förbrÀnner du inga "utslag"; nÀtverket behöver inte komma ihÄg vilka mynt som har anvÀnts och vilka som inte har anvÀnts. I det enklaste fallet bestÄr kontrollen av transaktionen av att verifiera avsÀndarens signatur och beloppet pÄ hans saldo:

Om anonymitet i kontobaserade blockkedjor

Analys av teknologin

Vi kommer nu att diskutera hur Zether döljer beloppet av transaktioner, mottagaren och avsÀndaren. Under beskrivningen av principerna för dess funktion kommer vi att pÄpeka skillnaderna mellan konfidentiella och anonyma varianter. Eftersom det Àr mycket enklare att sÀkerstÀlla konfidentialitet i kontobaserade blockkedjor, kommer vissa av begrÀnsningarna som ÄlÀggs genom anonymisering att vara irrelevanta för den konfidentiella versionen av teknologin.

Döljande av saldon och belopp pÄ överföringar

Zether anvÀnder ett krypteringsschema för att kryptera saldon och belopp pÄ överföringar ElGamal. Den fungerar pÄ följande sÀtt. NÀr Alice vill skicka Bob b mynt till adressen (hans offentliga nyckel) Y, vÀljer hon ett slumpmÀssigt tal Àr lika med noll. och krypterar beloppet:

Om anonymitet i kontobaserade blockkedjor
w C — det krypterade beloppet, D — ett hjĂ€lpvĂ€rde, nödvĂ€ndigt för att dekryptera detta belopp, G — en fast punkt pĂ„ den elliptiska kurvan, pĂ„ vilken den publika nyckeln genereras genom att multiplicera den hemliga nyckeln.

NÀr Bob fÄr dessa vÀrden lÀgger han enkelt till dem till sitt krypterade saldo, vilket gör att detta schema Àr praktiskt.

PÄ liknande sÀtt drar Alice bort samma vÀrden frÄn sitt saldo, men anvÀnder sin offentliga nyckel som Y .

Döljande av mottagare och avsÀndare

Blandning av "utgÄngar" i UTXO uppstod redan i kryptovalutornas gryning och hjÀlper till att dölja avsÀndaren. För detta vÀljer avsÀndaren vid en överföring slumpmÀssiga "utgÄngar" i blockkedjan och blandar dem med sina egna. DÀrefter signerar han "utgÄngarna" med en ringunderskrift - en kryptografisk mekanism som möjliggör för kontrollanten att övertygas om att det blandade "utgÄngarna" innehÄller avsÀndarens mynt. SjÀlva de blandade mynten spenderas sjÀlvklart inte.

För att dölja mottagaren kommer vi dock inte att kunna generera falska "utgÄngar". DÀrför har varje "utgÄng" i UTXO sin unika adress, och den Àr kryptografiskt kopplad till mottagarens adress för dessa mynt. För nÀrvarande finns det inget sÀtt att avslöja kopplingen mellan den unika adressen för "utgÄngen" och mottagarens adress utan att kÀnna till dess hemliga nycklar.

I account-based modeller kan vi inte anvĂ€nda engĂ„ngsadresser (annars blir det redan en "utgĂ„ngsmodell"). DĂ€rför mĂ„ste mottagaren och avsĂ€ndaren blandas bland andra konton i blockkedjan. Samtidigt dras det krypterade 0 mynt frĂ„n de blandade kontona (eller lĂ€ggs 0 till – i fallet med att blanda mottagaren), utan att förĂ€ndra deras verkliga saldo.

Eftersom bÄde avsÀndaren och mottagaren alltid har en konstant adress, uppstÄr hÀr behovet av att anvÀnda samma grupper för blandning vid överföringar till samma adresser. Det Àr enklare att illustrera med ett exempel.

Anta att Alice har beslutat att göra en donation till Bob's vĂ€lgörenhetsfond, men föredrar att denna överföring förblir anonym för en tredje parts observatör. DĂ„, för att dölja sig sjĂ€lv i avsĂ€ndarfĂ€ltet, skriver hon in ytterligare konton frĂ„n Adam och Adele. Och för att dölja Bob – i mottagarfĂ€ltet ytterligare konton frĂ„n Ben och Bill. Vid nĂ€sta donation bestĂ€mde sig Alice för att skriva in Alex och Amanda bredvid sig och Bruce och Benjen bredvid Bob. I det hĂ€r fallet, nĂ€r man analyserar blockkedjan, kommer det endast att finnas ett överlappande par av deltagare i dessa tvĂ„ transaktioner – Alice och Bob, vilket deanonimiserar dessa transaktioner.

Om anonymitet i kontobaserade blockkedjor

Transaktionslopp

Som vi redan har nÀmnt, för att dölja sitt saldo i account-based system, krypterar anvÀndaren sitt saldo och överföringsbelopp. Detta gÀller att han mÄste bevisa att saldot pÄ hans konto förblir icke-negativt. Problemet Àr att nÀr anvÀndaren skapar en transaktion, bygger han ett bevis angÄende sitt nuvarande konto. Men vad hÀnder om Bob skickar en transaktion till Alice, och den accepteras innan Alices skickade transaktion? DÄ kommer Alices transaktion att anses ogiltig, eftersom beviset för saldot byggdes innan Bobs transaktion accepterades.

Om anonymitet i kontobaserade blockkedjor

Den första lösningen som kommer i en sÄdan situation Àr att frysa kontot tills transaktionen har genomförts. Men denna metod Àr inte anvÀndbar, eftersom det förutom svÄrigheterna med att lösa en sÄdan uppgift i ett distribuerat system, i en anonym schema, kommer det att vara oklart vems konto som ska blockeras.

För att lösa detta problem skiljer teknologin mellan inkommande och utgĂ„ende transaktioner: utgifter pĂ„verkar kontobalansen omedelbart, medan inkomster har en fördröjd effekt. För detta introduceras begreppet "epoker" – grupper av block av fast storlek. Den aktuella "epoken" definieras av blockhöjden delad med gruppstorleken. NĂ€r en transaktion behandlas uppdaterar nĂ€tverket omedelbart avsĂ€ndarens balans, medan mottagarens medel samlas i en bunt. De insamlade medlen blir tillgĂ€ngliga för betalningsmottagaren först vid nĂ€sta "epok".

Som ett resultat kan anvÀndaren skicka transaktioner oberoende av hur ofta han fÄr medel (sÄ lÀnge hans balans tillÄter det, förstÄs). Storleken pÄ epoken bestÀms utifrÄn hur snabbt block sprids genom nÀtverket och hur snabbt en transaktion gÄr in i ett block.

Denna lösning fungerar bra i fall av konfidentiella överföringar, men i fallet med anonyma transaktioner, som vi senare kommer att se, skapar den allvarliga problem.

Skydd mot replay-attacker

I konto-baserade blockkedjor signeras varje transaktion med avsÀndarens privata nyckel, vilket övertygar verifieraren om att transaktionen inte har Àndrats och att den har skapats av Àgaren av denna nyckel. Men vad hÀnder om en illasinnad aktör som avlyssnar överföringskanalen fÄngar detta meddelande och skickar exakt samma andra? Verifieraren kommer att jÀmföra transaktionens signatur och vara övertygad om dess Àkthet, och nÀtverket kommer att debitera samma belopp frÄn avsÀndarens balans igen.

Denna attack kallas replay-attack. I UTXO-modellen Àr sÄdana attacker inte aktuella, eftersom den illasinnade aktören kommer att försöka anvÀnda spenderade utgÄngar, vilket i sig Àr ogiltigt och avvisas av nÀtverket.

För att förhindra detta inkluderas ett fÀlt med slumpdata i transaktionen, vilket kallas nonce eller helt enkelt "salt". Vid Ätersending av transaktionen med "salt" kontrollerar verifieraren om denna nonce har anvÀnts tidigare, och om inte, anser han att denna transaktion Àr giltig. För att undvika att lagra hela historiken av anvÀndarnas nonces i blockkedjan, accepteras vanligtvis den första transaktionen som noll, och sedan ökas den med en enhet. NÀtverket behöver bara kontrollera att den nya transaktionens nonce skiljer sig frÄn den tidigare med en enhet.

I den anonyma överföringsschemat uppstÄr problemet med validering av transaktionsnonce. Vi kan inte koppla nonce pÄ ett tydligt sÀtt till avsÀndarens adress eftersom det uppenbarligen skulle av-anonymisera överföringen. Vi kan inte heller öka nonce för alla deltagande konton, eftersom det kan skapa konflikter med andra överföringar som Àr under behandling.

Författarna till Zether föreslĂ„r att generera nonce kryptografiskt – beroende pĂ„ "epok". Till exempel:

Om anonymitet i kontobaserade blockkedjor
HĂ€r x – avsĂ€ndarens hemliga nyckel, och Gepoch – en extra generator för epoken, erhĂ„llen genom att hash av en strĂ€ng som ser ut som 'Zether + '. Nu verkar problemet vara löst – vi avslöjar inte avsĂ€ndarens nonce och ingriper inte i nonce för opartiska deltagare. Men denna metod innebĂ€r ett allvarligt begrĂ€nsning: ett konto kan inte skicka mer Ă€n en transaktion inom en "epok". Detta problem förblir tyvĂ€rr olöst och gör den anonyma versionen av Zether, enligt vĂ„r uppfattning, knappt anvĂ€ndbar.

SvÄrigheterna med noll-lÀckagebevis

I UTXO mÄste avsÀndaren bevisa för nÀtverket att de inte spenderar ett negativt belopp, annars blir det möjligt att generera nya mynt ur intet (varför detta Àr möjligt har vi skrivit om i en av de tidigare artiklar). Dessutom mÄste de signera "ingÄngarna" med en ringunderteckning för att bevisa att bland de blandade mynten finns medel som tillhör dem.

I den anonyma versionen av blockkedjan baserad pÄ konto blir uttrycken för bevis mycket mer komplexa. AvsÀndaren mÄste bevisa att:

  1. Det belopp som skickas Àr positivt;
  2. Saldo förblir icke-negativt;
  3. AvsÀndaren har korrekt krypterat överföringsbeloppen (inklusive nollbelopp);
  4. Saldo pÄ kontot Àndras endast för avsÀndaren och mottagaren;
  5. AvsÀndaren Àger den hemliga nyckeln till sitt konto och Àr verkligen med i avsÀndarlistan (bland de blandade);
  6. Nonce som anvÀnds i transaktionen Àr korrekt sammansatt.

För en sÄdan komplex bevisning anvÀnder författarna en blandning OövertrÀffad (en av författarna deltog för övrigt i dess skapande) och Sigma-protokoll, som kallas Sigma-bullets. Ett formellt bevis pÄ detta pÄstÄende Àr en ganska komplicerad uppgift, och det begrÀnsar kraftigt antalet som vill implementera teknologin.

Vad blir resultatet?

Enligt vÄr Äsikt kan Zether-delarna som bidrar till sekretess i konto-baserade blockkedjor absolut anvÀndas redan nu. Men för tillfÀllet innebÀr den anonyma versionen av teknologin allvarliga begrÀnsningar för dess anvÀndning, och dess komplexitet Àr en utmaning för implementeringen. Men man bör inte glömma att författarna slÀppte den för bara nÄgra mÄnader sedan, och kanske kommer nÄgon annan att hitta lösningar pÄ de problem som finns idag. Det Àr ju sÄ vetenskapen faktiskt utvecklas.

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