Startseite
Artikel
Verbesserung der Krypto-Transparenz mit dem Zero-Knowledge-Beweis

Verbesserung der Krypto-Transparenz mit dem Zero-Knowledge-Beweis

Mittel
Ver├Âffentlicht Feb 10, 2023Aktualisiert Nov 24, 2023
10m

TL;DR

Ein Zero-Knowledge-Beweis erm├Âglicht es einer Partei (dem Pr├╝fer), die G├╝ltigkeit einer von einer anderen Partei (dem Beweiserbringer) gemachten Aussage zu ├╝berpr├╝fen, ohne dass sie den Inhalt der Aussage kennen muss. Binance k├Ânnte zum Beispiel beweisen wollen, dass die Mittel der Nutzer vollst├Ąndig durch Reserven gedeckt sind, ohne die einzelnen Nutzerguthaben offenzulegen.

Der Nachweis der Reserven kann mithilfe eines Merkle-Baums erbracht werden, der die F├Ąlschung interner Daten, in diesem Fall des Gesamtnettoguthabens aller Kunden (d. h. der gesamten Verbindlichkeiten der B├Ârse gegen├╝ber ihren Nutzern), verhindert. In Kombination mit einem zk-SNARK-Beweis (einem Zero-Knowledge-Protokoll) kann sichergestellt werden, dass die Nutzer ├╝berpr├╝fen k├Ânnen, ob ihre Guthaben im Gesamtnettoguthaben enthalten sind. Dabei werden zu keinem Zeitpunkt ihre pers├Ânlichen Guthaben bei der B├Ârse offengelegt.

Einf├╝hrung

Aufgrund der j├╝ngsten Marktereignisse ist die Sicherheit von verwahrten Kryptow├Ąhrungen zu einem zentralen Anliegen der Anleger geworden. Blockchain-Nutzer legen gro├čen Wert auf Transparenz und Offenheit, w├╝nschen gleichzeitig aber auch Datenschutz und Vertraulichkeit. Dies schafft ein Dilemma f├╝r Krypto-Verwahrer im Hinblick auf den Nachweis ihrer Reserven, dessen Erbringung h├Ąufig einen Kompromiss zwischen Transparenz und Datenvertraulichkeit erfordert.

Eine L├Âsung f├╝r dieses Problem bietet die Kombination von Zero-Knowledge-Protokollen wie zk-SNARKs mit Merkle-B├Ąumen.

Was ist ein Zero-Knowledge-Beweis?

Ein Zero-Knowledge-Beweis erm├Âglicht es einer Partei (dem Pr├╝fer), die G├╝ltigkeit einer von einer anderen Partei (dem Beweiserbringer) gemachten Aussage zu ├╝berpr├╝fen, ohne dass sie den Inhalt der Aussage kennen muss. Schauen wir uns ein einfaches Beispiel an.

Angenommen, du hast einen Tresor, dessen Code nur du kennst. Der Tresor kann nicht geknackt, aufgebrochen oder auf andere Weise ge├Âffnet werden, es sei denn, man kennt die Zahlenkombination. Diese Tatsache ist auch deinem Freund bekannt.

Du sagst deinem Freund, dass du die Kombination kennst, aber du sie niemandem verraten und den Tresor auch nicht im Beisein anderer ├Âffnen willst. Oben auf dem Tresor ist eine kleine ├ľffnung, durch die dein Freund einen Zettel stecken kann. Damit es sich um einen Zero-Knowledge-Beweis handelt, darf dein Freund au├čer der ├╝bermittelten Aussage keine weiteren Informationen ├╝ber den Vorgang haben.

Du kannst nun deinem Freund beweisen, dass du die Kombination kennst, indem du den Tresor ├Âffnest, ihm sagst, was auf dem Zettel steht, und den Tresor wieder schlie├čt. Dabei hast du ihm zu keinem Zeitpunkt den Code verraten.

Ein praxisnahes Beispiel f├╝r einen Zero-Knowledge-Beweis findest du in unserem Artikel ÔÇ×Was ist ein Zero-Knowledge-Beweis und welche Auswirkungen hat er auf Blockchain?ÔÇť.

Warum werden Zero-Knowledge-Beweise verwendet?

Zero-Knowledge-Beweise sind geeignet, um etwas zu beweisen, ohne dabei sensible Informationen oder Details offenzulegen, z. B. wenn man kein finanziellen oder personenbezogenen Informationen preisgeben will.

In der Welt der Kryptow├Ąhrungen k├Ânnte ein Nutzer beweisen, dass er einen privaten Schl├╝ssel besitzt, ohne ihn zu verraten oder irgendetwas digital zu signieren. Eine Kryptob├Ârse k├Ânnte den Status ihrer Reserven nachweisen wollen, ohne vertrauliche Informationen ├╝ber die Nutzer, insbesondere ihrer pers├Ânlichen Kontost├Ąnde, preiszugeben.┬á

Bei diesen Beispielen (wie auch bei vielen anderen) w├╝rde ein Zero-Knowledge-Beweis Algorithmen einsetzen, die bei einer Dateneingabe die Ausgabe ÔÇ×wahrÔÇť oder ÔÇ×falschÔÇť erzeugen.┬á

Zero-Knowledge-Beweis in technischer Hinsicht

Technisch gesehen folgt ein Zero-Knowledge-Beweis einer bestimmten Struktur mit bestimmten Kriterien. Ein Zero-Knowledge-Beweis muss drei Kriterien erf├╝llen:

  1. Kriterium der Vollst├Ąndigkeit. Die Ausgabe ÔÇ×wahrÔÇť ├╝berzeugt den Pr├╝fer vollkommen, sodass keine weitere Informationen oder Pr├╝fungen erforderlich sind.

  2. Kriterium der Zuverl├Ąssigkeit. Wenn die Ausgabe ÔÇ×falschÔÇť ist, kann der Pr├╝fer unm├Âglich davon ├╝berzeugt werden, dass die Aussage wahr ist.

  3. Kriterium des Nullwissens. Wenn die Aussage ÔÇ×wahrÔÇť ist, erf├Ąhrt der Pr├╝fer keine anderen Informationen als eben die, dass die Aussage wahr ist.

Was ist ein zk-SNARK?

Ein zk-SNARK (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) ist ein Beweisprotokoll, das den zuvor beschriebenen Prinzipien des Nullwissens folgt. Mit einem zk-SNARK l├Ąsst sich beweisen, dass man den urspr├╝nglichen Hash-Wert kennt (siehe unten), ohne dass man ihn offenlegen muss. Man kann auch die G├╝ltigkeit einer Transaktion beweisen, ohne Informationen ├╝ber den Betrag, Wert oder die Adressen preiszugeben.

zk-SNARKs werden im Bereich der Blockchains und Kryptow├Ąhrungen h├Ąufig eingesetzt und diskutiert. Du fragst dich jetzt vielleicht, warum sich jemand die M├╝he machen sollte, einen zk-SNARK zu verwenden, wenn die Informationen ├╝ber seine Schl├╝ssel abgerufen werden k├Ânnen. Nun, wir w├Ąren nicht in der Lage, den mathematischen Beweis zu erbringen, dass die Wallets keine Negativguthaben aufweisen und dass die Summe des Merkle-Baums stimmt.┬á

Dar├╝ber hinaus m├Âchte eine Kryptob├Ârse nachweisen, dass sie ├╝ber die gesamten Kundenguthaben auf einer 1:1-Basis besitzt, ohne die Wallet-Adressen und individuellen Kontost├Ąnde der Nutzer zu ver├Âffentlichen. Au├čerdem macht die zk-SNARK-Technologie die F├Ąlschung von Daten noch unwahrscheinlicher.

Was ist ein Merkle-Baum?

Die Darstellung der Guthaben aller Binance-Nutzer erfordert die Verarbeitung enormer Datenmengen. Der Merkle-Baum schafft hier Abhilfe. Er ist in der Lage, eine gro├če Menge an Daten effizient zu speichern, und seine kryptografische Natur macht seine Integrit├Ąt leicht ├╝berpr├╝fbar.

Hash-Funktionen

Zur effizienten Verschl├╝sselung einer Eingabe ist ein Merkle-Baum auf die Verwendung von Hash-Funktionen angewiesen. Kurz gesagt ist Hashing der Prozess, bei dem aus einer Eingabe variabler Gr├Â├če eine Ausgabe fester Gr├Â├če generiert wird. Mit anderen Worten: Wenn eine Eingabe beliebiger L├Ąnge durch einen Algorithmus gehasht wird, wird eine verschl├╝sselte Ausgabe fester L├Ąnge erzeugt.

Solange die Eingabe gleich bleibt, bleibt auch die Ausgabe gleich. Das bedeutet, dass wir riesige Mengen von Transaktionsdaten in eine ├╝berschaubare Ausgabe hashen k├Ânnen. Die Ausgabe wird sich grundlegend ├Ąndern, wenn sich irgendeine Information in der Eingabe ├Ąndert.

Wir k├Ânnten zum Beispiel den Inhalt von 100 B├╝chern nehmen und sie in die SHA-256-Hash-Funktion eingeben. Die Ausgabe w├╝rde dann etwa so aussehen:

801a9be154c78caa032a37b4a4f0747f1e1addb397b64fa8581d749d704c12ea

Wenn wir dann nur ein einziges Zeichen in der Eingabe (also im Inhalt von 100 B├╝chern) ├Ąndern w├╝rden, w├╝rde der Hash v├Âllig anders aussehen, etwa so:

abc5d230121d93a93a25bf7cf54ab71e8617114ccb57385a87ff12872bfda410

Dies ist eine wichtige Eigenschaft von Hash-Funktionen, da sie eine einfache ├ťberpr├╝fung der Richtigkeit von Daten erm├Âglicht. Wenn jemand den Vorgang des Hashens derselben 100 B├╝cher mit dem SHA-256-Algorithmus wiederholt, erh├Ąlt er genau denselben Hash wie die erste Ausgabe oben. Weicht die Ausgabe ab, k├Ânnen wir mit Sicherheit sagen, dass die Eingabe ge├Ąndert wurde. Dies bedeutet, dass es nicht notwendig ist, die Eingaben selbst (in unserem Beispiel den Inhalt von 100 B├╝chern) einzeln oder manuell auf Unterschiede hin zu ├╝berpr├╝fen, was logischerweise enorm aufwendig w├Ąre.

Merkle-B├Ąume in der Krypto-Branche

Bei der Speicherung von Transaktionsdaten in einer Blockchain wird jede neue Transaktion ├╝ber eine Hash-Funktion ├╝bermittelt, die eindeutige Hash-Werte erzeugt. Stell dir vor, wir haben acht Transaktionen (A bis H), die wir einzeln hashen, um ihre gehashten Ausgaben zu erhalten. Dies sind die so genannten Merkle-Blattknoten. In der Abbildung unten ist der eindeutige Hash-Wert jedes Buchstabens dargestellt: hA f├╝r A, hB f├╝r B, hC f├╝r C usw.

Wir k├Ânnen nun jeweils zwei Hash-Ausgaben zu einer neuen Hash-Ausgabe kombinieren. Die Hashes von hA und hB w├╝rden zum Beispiel eine neue Hash-Ausgabe hAB, einen sogenannten Merkle-Zweig, erzeugen. Beachte, dass jede neu erzeugte Ausgabe eine feste L├Ąnge bzw. Gr├Â├če hat, die von der verwendeten Hash-Funktion abh├Ąngt.

Wir haben jetzt also die Daten von zwei Transaktionen (z. B. A und B) in einem Hash (hAB) kombiniert. Unsere Hash-Ausgabe hAB wurde v├Âllig anders ausfallen, wenn wir irgendwelche Informationen von A oder B ├Ąndern und den Vorgang wiederholen w├╝rden.

Wir setzen den Prozess fort und kombinieren wiederum zwei Hash-Paare, die wir danach erneut hashen (siehe Abbildung unten). Wir kombinieren hAB mit hCD, um einen eindeutigen Hashwert hABCD zu erhalten, und machen dasselbe mit hEF und hGH, um hEFGH zu erhalten. Am Ende bleibt ein einziger Hash ├╝brig, der alle bisher gehashten Ausgaben darstellt. Die Hash-Ausgabe hABCDEFGH repr├Ąsentiert also alle Informationen, die gehasht wurden.

Der letzte Hash, der ├╝brig bleibt, wird als Merkle-Wurzel bezeichnet. Die oben dargestellte Grafik zeigt den gesamten Merkle-Baum. Wir verwenden Merkle-Wurzeln in Block-Headern, da sie alle Transaktionsdaten in einem Block kryptografisch knapp zusammenfassen. Dar├╝ber hinaus l├Ąsst sich schnell feststellen, ob Daten innerhalb des Blocks manipuliert oder ver├Ąndert wurden.

Die Limitationen von Merkle-B├Ąumen

Kehren wir zu unserem Beispiel des Nachweises von Reserven durch CEXs zur├╝ck. Eine CEX m├Âchte den Nachweis erbringen, dass sie alle Assets ihrer Kunden im Verh├Ąltnis 1:1 h├Ąlt, und erstellt einen Merkle-Baum, der die Nettoguthaben (Guthaben abz├╝glich Schulen) jeder Nutzer-ID f├╝r jeden Token zusammenhasht. Nach der Ver├Âffentlichung (und der Signierung zum Nachweis des Eigentums an der bereitgestellten Merkle-Wurzel) h├Ątte ein einzelner Nutzer keine M├Âglichkeit zu ├╝berpr├╝fen, ob der Merkle-Baum g├╝ltig ist, ohne alle seine Eingaben einzusehen.

Eine Kryptob├Ârse k├Ânnte einige Eingaben ├╝bersehen haben. Sie k├Ânnte aber auch gef├Ąlschte Nutzerkonten mit Negativguthaben erstellen, um die Gesamtverschuldung k├╝nstlich aufzubl├Ąhen. Zum Beispiel k├Ânnte sie ein gef├Ąlschtes Konto mit einem Guthaben von -500.000 EUR f├╝r einen Kunden anlegen, der ├╝ber Assets im Wert von 1.000.000 EUR verf├╝gt. Infolgedessen m├╝sste die B├Ârse 500.000 EUR weniger Mittel als Reserve halten.

Der Nachweis von Reserven unterscheidet sich von der Merkle-Wurzel eines Blocks. W├Ąhrend die Nutzer alle Transaktionen, die ein Block enth├Ąlt, in einem Blockchain-Explorer einsehen k├Ânnen, wird eine CEX aus Gr├╝nden der Sicherheit und des Datenschutzes nicht jedes Kontoguthaben ver├Âffentlichen wollen. Die Nutzer w├Ąren nicht gl├╝cklich dar├╝ber, wenn ihre Kontost├Ąnde preisgegeben w├╝rden. Es stellt sich also die Frage, wie eine CEX ohne die Offenlegung der Kundenguthaben nachweisen kann, dass die von ihr gehaltenen Mittel der Summe aller Nutzerguthaben entsprechen.

Eine L├Âsung, die B├Ârsen in Erw├Ągung ziehen k├Ânnen, ist der Beizug eines vertrauensw├╝rdigen unabh├Ąngigen Pr├╝fers. Dieser kann die einzelnen Konten und Reserven verifizieren und die G├╝ltigkeit der Merkle-Wurzel bescheinigen. Diese Methode setzt jedoch Vertrauen in den Pr├╝fer und die f├╝r die Pr├╝fung verwendeten Daten voraus.

Kombination von zk-SNARKs und Merkle-B├Ąumen

Im beschriebenen Fall stellten zk-SNARKs eine ideale L├Âsung dar. Eine Kryptob├Ârse m├Âchte nachweisen, dass sie ├╝ber ausreichend Mittel verf├╝gt und sie die Kontost├Ąnde nicht gef├Ąlscht hat. Aus Gr├╝nden des Datenschutzes und der Sicherheit will sie dem Pr├╝fer jedoch keine genaue Aufschl├╝sselung der Nutzerguthaben sowie ihrer Reserven vorlegen.┬á

Durch die Verwendung eines zk-SNARKs kann eine Kryptob├Ârse beweisen, dass alle Blattknoten des Merkle-Baums (d. h. die Guthaben der Nutzerkonten) bei dem von der B├Ârse ausgewiesenen Gesamtguthaben ber├╝cksichtigt wurden. Jeder Nutzer kann leicht ├╝berpr├╝fen, ob sein Blattknoten in die Berechnung einbezogen wurde. Der zk-SNARK garantiert auch, dass der generierte Merkle-Baum keine Konten mit negativem Gesamtguthaben enth├Ąlt (was bedeuten w├╝rde, dass Daten gef├Ąlscht wurden, da alle Kredite ├╝berbesichert sind). Au├čerdem wird eine Berechnung des Gesamtverm├Âgens von Binance durchgef├╝hrt, indem die Gesamtnettoguthaben jedes Assets, das jeder Binance-Kunde besitzt, aufgelistet werden.

Schauen wir uns an, wie Binance diese Herausforderung angeht. Zun├Ąchst definiert Binance die Bedingungen f├╝r die erforderliche Berechnung in Form einer programmierbaren logischen Schaltung. Im Folgenden sind die drei Bedingungen aufgef├╝hrt, die Binance im eingesetzten Modell verwendet.┬á

F├╝r jedes Guthaben eines Nutzers (d.h. f├╝r jeden Merkle-Blattknoten) stellt die Schaltung von Binance sicher, dass:

  1. die Guthaben eines Nutzers bei der Berechnung der Gesamtnettoguthaben aller Nutzer bei Binance ber├╝cksichtigt werden

  2. das Gesamtnettoguthaben des Nutzers gr├Â├čer oder gleich Null ist

  3. die ├änderung der Merkle-Baumwurzel g├╝ltig ist (d. h. keine gef├Ąlschten Informationen zugrundeliegen), nachdem die Informationen eines Nutzers im Blattknoten-Hash aktualisiert wurden

Binance kann dann einen zk-SNARK-Beweis f├╝r die Struktur des Merkle-Baums entsprechend der Schaltung erzeugen. Dies bedeutet, dass die Kryptob├Ârse die umfangreichen Berechnungen zum Hashing der IDs und Guthaben der Nutzer durchf├╝hren muss, w├Ąhrend sie gleichzeitig sicherstellt, dass der Beweis die Bedingungen erf├╝llt.

Ein Pr├╝fer pr├╝ft den Beweis (und seinen ver├Âffentlichten Open-Source-Code), um sicherzustellen, dass die Berechnung unter Einhaltung aller Bedingungen durchgef├╝hrt wurde. Die Verifizierungsberechnung nimmt im Vergleich zur Beweisberechnung extrem wenig Zeit in Anspruch.

Bei jeder Ver├Âffentlichung eines Nachweises von Reserven wird die Kryptob├Ârse folgende Informationen offenlegen:

1. den Merkle-Beweis f├╝r jeden Nutzer.

2. den zk-SNARK-Beweis und die ├Âffentliche Eingabe (ein Hash der Aufzeichnung der Gesamtnettoguthaben f├╝r jedes einzelne Asset und der Merkle-Wurzel) der Schaltung f├╝r alle Nutzer

Alle Interessenten k├Ânnen den Merkle-Beweis verifizieren, um sicher sein zu k├Ânnen, dass ihre pers├Ânlichen Guthaben in der Wurzel des Merkle-Baums ber├╝cksichtigt sind. Sie k├Ânnen auch den zk-SNARK-Beweis verifizieren, um sicherzustellen, dass die Struktur des Merkle-Baums den in der Schaltung definierten Bedingungen entspricht. Weiterf├╝hrende Informationen ├╝ber die zk-SNARK-L├Âsung von Binance und ihre Leistungsf├Ąhigkeit findest du in unserem Blogbeitrag Wie zk-SNARKs die Erbringung des Reservennachweises von Binance verbessern.

Fazit

zk-SNARKs bieten die Technologie, die ben├Âtigt wird, um gleichzeitig Datenintegrit├Ąt und Datenschutz zu gew├Ąhrleisten. Ihre Anwendung beim Nachweis von Reserven d├╝rfte die Transparenz von CEXs erh├Âhen und das Vertrauen in die Blockchain-Branche insgesamt st├Ąrken. Viele Nutzer haben schon lange auf diese L├Âsung gewartet, und sie kommt f├╝r CEXs genau zum richtigen Zeitpunkt.

Dies ist die erste Version von zk-SNARKs, und wir freuen uns auf das Feedback der Community , damit wir unser System weiter verbessern k├Ânnen.

Weiterf├╝hrende Lekt├╝re