Acasă
Articole
Îmbunătățirea transparenței cripto cu dovezi Zero-Knowledge

Îmbunătățirea transparenței cripto cu dovezi Zero-Knowledge

Intermediar
Publicat Feb 10, 2023Actualizat Jan 5, 2024
10m

TL;DR

Dovezile Zero-Knowledge permit unei părți (un verificator) să determine validitatea unei instrucțiuni date de o altă parte (doveditorul) fără a cunoaște conținutul instrucțiunii. De exemplu, Binance poate dori să demonstreze că deține în totalitate fondurile utilizatorilor săi în rezerve fără a dezvălui soldurile individuale ale utilizatorilor.

O „Dovadă a rezervelor” ar putea fi construită cu un arbore Merkle care protejează împotriva falsificării datelor sale interne, în acest caz, soldurile totale nete ale clienților fiind pasive ale bursei față de utilizatorii săi. Acest lucru poate fi apoi combinat cu un zk-SNARK (un protocol de dovezi Zero-Knowledge), care asigură că utilizatorii pot verifica faptul că soldul lor face parte din soldul total net al activelor utilizatorilor fără a cunoaște soldurile individuale.

Introducere

În lumina evenimentelor de pe piață, securitatea activelor cripto în custodie a devenit un subiect foarte important. Utilizatorii blockchain apreciază foarte mult transparența și deschiderea, dar și confidențialitatea și secretizarea. Acest lucru creează o dilemă atunci când vine vorba de dovedirea rezervelor fondurilor deținute de custozi. Adesea, există un compromis între transparență, încredere și confidențialitatea datelor.

Cu toate acestea, lucrurile nu trebuie să stea astfel. Prin combinarea protocoalelor de dovezi Zero-Knowledge, cum ar fi zk-SNARKs cu arbori Merkle, putem găsi o soluție eficientă pentru toate părțile.

Ce sunt dovezile Zero-Knowledge?

Dovezile Zero-Knowledge permit unei părți (un verificator) să determine validitatea unei instrucțiuni date de o altă parte (doveditorul) fără a cunoaște conținutul instrucțiunii. Să luăm un exemplu simplu.

Aveți un seif blocat al cărui cod îl cunoașteți doar dvs. Seiful, de dragul exemplului, nu poate fi deblocat, forțat sau deschis în alt mod decât prin cunoașterea combinației. Acest lucru este confirmat, verificat și cunoscut și de prietenul dvs. care participă la experiment.

Îi spuneți prietenului că știți combinația, dar nu doriți să o dezvăluiți sau să deschideți seiful în prezența sa. În partea de sus a seifului există un orificiu prin care prietenul dvs. poate introduce un bilet. Pentru ca această situație să reprezinte o dovadă Zero-Knowledge, prietenul dvs. nu ar trebui să aibă informații suplimentare despre proces, în afară de instrucțiunea dată.

Îi puteți dovedi prietenului dvs. că știți combinația deschizând seiful, spunându-i ce este scris pe bilet și închizându-l din nou. În niciun moment nu ați dezvăluit, însă, combinația.

Pentru un exemplu mai avansat, consultați articolul Ce sunt dovezile Zero-Knowledge și cum afectează blockchainul?

De ce folosim dovezile Zero-Knowledge?

Dovezile Zero-Knowledge sunt potrivite pentru a dovedi ceva fără a dezvălui informații sau detalii sensibile. Ar putea fi utile dacă nu doriți să dezvăluiți informațiile dvs. financiare sau personale care ar putea fi utilizate în mod necorespunzător.

În cripto, puteți dovedi că dețineți o cheie privată fără a o dezvălui sau a semna digital ceva. O bursă de criptomonede poate dori, de asemenea, să dovedească starea rezervelor sale fără a dezvălui informații confidențiale despre utilizatorii săi, inclusiv soldurile conturilor lor individuale. 

Pentru aceste exemple (și multe altele), dovezile Zero-Knowledge ar folosi algoritmi care preiau o intrare de date și returnează „adevărat” sau „fals” ca rezultat. 

Definirea dovezilor Zero-Knowledge în termeni tehnici

Dovezile Zero-Knowledge, în termeni tehnici, urmează o structură specifică cu anumite criterii. Am acoperit deja rolurile doveditorului și verificatorului, dar mai există încă trei criterii pe care ar trebui să le acopere o dovadă Zero-Knowledge:

  1. Completitudine. Dacă afirmația este adevărată, un verificator va fi convins de dovada furnizată, fără a fi necesare alte informații sau verificări.

  2. Soliditate. Dacă instrucțiunea este falsă, un verificator nu va fi convins de adevărul unei instrucțiuni prin dovada furnizată.

  3. Zero-knowledge. Dacă instrucțiunea este adevărată, verificatorul nu află alte informații decât că instrucțiunea este adevărată.

Ce este zk-SNARK?

Un zk-SNARK (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) este un protocol de demonstrare care urmează principiile zero-knowledge subliniate anterior. Cu un zk-SNARK, puteți dovedi că cunoașteți valoarea hashed inițială (despre care vom discuta mai jos) fără a dezvălui care este aceasta. De asemenea, puteți dovedi validitatea unei tranzacții fără a dezvălui informații despre sumele, valorile sau adresele specifice implicate.

zk-SNARKs sunt utilizate și discutate frecvent în lumea blockchain și a criptomonedelor. Dar s-ar putea să vă întrebați de ce s-ar deranja cineva să folosească un zk-SNARK când ar putea folosi o metodă simplă de pereche de chei publice și private pentru a securiza informațiile. În acest caz, nu am putea implementa demonstrația matematică pentru a ne asigura că nu sunt incluse solduri negative și suma arborelui Merkle. 

În cazul rezervelor unei burse, dorim să dovedim că deținem soldurile clienților într-un raport de 1:1 fără ca identificatorii și soldurile fiecărui cont să fie făcute publice. În plus, tehnologia zk-SNARK face falsificarea datelor și mai puțin probabilă.

Ce este un arbore Merkle?

Prezentarea fondurilor însumate ale conturilor utilizatorilor Binance necesită lucrul cu un set mare de date. O modalitate de a prezenta criptografic această cantitate mare de date este prin utilizarea unui arbore Merkle. O cantitate mare de informații poate fi stocată eficient în acesta, iar natura sa criptografică face ca integritatea sa să fie ușor de verificat.

Funcții hash

Pentru a codifica succint o intrare, un arbore Merkle depinde de utilizarea funcțiilor hash. Hashingul se referă la procesul de generare a unei ieșiri de dimensiune fixă dintr-o intrare de dimensiune variabilă. Cu alte cuvinte, atunci când o intrare de orice lungime este supusă hashingului printr-un algoritm, va produce o ieșire criptată cu lungime fixă.

Atât timp cât intrarea rămâne aceeași, ieșirea va fi identică. Aceasta înseamnă că putem prelua cantități uriașe de date tranzacționale și le putem transforma într-o ieșire care poate fi gestionată. Ieșirea va fi radical diferită dacă orice informație este modificată în intrare.

De exemplu, am putea lua conținutul a 100 de cărți și l-am introduce în funcția hash SHA-256. Acest lucru ar avea un rezultat de genul:

801a9be154c78caa032a37b4a4f0747f1e1addb397b64fa8581d749d704c12ea

Dacă am schimba apoi un singur caracter al intrării (cele 100 de cărți), hash-ul ar fi complet diferit, astfel:

abc5d230121d93a93a25bf7cf54ab71e8617114ccb57385a87ff12872bfda410

Aceasta este o proprietate importantă a funcțiilor hash, deoarece permite verificarea ușoară a acurateței datelor. Dacă cineva repetă procesul de hashing al acelorași 100 de cărți folosind algoritmul SHA-256, va obține exact același hash ca rezultatul. Dacă rezultatul este diferit, putem afirma cu certitudine că intrarea a fost modificată. Acest lucru înseamnă că nu este necesar să verificați individual sau manual diferențele dintre intrări, ceea ce poate necesita multă muncă.

Arborii Merkle în lumea criptomonedelor

La stocarea datelor tranzacțiilor pe un blockchain, fiecare nouă tranzacție este transmisă printr-o funcție hash, care generează valori hash unice. Imaginați-vă că avem opt tranzacții (de la A la H) pe care le supunem individual hashingului pentru a obține ieșirile hashed. Acestea sunt ceea ce se numesc nodurile frunzelor Merkle. În imaginea de mai jos, puteți vedea valoarea hash unică a fiecărei litere: hA pentru A, hB pentru B, hC pentru C etc.

Apoi putem lua perechi de ieșiri hashed, le putem combina și obține o nouă ieșire hashed. Hash-urile hA și hB supuse hashingului împreună, de exemplu, ne-ar oferi o nouă ieșire hashed hAB cunoscută sub numele de ramură Merkle. Rețineți că de fiecare dată când este generată o nouă ieșire, aceasta are o lungime și o dimensiune fixă, care depinde de funcția hash utilizată.

Acum, avem datele a două tranzacții (de exemplu, A și B) combinate într-un singur hash (hAB). Rețineți că, dacă schimbăm orice informație din A sau B și repetăm procesul, rezultatul nostru hashed hAB ar fi complet diferit.

Procesul continuă atât timp cât combinăm noi perechi de hash-uri pentru a le supune hashingului din nou (vedeți imaginea de mai jos). Supunem hAB și hCD hashingului pentru a obține un hash hABCD unic și facem același lucru cu hEF și hGH pentru a obține hEFGH. În cele din urmă, primim un singur hash reprezentând ieșirile hashed ale tuturor hash-urilor tranzacțiilor anterioare. Cu alte cuvinte, ieșirea hashed hABCDEFGH reprezintă toate informațiile anterioare acesteia.

Graficul afișat mai sus se numește arbore Merkle, iar rezultatul hashed hABCDEFGH este rădăcina Merkle. Folosim rădăcinile Merkle în anteturile blocurilor, deoarece acestea rezumă criptografic toate datele tranzacției într-un bloc într-un mod succint. De asemenea, putem verifica rapid dacă datele au fost modificate sau schimbate în cadrul blocului.

Limitările arborilor Merkle

Să revenim la exemplul nostru de rezerve CEX. Un CEX dorește să demonstreze că deține 1:1 toate activele clienților săi și construiește un arbore Merkle care supune hashingului UID-urile clienților săi cu deținerile lor nete de active (compensarea activelor și pasivelor) la nivel de token. După lansare (și semnare pentru a dovedi proprietatea asupra rădăcinii Merkle furnizate), un utilizator individual nu ar avea cum să verifice dacă arborele Merkle este valid fără a accesa toate intrările sale.

Este posibil ca o bursă să fi omis să includă unele intrări. De asemenea, ar putea crea conturi false cu solduri negative pentru a modifica pasivul total. De exemplu, deși activele clienților pot totaliza 1.000.000 USD, ar putea fi adăugat un cont fals cu un sold de -500.000 USD. Acest lucru ar crea o țintă de rezerve de doar 500.000 USD.

Cazul pentru dovada rezervelor este diferit de rădăcina Merkle a unui bloc, deoarece utilizatorii pot vedea toate tranzacțiile pe care le conține un bloc într-un explorator blockchain. Cu toate acestea, un CEX nu va dori să dezvăluie soldul fiecărui cont din motive de securitate și de confidențialitate a datelor. Nici clienții nu ar fi mulțumiți că soldurile contului lor sunt făcute publice. În acest caz, CEX nu poate dovedi că soldurile utilizatorilor însumează totalul corect fără a face vizibile soldurile altor utilizatori.

O soluție pe care bursele o pot lua în considerare este utilizarea unui auditor terț de încredere. Auditorul poate verifica conturile individuale și rezervele înainte de a atesta în final validitatea rădăcinii Merkle furnizate. Cu toate acestea, pentru utilizatori, această metodă necesită încredere în auditor și în datele utilizate pentru audit. Nu trebuie să vă bazați pe o terță parte atunci când puteți avea încredere în date.

Combinarea zk-SNARKs cu arborii Merkle

Problema de mai sus este un caz perfect pentru utilizarea zk-SNARKs. Dorim să demonstrăm că rezervele acoperă în totalitate pasivele utilizatorilor și nu sunt falsificate. Cu toate acestea, din motive de confidențialitate și securitate, nu dorim să arătăm verificatorului componența exactă a soldurilor și rezervelor utilizatorilor. 

Folosind un zk-SNARK, o bursă cripto poate dovedi că toate seturile de solduri ale nodurilor de frunze ale arborelui Merkle (adică soldurile conturilor de utilizator) contribuie la soldul total al activelor utilizatorului pe care bursa susține că îl deține. Fiecare utilizator poate verifica cu ușurință că nodul frunzei sale a fost inclus în proces. zk-SNARK asigură, de asemenea, că orice arbore Merkle generat nu conține utilizatori cu un sold total negativ al activelor nete (ceea ce ar implica falsificarea datelor, deoarece toate împrumuturile sunt supragarantate). De asemenea, este utilizat un calcul al stării globale a Binance, adică o listă a soldului net total al fiecărui activ pe care fiecare client Binance îl deține.

Să vedem cum abordează Binance această situație. Pentru început, Binance definește constrângerile calculului pe care dorește să-l demonstreze și le definește sub forma unui circuit programabil. Mai jos este setul de trei constrângeri pe care Binance le folosește în modelul său. 

Pentru setul soldului fiecărui utilizator (nodul frunzelor arborelui Merkle), circuitul nostru asigură că:

  1. Soldurile activelor unui utilizator sunt incluse în calculul sumei soldurilor totale nete ale utilizatorilor pe Binance.

  2. Soldul net total al utilizatorului este mai mare decât sau egal cu zero.

  3. Modificarea rădăcinii arborelui Merkle este validă (adică, nu se utilizează informații falsificate) după actualizarea informațiilor unui utilizator la hash-ul nodului frunză.

Binance poate genera apoi o dovadă zk-SNARK pentru construcția arborelui Merkle conform circuitului. Acest lucru presupune ca bursa să execute calculul laborios al hashingului ID-urilor și soldurilor utilizatorilor, asigurându-se în același timp că dovada trece de constrângeri.

Un verificator va examina dovada (și codul său open source lansat public) pentru a se convinge că calculul este executat cu toate constrângerile îndeplinite. Calculul de verificare durează foarte puțin în comparație cu durata demonstrației.

La fiecare lansare a Proof of Reserves, bursa va publica:

1. Dovada Merkle pentru fiecare utilizator.

2. Dovada zk-SNARK și intrarea publică (un hash al listei soldului net total al fiecărui activ și rădăcina Merkle) a circuitului pentru toți utilizatorii.

Părțile interesate pot verifica dovada Merkle, asigurându-se că soldurile lor individuale au contribuit la rădăcina arborelui Merkle. Ele pot verifica, de asemenea, dovada zk-SNARK pentru a se asigura că construcția arborelui Merkle îndeplinește constrângerile definite în circuit. Pentru o explicație mai detaliată a soluției zk-SNARK și a performanței acesteia, consultați blogul nostru Cum îmbunătățesc zk-SNARKs sistemul de dovezi ale rezervelor Binance.

Gânduri de încheiere

Zk-SNARKs oferă tehnologia necesară pentru a asigura atât integritatea datelor, cât și confidențialitatea în același timp. Aplicația sa pentru dovedirea rezervelor și creșterea transparenței CEX ar trebui să contribuie la construirea încrederii în industria blockchain. Mulți oameni așteptau de mult timp o astfel de dezvoltare și aceasta vine într-un moment crucial pentru CEX-uri.

Aceasta este prima noastră versiune de zk-SNARK și așteptăm cu nerăbdare să primim feedbackul comunității, astfel încât să putem continua să îmbunătățim sistemul.

Materiale suplimentare