Hem
Artiklar
FörbÀttra kryptotransparensen med nollkunskapsbevis

FörbÀttra kryptotransparensen med nollkunskapsbevis

Avancerad
Publicerad Feb 10, 2023Uppdaterad Jan 5, 2024
10m

TL;DR

Ett nollkunskapsbevis gör det möjligt för en part (en som verifierar) att bestÀmma giltigheten av ett uttalande frÄn en annan part (den som tillhandahÄller) utan nÄgon kunskap om uttalandets innehÄll. Binance kanske till exempel vill bevisa att de helt har backat sina anvÀndares tillgÄngar i reserver, utan att avslöja alla enskilda anvÀndarbalanser.

Ett ”bevis pĂ„ reserver” kan konstrueras med ett Merkle-trĂ€d som skyddar mot förfalskning av dess interna data, i detta fall dess totala nettokundbalans, som börsens skulder till sina anvĂ€ndare. Detta kan sedan kombineras med ett zk-Snark (ett protokoll för nollkunskapsbevis) som sĂ€kerstĂ€ller att anvĂ€ndarna kan kontrollera att deras balans utgör en del av anvĂ€ndarnas totala nettotillgĂ„ngsbalans, utan att kĂ€nna till individuella balanser.

Introduktion

PÄ grund av tidigare marknadshÀndelser har sÀkerheten för kryptotillgÄngar i förvar blivit ett viktigt Àmne. BlockkedjeanvÀndare vÀrdesÀtter transparens och öppenhet, men stöder ocksÄ integritet och konfidentialitet. Detta skapar ett dilemma nÀr du bevisar reserver av tillgÄngar som innehas av förvaltare. Ofta finns en avvÀgning mellan transparens, förtroende och datakonfidentialitet.

Detta behöver dock inte alltid vara fallet. Genom att kombinera protokoll för nollkunskapsbevis som zk-Snarks med Merkle-trÀd kan vi hitta en effektiv lösning för alla parter.

Vad Àr nollkunskapsbevis?

Ett nollkunskapsbevis gör det möjligt för en part (en som verifierar) att bestÀmma giltigheten av ett uttalande frÄn en annan part (den som tillhandahÄller) utan nÄgon kunskap om uttalandets innehÄll. HÀr följer ett enkelt exempel:

Du har ett lÄst kassaskÄp som bara du kan koden till. KassaskÄpet kan, i detta exempel, inte brytas upp eller öppnas pÄ nÄgot annat sÀtt Àn genom att kÀnna till kodens kombination. Detta faktum Àr Àven etablerat, verifierat och kÀnt av din vÀn som deltar i experimentet.

Du sÀger till din vÀn att du kan kombinationen, men du vill inte ge bort den eller öppna kassaskÄpet framför hen. OvanpÄ kassaskÄpet finns ett hÄl som din vÀn kan sticka in en lapp igenom. För att göra detta till ett nollkunskapsbevis, bör din vÀn inte ha nÄgon extra information om processen annat Àn det givna uttalandet.

Du kan bevisa för din vÀn att du kÀnner till kombinationen genom att öppna kassaskÄpet, berÀtta för hen vad som skrevs pÄ lappen och stÀnga kassaskÄpet igen. Du avslöjade dock aldrig kombinationen till hen.

För ett mer avancerat exempel kan du lÀsa vÄr artikel Vad Àr nollkunskapsbevis och hur pÄverkar det blockkedjan?

Varför ska jag anvÀnda nollkunskapsbevis?

Nollkunskapsbevis Àr lÀmpliga för att bevisa nÄgot utan att avslöja kÀnslig information eller uppgifter. Detta kan vara fallet om du inte vill avslöja din ekonomiska eller personliga information, som skulle kunna anvÀndas pÄ ett olÀmpligt sÀtt.

Inom krypto kan du bevisa att du Àger en privat nyckel utan att avslöja den eller digitalt signera nÄgot. En kryptovalutabörs kanske ocksÄ vill bevisa statusen för sina reserver utan att avslöja konfidentiell information om sina anvÀndare, inklusive deras individuella kontobalanser. 

För dessa exempel (och mĂ„nga andra) skulle ett nollkunskapsbevis anvĂ€nda algoritmer som tar en datainmatning och returnerar ”sant” eller ”falskt” som utdata. 

Definiering av nollkunskapsbevis i tekniska termer

I tekniska termer följer ett nollkunskapsbevis en specifik struktur med vissa kriterier. Vi har redan gÄtt igenom rollerna för den som tillhandahÄller och verifierar, men det finns ocksÄ tre kriterier som ett nollkunskapsbevis bör omfatta:

  1. FullstÀndighet. Om uttalandet Àr sant, kommer den som verifierar att övertygas av det tillhandahÄllna beviset, utan behov av nÄgon annan information eller verifiering.

  2. Sundhet. Om uttalandet Àr falskt kommer den som verifierar inte att övertygas om ett uttalandes sanning genom det tillhandahÄllna beviset.

  3. Nollkunskap. Om uttalandet Àr sant lÀr sig den som verifierar inte nÄgon annan information Àn att uttalandet Àr sant.

Vad Àr ett zk-Snark?

Ett zk-Snark (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) Àr ett bevisprotokoll som följer de nollkunskapsprinciper som tidigare beskrivits. Med ett zk-Snark kan du bevisa att du kÀnner till det ursprungliga hashade vÀrdet (gÄ igenom nedan) utan att avslöja vad det Àr. Du kan ocksÄ bevisa giltigheten av en transaktion utan att avslöja nÄgon information om specifika belopp, vÀrden eller adresser som Àr inblandade.

Zk-Snarks anvÀnds och diskuteras ofta inom blockkedje- och kryptovalutavÀrlden. Men du kanske undrar varför nÄgon skulle bry sig om att anvÀnda ett zk-Snark nÀr det gÄr att anvÀnda en enkel metod med ett offentligt och privat nyckelpar för att sÀkra informationen. Vi skulle dock inte kunna implementera det matematiska beviset för att sÀkerstÀlla att inga negativa balanser ingÄr, eller summan av Merkle-trÀdet. 

NÀr det gÀller en börs reserver vill de bevisa ett 1:1-stöd av kundernas balanser, utan att identifierare och balanser för varje konto offentliggörs. Dessutom gör tekniken med zk-Snarks förfalskning av data Ànnu mer osannolik.

Vad Àr ett Merkle-trÀd?

För att presentera summerade tillgÄngar för Binance-anvÀndares konton krÀvs det att du arbetar med en stor datamÀngd. Ett sÀtt att presentera denna stora mÀngd data kryptografiskt Àr att anvÀnda ett Merkle-trÀd. En stor mÀngd information kan lagras effektivt i det och dess kryptografiska natur gör dess integritet lÀtt verifierbar.

Hashfunktioner

För att kortfattat koda en inmatning mÄste ett Merkle-trÀd anvÀnda sig av hashfunktioner. Kort sagt Àr hashning processen att generera utdata med fast storlek frÄn indata av variabel storlek. NÀr indata av vilken lÀngd som helst hashas genom en algoritm, kommer de med andra ord att producera krypterade utdata med fast lÀngd.

SÄ lÀnge indata förblir desamma kommer utdata ocksÄ att bli det. Det betyder att vi kan ta enorma mÀngder transaktionsdata och hasha de till hanterbar utdata. Utdata kommer att vara radikalt annorlunda om nÄgon information Àndras i indata.

Vi kan till exempel ta innehÄllet i 100 böcker och mata in dem i hashfunktionen SHA-256. Det skulle dÄ ge utdata som ser ut ungefÀr sÄ hÀr:

801a9be154c78caa032a37b4a4f0747f1e1addb397b64fa8581d749d704c12ea

Om vi sedan Àndrade ett enda tecken för vÄra indata (de 100 böckerna), skulle hashen bli helt annorlunda och se ut sÄ hÀr:

abc5d230121d93a93a25bf7cf54ab71e8617114ccb57385a87ff12872bfda410

Detta Àr en viktig egenskap hos hashfunktioner, eftersom de möjliggör enkel verifiering av hur noggranna data Àr. Om nÄgon replikerar processen med hashning av samma 100 böcker med algoritmen SHA-256, kommer de att fÄ exakt samma hash som utdata. Om utdata Àr annorlunda kan vi med sÀkerhet bekrÀfta att indata Àndrades. Det betyder att det inte finns nÄgot behov av att individuellt eller manuellt kontrollera om det finns skillnader mellan olika indata, vilket kan krÀva massor av jobb.

Merkle-trÀd i kryptovalutavÀrlden

Vid lagring av transaktionsdata pÄ en blockkedja skickas varje ny transaktion via en hashfunktion, som genererar unika hashvÀrden. FörestÀll dig att vi har Ätta transaktioner (A till H) som vi individuellt hashar för att fÄ deras hashade utdata. Detta Àr vad vi kallar för Merkle-bladnoder. PÄ bilden nedan kan du se det unika hashvÀrdet för varje bokstav: hA för A, hB för B, hC för C, etc.

Vi kan sedan ta olika par av hashade utdata och kombinera dem för att fÄ nya hashade utdata. Hasharna av hA och hB hashade tillsammans skulle till exempel ge oss nya hashade utdata av hAB, kÀnd som en Merkle-gren. Observera att varje gÄng nya utdata genereras fÄr de en fast lÀngd och storlek, enligt den hashfunktion som anvÀnds.

Nu har vi data frÄn tvÄ transaktioner (alltsÄ A och B) kombinerade i en hash (hAB). Observera att om vi Àndrar nÄgon information frÄn A eller B och upprepar processen, skulle vÄr hashade utdata hAB bli helt annorlunda.

Processen fortsÀtter nÀr vi kombinerar nya par av hashar för att hasha dem igen (se bilden nedan). Vi hashar hAB med hCD för att fÄ den unika hashen hABCD och gör samma sak med hEF och hGH för att fÄ hEFGH. I slutÀndan fÄr vi en enda hash som representerar hashade utdata frÄn alla tidigare transaktioners hashar. VÄr hashade utdata hABCDEFGH representerar med andra ord all information som kom före den.

Grafen som visas ovan kallas för ett Merkle-trÀd och vÄra hashade utdata hABCDEFGH Àr Merkle-roten. Vi anvÀnder Merkle-rötter i block-titlar, eftersom de kryptografiskt sammanfattar alla transaktionsdata i ett block pÄ ett kortfattat sÀtt. Vi kan ocksÄ snabbt verifiera om nÄgra data har manipulerats eller Àndrats inom blocket.

Merkle-trÀdens begrÀnsningar

LÄt oss ÄtervÀnda till vÄrt exempel med CEX-reserver. En CEX vill bevisa ett 1:1-stöd av alla sina kunders tillgÄngar och bygger ett Merkle-trÀd som hashar ihop sina kund-anvÀndar-id:n med sina nettotillgÄngsinnehav (rÀknat efter tillgÄngar och skulder) pÄ en tokennivÄ. NÀr den har frislÀppts (och undertecknats för att bevisa ÀganderÀtten över Merkle-roten), skulle en enskild anvÀndare inte ha nÄgot sÀtt att kontrollera om Merkle-trÀdet Àr giltigt utan att komma Ät alla dess indata.

En börs kan ha missat att ta med vissa indata. Den kan ocksĂ„ skapa falska konton med negativa balanser för att Ă€ndra den totala skulden. Även om kundernas tillgĂ„ngar kan uppgĂ„ till 1 000 000 dollar, kan till exempel ett falskt konto lĂ€ggas till med en balans pĂ„ minus 500 000 dollar. Detta skulle skapa ett reservmĂ„l pĂ„ endast 500 000 dollar.

Fallet med bevis pÄ reserver skiljer sig frÄn ett blocks Merkle-rot, eftersom anvÀndarna kan se alla transaktioner som ett block innehÄller pÄ en blockkedjeutforskare. En CEX vill dock inte avslöja alla kontobalanser pÄ grund av sÀkerhets- och datasekretesskÀl. Kunderna skulle inte heller gilla att deras kontobalanser offentliggjordes. I detta fall kan CEX:en inte bevisa att anvÀndarbalanser uppgÄr till rÀtt summa utan att göra andra anvÀndarbalanser synliga.

En lösning som börser kan övervÀga Àr att anvÀnda en betrodd tredjepartsrevisor. Revisorn kan kontrollera de enskilda kontona och reserverna innan denne slutligen intygar giltigheten av den tillhandahÄllna Merkle-roten. För anvÀndarna krÀver dock denna metod förtroende för revisorn och de data som anvÀnds för revisionen. Du behöver inte lita pÄ en tredje part nÀr du kan lita pÄ data.

Kombinering av zk-Snarks och Merkle-trÀd

OvanstÄende problem Àr ett perfekt exempel pÄ dÀr zk-Snarks kan anvÀndas. Vi vill bevisa att reserverna helt tÀcker anvÀndarnas skulder och inte har förfalskats. Av sekretess- och sÀkerhetsskÀl vill vi dock inte visa verifieraren den exakta sammansÀttningen av anvÀndarnas balanser och reserver. 

Genom att anvÀnda en zk-Snarks kan ett kryptobörs bevisa att alla balansuppsÀttningarna för Merkle-trÀdbladsnoder (det vill sÀga anvÀndarkontobalanser) bidrar till börsens pÄstÄdda totala balans frÄn anvÀndartillgÄngarna. Varje anvÀndare kan enkelt komma Ät sin bladnod som inkluderats i processen. Zk-Snarks sÀkerstÀller ocksÄ att alla Merkle-trÀd som genereras inte innehÄller anvÀndare med en negativ total nettotillgÄngsbalans (vilket skulle innebÀra förfalskning av data, eftersom alla lÄn Àr översÀkerstÀllda). Dessutom anvÀnds en berÀkning av Binances globala tillstÄnd, det vill sÀga en lista över den totala nettobalansen för varje tillgÄng som varje Binance-kund innehar.

LÄt oss ta en titt pÄ hur Binance tar sig an situationen. Till att börja med definierar Binance begrÀnsningarna för berÀkningen som de vill bevisa och definierar dessa som en programmerbar krets. Nedan följer uppsÀttningen av tre begrÀnsningar som Binance anvÀnder i sin modell. 

För varje anvÀndares balansuppsÀttning (Merkle-trÀdbladsnoder) sÀkerstÀller vÄr krets att:

  1. En anvÀndares tillgÄngsbalans ingÄr i berÀkningen av summan av den totala nettoanvÀndarbalansen hos Binance.

  2. Den totala nettobalansen för anvÀndaren Àr större Àn eller lika med noll.

  3. Ändringen av Merkle-trĂ€droten Ă€r giltig (det vill sĂ€ga inte anvĂ€nder förfalskad information) efter uppdateringen av en anvĂ€ndares information till bladnodens hash.

Binance kan sedan generera ett bevis för zk-Snark för Merkle-trÀdets konstruktion enligt kretsen. Detta innebÀr att börsen utför den tunga berÀkningen med att hasha anvÀndarnas id och balanser, samtidigt som beviset gÄr igenom begrÀnsningarna.

En kontrollör kommer att undersöka beviset (och dess offentligt frislÀppta öppna kÀllkod) för att övertygas om att berÀkningen utförs med alla begrÀnsningar uppfyllda. VerifieringsberÀkningen tar extremt kort tid jÀmfört med bevistiden.

Vid varje frislÀppande av bevis pÄ reserver publicerar börsen:

1. Merkle-beviset för varje anvÀndare.

2. Bevisen för zk-Snarks och offentliga indata (en hash av listan över den totala nettobalansen för varje tillgÄng och Merkle-rot) av kretsen för alla anvÀndare.

De som Àr intresserade kan verifiera Merkle-beviset och sÀkerstÀlla att dess individuella balanser bidrog till Merkle-trÀdroten. De kan ocksÄ verifiera beviset för zk-Snark för att sÀkerstÀlla att konstruktionen av Merkle-trÀdet uppfyller de begrÀnsningar som definieras i kretsen. LÀs bloggen SÄ förbÀttrar zk-Snarks Binances bevis pÄ reserver-system för en mer detaljerad förklaring av lösningen med zk-Snarks och dess prestanda.

Sammanfattningsvis

ZK-Snarks tillhandahÄller den teknik som behövs för att sÀkerstÀlla bÄde datasekretess och integritet pÄ samma gÄng. Dess förmÄga att bevisa reserver och öka CEX-transparensen bör hjÀlpa till att bygga förtroende för blockkedjebranschen. MÄnga har vÀntat lÀnge pÄ en utveckling som denna och den kommer vid en avgörande tidpunkt för CEX:er.

Detta Àr den första versionen av vÄr zk-Snark och vi ser fram emot att fÄ feedback frÄn communityn sÄ att vi kan fortsÀtta förbÀttra systemet.

Mer information