Πώς το κυβικό γράφημα μηδενικής γνώσης (Zk-Snarks) βελτιώνει το σύστημα Proof of Reserves της Binance
Κύρια στοιχεία
Τον Νοέμβριο του 2022, η Binance κυκλοφόρησε το σύστημα Proof of Reserves αξιοποιώντας κρυπτογράφηση Merkle Tree για να επιτρέψει στους χρήστες να επαληθεύσουν τα περιουσιακά στοιχεία τους.
Η Binance βελτίωσε το προϊόν της εφαρμόζοντας το κυβικό γράφημα μηδενικής (Zk-Snarks), ένα είδος απόδειξης μηδενικής γνώσης.
Οι χρήστες μπορούν πλέον να ελέγχουν ότι το συνολικό καθαρό υπόλοιπο κάθε λογαριασμού παραμένει σε μη αρνητικό επίπεδο και ότι όλα τα περιουσιακά στοιχεία των χρηστών ανήκουν στο συνολικό καθαρό υπόλοιπο των περιουσιακών στοιχείων των χρηστών που δηλώνει η Binance – με ιδιωτικό και ασφαλή τρόπο.
Ρίξτε μια ματιά στη νέα λύση proof-of-reserves της Binance. Συνδυάζοντας το κυβικό γράφημα μηδενικής γνώσης (Zk-Snarks) και τις πληροφορίες του Merkle tree, δίνει στους χρήστες έναν νέο και βελτιωμένο τρόπο επαλήθευσης της κατάστασης των αποθεματικών της Binance.
Τους τελευταίους μήνες, η ομάδα προγραμματιστών της Binance εργάζεται εντατικά για να αναπτύξει προηγμένες λύσεις proof-of-solvency. Αυτά τα εργαλεία είναι πλέον καθοριστικής σημασίας για τα κεντρικά ανταλλακτήρια κρύπτο εν μέσω της κρίσης εμπιστοσύνης που κατέλαβε τον κλάδο μετά την κατάρρευση της FTX. Τα κεφάλαια των χρηστών που αποθηκεύονται στην Binance υποστηρίζονται σε αναλογία 1:1, συν τα αποθεματικά, και το να βρεθεί ένας τρόπος να αποδειχθεί αυτό στο κοινό χωρίς προβλήματα, έχει γίνει ένα σημαντικό μέρος του σχεδίου της Binance να αποκαταστήσει την εμπιστοσύνη στον κλάδο.
Τον Νοέμβριο του 2022, θέσαμε σε λειτουργία το σύστημα proof-of-reserves που αξιοποιεί μια τεχνική κρυπτογράφησης με Merkle tree για να επιτρέπει στους χρήστες να επαληθεύουν τα περιουσιακά τους στοιχεία στην Binance. Παρόλο που αποτελεί εξέλιξη στην προσπάθεια της Binance να προωθήσει τη διαφάνεια των κεφαλαίων των χρηστών, ο αρχικός σχεδιασμός αυτής της λύσης παρουσίαζε δύο ελλείψεις:
Για να προστατευτεί το απόρρητο των χρηστών, οι κόμβοι Leaf του αποδεικτικού Merkle αντιπροσώπευαν το hash των περιουσιακών στοιχείων των χρηστών - έτσι, η ρίζα Merkle δεν ήταν δυνατόν να αποτυπώνει το άθροισμα των πληροφοριών υπολοίπου των κόμβων Leaf.
Η οντότητα τα αποθεματικά της οποίας επαληθεύονταν θα μπορούσε ενδεχομένως να προσθέσει ένα αρνητικό υπόλοιπο σε έναν εικονικό λογαριασμό κάπου στο Tree, ώστε να φαίνεται μικρότερο το σύνολο των υποχρεωτικών αποθεματικών. Το παρακάτω διάγραμμα από το ιστολόγιο του Vitalik Buterin παρουσιάζει ένα παράδειγμα ενός τέτοιου κακόβουλου Merkle tree (αν και, σε αυτήν την περίπτωση, η ρίζα αντικατοπτρίζει το άθροισμα των υπολοίπων όλων των κόμβων leaf, γεγονός που μπορεί να εγείρει ζητήματα απορρήτου).
Πλέον έχουμε μια λύση που μπορεί να αντιμετωπίσει αυτές τις ελλείψεις και να ενισχύσει έτσι το σύστημα proof-of-reserves της Binance. Βασιζόμενοι σε πρωτόκολλα απόδειξης μηδενικής γνώσης, το κυβικό γράφημα μηδενικής γνώσης (Zk-Snarks), μπορούμε να αποδείξουμε ότι:
Όλοι οι κόμβοι leaf του Merkle tree έχουν συνεισφέρει στο συνολικό υπόλοιπο κάθε περιουσιακού στοιχείου του χρήστη που δηλώνει η Binance.
Δεν υπάρχει χρήστης με αρνητικό συνολικό καθαρό υπόλοιπο (συνολική αξία σε USD όλων των περιουσιακών στοιχείων που διαθέτει ο χρήστης) που να περιλαμβάνεται στο Merkle tree.
Ένα σύνολο αρνητικών υπολοίπων και απόδοσης
Δεδομένου ότι η Binance παρέχει Margin, δάνειο κρύπτο και προϊόντα συναλλαγών Futures, το υπόλοιπο κάθε χρήστη για κάθε περιουσιακό στοιχείο σε κρύπτο μπορεί να περιλαμβάνει περιουσιακά στοιχεία και παθητικό. Το υπόλοιπο ενός χρήστη ενός συγκεκριμένου περιουσιακού στοιχείου κρύπτο μπορεί να είναι αρνητικό, αλλά το συνολικό καθαρό υπόλοιπό του όλων των περιουσιακών στοιχείων κρύπτο δεν θα πρέπει να είναι αρνητικό (καθώς όλα τα δάνεια είναι πλήρως εξασφαλισμένα).
Σε αυτό το υποθετικό σενάριο, έστω ότι η Μαρία είχε καταθέσει 10.000 BUSD στην Binance και στη συνέχεια χρησιμοποίησε 4.000 BUSD ως εξασφάλιση για να δανειστεί 2 BNB (με επιτόκιο 1 BNB = 1.000 BUSD, θεωρώντας ότι η Binance πάντα παρέχει υπερεξασφάλιση). Ο παρακάτω πίνακας δείχνει τον ισολογισμό της Μαρίας.
Αν η Μαρία κάνει συναλλαγή 1 BNB για 1000 BUSD με τον Πέτρο (ο οποίος επίσης έχει καταθέσει 10.000 BUSD), ο ισολογισμός τους θα έμοιαζε κάπως έτσι μετά την αντιστοίχιση της συναλλαγής:
Σε αυτήν την περίπτωση, το υπόλοιπο BNB της Μαρίας θα είναι -1, το οποίο δεν είναι έγκυρος κόμβος σε ένα Merkle tree και το οποίο καλύπτει μόνο ένα περιουσιακό στοιχείο: BNB. Ωστόσο, αν εξετάσουμε τα συνολικά καθαρά υπόλοιπα, η Μαρία διαθέτει ακόμα 10.000 BUSD.
Άλλη μια πρόκληση προέρχεται από την απόλυτη κλίμακα της βάσης χρηστών της Binance. Μια βιώσιμη λύση πρέπει να δημιουργεί αποδεικτικά στοιχεία χρήστη και αποδεικτικά zk-SNARK για δεκάδες εκατομμύρια χρήστες, ορισμένοι από τους οποίους μπορεί να διαθέτουν περισσότερα από 300 περιουσιακά στοιχεία κρύπτο στην πλατφόρμα μας.
Συνοπτικά, θέλουμε να αποδείξουμε τα ακόλουθα γεγονότα εντός εύλογου χρονικού διαστήματος:
Τα περιουσιακά στοιχεία κάθε χρήστη της Binance ανήκουν στο συνολικό υπόλοιπο του χρήστη που εμφανίζεται στο στιγμιότυπο οθόνης. Οι χρήστες μπορούν να επαληθεύσουν το συνολικό υπόλοιπο χρήστη με τα περιουσιακά στοιχεία που διατηρούνται σε διευθύνσεις που ελέγχει η Binance χρησιμοποιώντας έναν blockchain explorer (όπως το Etherscan για πορτοφόλια Ethereum ή το BscScan για τα πορτοφόλια BNB Chain).
Το συνολικό καθαρό υπόλοιπο κάθε χρήστη παραμένει σε μη αρνητικό επίπεδο, πράγμα που σημαίνει ότι η Binance δεν δημιούργησε εικονικούς λογαριασμούς με αρνητικό υπόλοιπο για να μειώσει με τεχνητό τρόπο το μέγεθος των επαληθευμένων αποθεμάτων μας.
Τι είναι το κυβικό γράφημα μηδενικής γνώσης (Zk-Snarks);
Πριν ασχοληθούμε με τις λεπτομέρειες της λύσης μας, πρέπει να κάνουμε μια σύντομη επισκόπηση του μηχανισμού απόδειξης μηδενικής γνώσης. Πρωτόκολλα μηδενικής γνώσης όπως το zk-SNARK επιτρέπουν σε ένα άτομο, τον χρήστη που αποδεικνύει, να αποδείξει σε ένα άλλο άτομο, τον επαληθευτή, ότι ο χρήστης που αποδεικνύει έκανε συγκεκριμένους υπολογισμούς με ακρίβεια με συγκεκριμένες εισροές με συγκεκριμένους περιορισμούς, χωρίς να αποκαλύψει τις εισροές. Ο υπολογισμός μπορεί να είναι χρονοβόρος, αλλά ο υποκείμενος μαθηματικός μηχανισμός μπορεί να βοηθήσει τον επαληθευτή να αξιολογήσει το αποδεικτικό γρήγορα και με ασφάλεια.
Ο χρήστης που αποδεικνύει (η Binance) αρχίζει να ορίζει ένα σύνολο περιορισμών του υπολογισμού που θέλει να αποδείξει. Οι περιορισμοί ορίζονται σε κυκλώματα που μπορούν να εκφραστούν σε μια γλώσσα προγραμματισμού υψηλότερου επιπέδου (στην περίπτωσή μας, μια έκδοση fork του gnark.)
Στη συνέχεια, ο χρήστης που αποδεικνύει πραγματοποιεί τον απαιτητικό υπολογισμό, κάνοντας hash στα ID όλων των χρηστών και τους ισολογισμούς, και δημιουργεί αποδεικτικό ότι ο υπολογισμός ικανοποιεί τους περιορισμούς που τέθηκαν προηγουμένως. Για να το κάνει αυτό, χρησιμοποιεί το υπολογιστικό ίχνος (witness) και δημόσιες ή ιδιωτικές εισροές.
Ο επαληθευτής (χρήστης) λαμβάνει το αποδεικτικό και το επαληθεύει με τη δημόσια εισροή του κυκλώματος για να βεβαιωθεί ότι ο υπολογισμός έχει εκτελεστεί με ακρίβεια και ότι πληρούνται όλοι οι περιορισμοί. Ο υπολογισμός επαλήθευσης απαιτεί εξαιρετικά λίγο χρόνο σε σύγκριση με τον χρόνο επαλήθευσης. Εάν ο χρήστης που αποδεικνύει δεν δημιουργήσει το αποδεικτικό στα προκαθορισμένα κυκλώματα, δεν μπορεί να δημιουργήσει έγκυρο αποδεικτικό για να περάσει την επαλήθευση.
Για να μάθετε περισσότερα για το κυβικό γράφημα μηδενικής γνώσης (Zk-Snarks), μπορείτε να ανατρέξετε σε αυτά τα άρθρα.
Η λύση μας
Το θεμελιώδες συστατικό στοιχείο της αναβαθμισμένης λύσης proof-of-reserves εξακολουθεί να είναι ένα Merkle tree. Για το παραπάνω παράδειγμα, θα μοιάζει με αυτό:
Εκτός από το Merkle Tree, διατηρούμε μια παγκόσμια κατάσταση που αντιπροσωπεύει μια λίστα με τα συνολικά καθαρά υπόλοιπα κάθε περιουσιακού στοιχείου που διατηρεί κάθε πελάτης της Binance.
Για να αποδείξουμε τα αποθεματικά μας, θα δημιουργήσουμε αποδεικτικό zk-SNARK για τη δημιουργία του Merkle Tree. Για το σύνολο υπολοίπων κάθε χρήστη – ένας κόμβος leaf του Merkle tree – το κύκλωμά μας θα διασφαλίζει ότι:
Το υπόλοιπο κάθε περιουσιακού στοιχείου αυτού του χρήστη περιλαμβάνεται στη λίστα κατάστασης που αναφέρεται παραπάνω.
Το συνολικό καθαρό υπόλοιπο του χρήστη δεν είναι αρνητικό.
Η αλλαγή της ρίζας του Merkle tree είναι έγκυρη μετά την ενημέρωση των πληροφοριών αυτού του χρήστη στο hash του κόμβου leaf.
Ανατρέξτε σε αυτήν την τεχνική προδιαγραφή και τον πηγαίο κώδικα για το κύκλωμα (περιορισμοί) για λεπτομέρειες σχετικά με την εφαρμογή.
Σε κάθε περίπτωση απόδειξης των αποθεματικών μας, θα δημοσιοποιούμε:
1. Το αποδεικτικό Merkle: τα hash για κάθε χρήστη (για τη Μαρία αντιπροσωπεύονται με μπλε κόμβους στην παραπάνω εικόνα).
2. Αποδεικτικά zk-SNARK και δημόσια εισροή (ένα hash της λίστας των συνολικών καθαρών υπολοίπων κάθε περιουσιακού στοιχείου και της ρίζας Merkle) του κυκλώματος για όλους τους χρήστες.
Με την επαλήθευση του αποδεικτικού Merkle, οι χρήστες μπορούν να βεβαιωθούν ότι ο ισολογισμός τους περιλαμβάνεται στη ρίζα του Merkle tree. Με την επαλήθευση του αποδεικτικού zk-SNARK, οι χρήστες μπορούν να βεβαιωθούν ότι η δομή του Merkle tree ανταποκρίνεται στους περιορισμούς που ορίζονται στο κύκλωμα.
Η ασφάλεια αυτής της λύσης βασίζεται σε μεγάλο βαθμό στη διαμόρφωση του κλειδιού απόδειξης και του κλειδιού επαλήθευσης. Εργαζόμαστε σε μια αποκεντρωμένη διαμόρφωση των κλειδιών. Όσον αφορά τις υπάρχουσες αποκεντρωμένες και αξιόπιστες λύσεις διαμόρφωσης, η διαμόρφωση του Ethereum αποτελεί ένα καλό παράδειγμα. Πλησιάζουμε στο να αποκτήσουμε μια λύση MPC για να κάνουμε τη διαμόρφωση μη εμπιστεύσιμη.
Απόδοση
Λαμβάνοντας υπόψη τον αριθμό των χρηστών της Binance, των οποίων τα υπόλοιπα θα πρέπει να συμπεριληφθούν, δεν υπάρχει τρόπος να επιτευχθεί ένα μοναδικό αποδεικτικό της δομής του Merkle tree που θα καλύπτει όλους τους χρήστες ταυτόχρονα. Μια λύση σε αυτό είναι ο χωρισμός των χρηστών σε ομάδες των 864 ατόμων η καθεμία, ώστε να υπάρχει ένα μικρότερης κλίμακας κύκλωμα και παράλληλες διαδικασίες απόδειξης.
Για μια ομάδα που αποτελείται από 864 χρήστες, όπου κάθε χρήστης κατέχει 350 διαφορετικά περιουσιακά στοιχεία, υποθέστε ότι το υπόλοιπο κάθε περιουσιακού στοιχείου βρίσκεται στο εύρος [0, 2^64-1]. Με έναν διακομιστή 32 πυρήνων 128 GB, ο χρόνος δημιουργίας αποδεικτικών zk είναι περίπου 110 δευτερόλεπτα και ο χρόνος επαλήθευσης αποδεικτικών είναι μικρότερος από 1 χιλιοστό του δευτερολέπτου.
Η Binance θα ξεκινήσει 1000 χρήστες που θα πραγματοποιήσουν τη διαδικασία αποδεικτικού ταυτόχρονα, ώστε να δημιουργήσει αποδεικτικά για όλους τους λογαριασμούς σε 2 ώρες. Το κόστος αυτού του διακομιστή απόδειξης για μία ώρα είναι περίπου 0,56 USD, οπότε το συνολικό κόστος για τη δημιουργία όλων των αποδεικτικών zk που καλύπτουν όλους τους χρήστες θα είναι περίπου 1000 USD.
Συμπέρασμα
Θα παρέχουμε την πρώτη επανάληψη της απόδειξης για τους χρήστες που δημιουργείται από αυτήν τη νέα λύση σε μια επόμενη ανακοίνωση απόδειξης αποθεμάτων. Επίσης, έχουμε διαθέσει τον επεξεργαστή δεδομένων χρήστη, το πρόγραμμα απόδειξης, το κύκλωμα και τον επαληθευτή μας δημόσια, έτσι ώστε κάθε κεντρικό ανταλλακτήριο που βασίζεται στο ίδιο μοντέλο με εμάς να μπορεί εύκολα να δημιουργήσει αποδεικτικά για τους χρήστες και τα περιουσιακά τους στοιχεία.
Ελπίζουμε ότι αυτό θα συμβάλει καθοριστικά στην προώθηση της διαφάνειας του κλάδου των ψηφιακών περιουσιακών στοιχείων σε νέο επίπεδο. Επίσης, επεξεργαζόμαστε την εφαρμογή της λύσης που αναφέρεται στο ιστολόγιο του Vitalik για να επιτύχουμε καλύτερη απόδοση, η οποία θα μας επιτρέψει να παρέχουμε αποδεικτικά πιο συχνά με χαμηλότερο κόστος.
Καθώς αυτή είναι η πρώτη έκδοση του zk-SNARK μας, ανυπομονούμε να λάβουμε τα σχόλια της κοινότητας για να συνεχίσουμε να βελτιώνουμε το σύστημα.