Wichtigste Erkenntnisse
Im November 2022 veröffentlichte Binance sein Proof of Reserves-System, das Merkle-Baum-Kryptografie nutzt, um es Benutzern zu ermöglichen, ihre Bestände zu verifizieren.
Binance hat seine Lösung jetzt durch die Implementierung von zk-SNARKs verbessert, einer Form von Zero-Knowledge-Proof.
Benutzer können nun auf private und sichere Weise überprüfen, ob der Gesamtnettosaldo jedes Kontos nicht negativ ist und ob alle Benutzervermögenswerte Teil des von Binance angegebenen Gesamtnettosaldos der Benutzervermögenswerte sind.
Werfen Sie einen Blick hinter die Kulissen der neuen Proof-of-Reserves-Lösung von Binance. Durch die Kombination von zk-SNARKs und Merkle-Tree-Informationen erhalten Benutzer eine neue und verbesserte Möglichkeit, den Status der Reserven von Binance zu überprüfen.
In den letzten Monaten hat das Entwicklerteam von Binance hart daran gearbeitet, fortschrittliche Lösungen zum Nachweis der Zahlungsfähigkeit zu entwickeln. Solche Tools sind für zentralisierte Kryptobörsen angesichts der Vertrauenskrise, die die Branche nach dem Zusammenbruch von FTX erfasst hat, von entscheidender Bedeutung geworden. Auf Binance gespeicherte Benutzergelder sind im Verhältnis 1:1 plus Reserven gedeckt, und die Suche nach einem Weg, dies der Öffentlichkeit nahtlos zu beweisen, ist zu einem wichtigen Teil von Binances Plan geworden, das Vertrauen der Branche wiederherzustellen.
Im November 2022 haben wir unser Proof-of-Reserves-System veröffentlicht, das eine kryptografische Merkle-Tree-Technik verwendet, mit der Benutzer ihre Bestände bei Binance verifizieren können. Obwohl dies ein Fortschritt in Binances Bemühungen um Transparenz bei Benutzergeldern war, hatte das ursprüngliche Design dieser Lösung zwei Mängel:
Um die Privatsphäre der Benutzer zu schützen, stellten die Blattknoten im Merkle-Beweis den Hash der Bestände der Benutzer dar – daher konnte die Merkle-Wurzel nicht die Summe der Kontostandsinformationen ihrer Blattknoten widerspiegeln.
Die Entität, deren Reserven überprüft werden, könnte möglicherweise irgendwo im Baum einen negativen Saldo unter einem gefälschten Konto hinzufügen, um die erforderlichen Gesamtreserven kleiner erscheinen zu lassen. Das folgende Diagramm aus Vitalik Buterins Blog zeigt ein Beispiel für einen solchen bösartigen Merkle-Baum (obwohl in diesem Fall die Wurzel die Summe der Salden aller Blattknoten widerspiegelt, was zu Datenschutzproblemen führen kann).
Wir haben jetzt eine Lösung, die diese Mängel beheben und so das Proof-of-Reserves-System von Binance stärken kann. Basierend auf Zero-Knowledge-Proof-Protokollen, zk-SNARKs, können wir Folgendes beweisen:
Alle Blattknoten des Merkle-Baums haben zum von Binance angegebenen Gesamtbenutzerguthaben jedes Vermögenswerts beigetragen.
Im Merkle-Baum ist kein Benutzer mit einem negativen Gesamtnettosaldo (Gesamtwert aller Vermögenswerte des Benutzers in USD) enthalten.
Ein Wort zu negativen Salden und Leistung
Da Binance Margin-, Kryptokredite und Futures-Handelsprodukte anbietet, kann der Saldo jedes Benutzers für jeden Krypto-Vermögenswert aus Vermögenswerten und Verbindlichkeiten bestehen. Der Saldo eines Benutzers für einen bestimmten Krypto-Vermögenswert kann negativ sein, aber sein Gesamtnettosaldo für alle Krypto-Vermögenswerte sollte nicht negativ sein (da alle Kredite vollständig besichert sind).
Nehmen wir in diesem hypothetischen Szenario an, dass Alice 10.000 BUSD bei Binance eingezahlt und dann 4.000 BUSD als Sicherheit verwendet hat, um 2 BNB zu leihen (zu einem Kurs von 1 BNB = 1.000 BUSD, unter der Annahme, dass Binance immer überbesichert). Die folgende Tabelle zeigt Alices Bilanz.
Wenn Alice dann 1 BNB für 1.000 BUSD mit Bob tauscht (der ebenfalls 10.000 BUSD eingezahlt hat), würde ihre Bilanz nach dem Matching des Handels folgendermaßen aussehen:
In diesem Fall beträgt Alices BNB-Guthaben -1, was kein gültiger Knoten in einem Merkle-Baum ist und nur einen Vermögenswert abdeckt: BNB. Wenn wir uns jedoch die gesamten Nettoguthaben ansehen, liegt Alice immer noch bei 10.000.
Eine weitere Herausforderung ergibt sich aus der schieren Größe der Benutzerbasis von Binance. Eine praktikable Lösung muss Benutzernachweise und zk-SNARK-Nachweise für zig Millionen Benutzer generieren, von denen einige möglicherweise mehr als 300 Krypto-Assets auf unserer Plattform halten.
Insgesamt wollen wir in einem angemessenen Zeitfenster den Nachweis folgender Sachverhalte erbringen:
Die Vermögenswerte jedes Binance-Benutzers sind Teil unseres angegebenen Gesamtbenutzerguthabens, das im Snapshot angezeigt wird. Benutzer können unser angegebenes Gesamtbenutzerguthaben mit den Vermögenswerten vergleichen, die an von Binance kontrollierten Adressen gehalten werden, indem sie einen Blockchain-Explorer verwenden (wie Etherscan für Ethereum-Wallets oder BscScan für BNB Chain-Wallets).
Der Gesamtnettosaldo jedes Benutzers ist nicht negativ, was bedeutet, dass Binance keine Dummy-Konten mit einem negativen Saldo erstellt hat, um die Größe unserer verifizierten Reserven künstlich zu reduzieren.
Was sind zk-SNARKs?
Bevor wir uns mit den Details unserer Lösung befassen, ist ein kurzer Überblick über den Zero-Knowledge-Beweismechanismus angebracht. Zero-Knowledge-Protokolle wie zk-SNARK ermöglichen es einer Partei, dem Beweiser, einer anderen Partei, dem Prüfer, zu beweisen, dass der Beweiser bestimmte Berechnungen mit bestimmten Eingaben unter bestimmten Einschränkungen korrekt ausgeführt hat, und das alles, ohne die Eingaben offenzulegen. Die Berechnung kann zeitaufwändig sein, aber der zugrunde liegende mathematische Mechanismus kann dem Prüfer helfen, den Beweis schnell und sicher zu beurteilen.
Der Beweiser (Binance) beginnt mit der Definition einer Reihe von Einschränkungen der Berechnung, die er beweisen möchte. Die Einschränkungen werden in Schaltkreisen definiert, die in einer höheren Programmiersprache ausgedrückt werden können (in unserem Fall eine gegabelte Version von Gnark).
Der Beweiser führt dann die umfangreiche Berechnung aus, hasht die IDs und Bilanzen aller Benutzer und generiert einen Beweis dafür, dass die Berechnung die zuvor festgelegten Einschränkungen erfüllt. Dazu verwendet er die Berechnungsspur (Zeuge) und öffentliche oder private Eingaben.
Der Prüfer (Benutzer) erhält den Beweis und prüft ihn mit dem öffentlichen Eingang des Schaltkreises, um sich zu vergewissern, dass die Berechnung korrekt und unter Einhaltung aller Einschränkungen ausgeführt wurde. Die Prüfberechnung dauert im Vergleich zur Beweiszeit extrem kurz. Wenn der Beweiser den Beweis nicht auf den vordefinierten Schaltkreisen erzeugt, kann er keinen gültigen Beweis erbringen, um die Prüfung zu bestehen.
Um einen tieferen Blick unter die Haube von zk-SNARKs zu werfen, können Sie auf diese Artikelserie zurückgreifen.
Unsere Lösung
Der grundlegende Baustein der aktualisierten Proof-of-Reserves-Lösung ist nach wie vor ein Merkle-Baum. Für das obige Beispiel würde er folgendermaßen aussehen:
Zusätzlich zum Merkle-Baum pflegen wir auch einen globalen Status, der eine Liste der gesamten Nettosalden aller Vermögenswerte darstellt, die jeder Binance-Kunde besitzt.
Um unsere Reserven nachzuweisen, werden wir einen zk-SNARK-Beweis für die Konstruktion des Merkle-Baums generieren. Für den Bilanzsatz jedes Benutzers – einen Blattknoten des Merkle-Baums – würde unsere Schaltung sicherstellen, dass:
Der gesamte Vermögenswertsaldo dieses Benutzers ist in der oben genannten globalen Statusliste enthalten.
Der Gesamtnettosaldo des Benutzers ist nicht negativ.
Die Änderung der Merkle-Baumwurzel ist gültig, nachdem die Informationen dieses Benutzers im Blattknoten-Hash aktualisiert wurden.
Einzelheiten zur Implementierung finden Sie in dieser technischen Spezifikation und in unserem Quellcode für die Schaltung (Einschränkungen).
In jedem Fall, in dem wir unsere Reserven nachweisen, werden wir Folgendes veröffentlichen:
1. Der Merkle-Beweis: die Hashes für jeden Benutzer (für Alice, im obigen Bild durch blaue Knoten dargestellt).
2. zk-SNARK-Beweise und öffentlicher Input (ein Hash der Liste der gesamten Nettosalden jedes Vermögenswerts und der Merkle-Wurzel) des Schaltkreises für alle Benutzer.
Durch die Überprüfung des Merkle-Beweises können Benutzer sicherstellen, dass ihre Bilanz in der Merkle-Baumwurzel enthalten ist. Durch die Überprüfung des zk-SNARK-Beweises können Benutzer sicherstellen, dass die Konstruktion des Merkle-Baums die im Schaltkreis definierten Einschränkungen erfüllt.
Die Sicherheit dieser Lösung hängt stark von der Einrichtung des Prüfschlüssels und des Verifizierungsschlüssels ab. Wir arbeiten an einer dezentralen Einrichtung der Schlüssel. Was bestehende dezentrale vertrauenswürdige Einrichtungszeremonien betrifft, bietet die Ethereum-Zeremonie ein gutes Beispiel. Wir sind kurz davor, eine MPC-Lösung zu haben, um die Einrichtung vertrauenswürdig zu machen.
Leistung
Angesichts der Anzahl der Binance-Benutzer, deren Guthaben einbezogen werden sollten, gibt es keine Möglichkeit, einen einzigen Beweis für die Konstruktion des Merkle-Baums zu erhalten, der alle Benutzer gleichzeitig abdeckt. Eine Lösung hierfür besteht darin, die Benutzer in Gruppen von jeweils 864 aufzuteilen, um einen kleineren Schaltkreis und parallele Beweisverfahren zu erhalten.
Nehmen wir für einen Batch mit 864 Benutzern an, von denen jeder 350 verschiedene Assets besitzt, dass der Saldo jedes Assets im Bereich [0, 2^64-1] liegt. Bei einem 32-Core-128-GB-Server beträgt die Zeit für die Generierung von zk-Proofs etwa 110 Sekunden und die Zeit für die Proof-Verifizierung weniger als 1 Millisekunde.
Binance wird 1000 Prover gleichzeitig starten, um innerhalb von 2 Stunden Beweise für alle Konten zu generieren. Die Kosten für diesen Prover-Server für eine Stunde betragen etwa 0,56 USD, sodass die Gesamtkosten für die Generierung aller ZK-Beweise für alle Benutzer etwa 1000 USD betragen würden.
Abschluss
Wir werden die erste Iteration des von dieser neuen Lösung generierten Nachweises für Benutzer in einer nachfolgenden Proof-of-Reserves-Ankündigung bereitstellen. Außerdem haben wir unseren Benutzerdatenprozessor, unseren Beweiser, unseren Schaltkreis und unseren Prüfer als Open Source freigegeben, sodass jede zentralisierte Börse, die auf demselben Modell wie wir basiert, problemlos Nachweise für ihre Benutzer und Vermögenswerte generieren kann.
Wir hoffen, dass dies dazu beiträgt, die Transparenz in der digitalen Vermögenswertbranche auf ein neues Niveau zu heben. Außerdem arbeiten wir an der Implementierung der in Vitaliks Blog erwähnten Lösung, um eine bessere Leistung zu erzielen, die es uns ermöglicht, den Nachweis häufiger und zu geringeren Kosten zu erbringen.
Da dies die erste Version unseres zk-SNARK ist, freuen wir uns auf das Feedback der Community, damit wir das System weiter verbessern können.
Code und weiterführende Literatur
Unser Quellcode
Binance Proof-of-Reserves: Was ist ein Merkle-Baum
Binance Academy – Verbesserung der Krypto-Transparenz mit Zero-Knowledge-Beweisen
Vitaliks Blog: Eine sichere CEX: Zahlungsfähigkeitsnachweis und mehr



