Über AnonymitĂ€t in account-basierten Blockchains

Wir interessieren uns schon lange fĂŒr das Thema AnonymitĂ€t in KryptowĂ€hrungen und versuchen, die Entwicklungen in diesem Bereich zu verfolgen. In unseren Artikeln haben wir bereits ausfĂŒhrlich die Funktionsweise erklĂ€rt von vertraulichen Transaktionen in Monero und haben auch einen vergleichenden Überblick ĂŒber die Technologien gegeben, die in diesem Bereich existieren. Dennoch basieren alle anonymen KryptowĂ€hrungen bis heute auf dem von Bitcoin vorgeschlagenen Datenmodell — Unspent Transaction Output (UTXO). FĂŒr account-basierte Blockchains wie Ethereum haben die bestehenden Lösungen zur Umsetzung von AnonymitĂ€t und Vertraulichkeit (zum Beispiel Mobius oder Aztec) versucht, das UTXO-Modell in Smart Contracts zu reproduzieren.

Im Februar 2019 veröffentlichte eine Gruppe von Forschern der Stanford University und Visa Research wurde veröffentlicht einen Preprint mit dem Titel „Zether: Auf dem Weg zur PrivatsphĂ€re in der Welt der Smart Contracts“. Die Autoren schlugen erstmals einen Ansatz zur GewĂ€hrleistung der AnonymitĂ€t in account-basierten Blockchains vor und prĂ€sentierten zwei Varianten von Smart Contracts: fĂŒr vertrauliche (Verbergung von Salden und ÜberweisungsbetrĂ€gen) und anonyme (Verbergung von EmpfĂ€nger und Absender) Transaktionen. Wir finden die vorgeschlagene Technologie interessant und möchten deren Funktionsweise teilen sowie darĂŒber sprechen, warum das Problem der AnonymitĂ€t in account-basierten Blockchains als sehr komplex angesehen wird und ob es den Autoren gelungen ist, dies vollstĂ€ndig zu lösen.

Über die Funktionsweise dieser Datenmodelle

Im UTXO-Modell besteht eine Transaktion aus „EingĂ€ngen“ und „AusgĂ€ngen“. Ein direkter Vergleich zu „AusgĂ€ngen“ wĂ€re die Banknoten in Ihrer Geldbörse: jeder „Ausgang“ hat einen bestimmten Nennwert. Wenn Sie jemandem bezahlen (eine Transaktion durchfĂŒhren), verwenden Sie einen oder mehrere „AusgĂ€nge“, wobei diese zu den „EingĂ€ngen“ der Transaktion werden und die Blockchain sie als ausgegeben markiert. Der EmpfĂ€nger Ihrer Zahlung (oder Sie selbst, wenn Sie Wechselgeld benötigen) erhĂ€lt neu generierte „AusgĂ€nge“. Schematisch lĂ€sst sich das so darstellen:

Über AnonymitĂ€t in account-basierten Blockchains

Account-basierte Blockchains funktionieren in etwa wie Ihr Bankkonto. Sie operieren nur mit dem Betrag auf Ihrem Konto und dem Überweisungsbetrag. Wenn Sie einen Betrag von Ihrem Konto ĂŒbertragen, verbrennen Sie keine „AusgĂ€nge“, das Netzwerk muss sich nicht merken, welche Coins ausgegeben wurden und welche nicht. Im einfachsten Fall reduziert sich die ÜberprĂŒfung der Transaktion auf die PrĂŒfung der Unterschrift des Absenders und des Betrags auf seinem Guthaben:

Über AnonymitĂ€t in account-basierten Blockchains

ÜberprĂŒfung der Technologie

Als NĂ€chstes werden wir besprechen, wie Zether die BetrĂ€ge von Transaktionen, den EmpfĂ€nger und den Absender verbirgt. Im Laufe der Beschreibung der Funktionsweise werden wir die Unterschiede zwischen der vertraulichen und der anonymen Version hervorheben. Da es viel einfacher ist, in auf Konten basierenden Blockchains Vertraulichkeit zu gewĂ€hrleisten, werden einige der durch Anonymisierung auferlegten EinschrĂ€nkungen fĂŒr die vertrauliche Version der Technologie irrelevant sein.

Verbergung von KontostĂ€nden und ÜberweisungsbetrĂ€gen

Zur VerschlĂŒsselung von KontostĂ€nden und ÜberweisungsbetrĂ€gen verwendet Zether ein VerschlĂŒsselungsverfahren von ElGamal. Es funktioniert folgendermaßen. Wenn Alice Bob b MĂŒnzen an die Adresse (seinen öffentlichen SchlĂŒssel) Ysenden möchte, wĂ€hlt sie eine zufĂ€llige Zahl r und verschlĂŒsselt den Betrag:

Über AnonymitĂ€t in account-basierten Blockchains
wo C — der verschlĂŒsselte Betrag, D — ein Hilfswert, der zur EntschlĂŒsselung dieses Betrags benötigt wird, G — ein fester Punkt auf der elliptischen Kurve, bei dessen Multiplikation mit dem geheimen SchlĂŒssel der öffentliche SchlĂŒssel entsteht.

Wenn Bob diese Werte erhĂ€lt, addiert er sie einfach zu seinem ebenfalls auf die gleiche Weise verschlĂŒsselten Kontostand, was dieses Verfahren praktisch macht.

Auf Ă€hnliche Weise subtrahiert Alice aus ihrem Kontostand dieselben Werte, nur dass sie als Y ihren öffentlichen SchlĂŒssel verwendet.

Verbergung von EmpfÀnger und Absender

Das Mischen von 'AusgĂ€ngen' in UTXO entstand bereits in den AnfĂ€ngen von KryptowĂ€hrungen und hilft, den Absender zu verbergen. Dazu wĂ€hlt der Absender bei der Überweisung zufĂ€llige 'AusgĂ€nge' aus der Blockchain aus und mischt diese mit seinen eigenen. Danach signiert er die 'AusgĂ€nge' mit einer Ringunterschrift — einem kryptografischen Mechanismus, der es ermöglicht, den PrĂŒfer zu ĂŒberzeugen, dass unter den gemischten 'AusgĂ€ngen' die MĂŒnzen des Absenders sind. Die gemischten MĂŒnzen werden selbstverstĂ€ndlich nicht ausgegeben.

Um den EmpfĂ€nger jedoch zu verbergen, können wir keine falschen 'AusgĂ€nge' generieren. Daher hat jeder 'Ausgang' in UTXO seine eigene eindeutige Adresse, die kryptografisch mit der Adresse des EmpfĂ€ngers dieser MĂŒnzen verbunden ist. Momentan gibt es keine Möglichkeit, die Verbindung zwischen der eindeutigen Adresse des 'Ausgangs' und der Adresse des EmpfĂ€ngers zu erkennen, ohne seine geheimen SchlĂŒssel zu kennen.

In einem account-basierten Modell können wir keine einmaligen Adressen verwenden (ansonsten wĂ€re das bereits ein Modell der „AusgĂ€nge“). Daher mĂŒssen der EmpfĂ€nger und der Absender unter anderen Konten in der Blockchain vermischt werden. Bei diesen vermischten Konten werden verschlĂŒsselte 0 MĂŒnzen abgebucht (oder 0 hinzugefĂŒgt – im Fall des Vermischens des EmpfĂ€ngers), ohne das tatsĂ€chliche Guthaben zu verĂ€ndern.

Da sowohl der Absender als auch der EmpfĂ€nger immer eine permanente Adresse haben, entsteht hier die Notwendigkeit, bei Überweisungen an dieselben Adressen dieselben Gruppen fĂŒr die Vermischung zu verwenden. Es lĂ€sst sich einfacher anhand eines Beispiels erklĂ€ren.

Angenommen, Alice hat sich entschlossen, eine Spende an die WohltĂ€tigkeitsorganisation von Bob zu machen, möchte aber, dass diese Überweisung anonym bleibt fĂŒr einen außenstehenden Beobachter. Um sich im Absenderfeld zu tarnen, trĂ€gt sie noch die Konten von Adam und Adele ein. Und um Bob zu verbergen, fĂŒgt sie im EmpfĂ€ngerfeld zusĂ€tzlich die Konten von Ben und Bill hinzu. Bei der nĂ€chsten Spende entschied sich Alice, neben sich Alex und Amanda sowie neben Bob Bruce und Benjamin einzutragen. In diesem Fall findet man bei der Analyse der Blockchain in diesen beiden Transaktionen lediglich ein sich ĂŒberschneidendes PĂ€rchen von Teilnehmern — Alice und Bob, was diese Transaktionen deanonimisiert.

Über AnonymitĂ€t in account-basierten Blockchains

Transaktionsrennen

Wie bereits erwĂ€hnt, verschlĂŒsselt der Benutzer sein Guthaben und den Überweisungsbetrag, um sein Guthaben in account-basierten Systemen zu verbergen. Dabei muss er nachweisen, dass der Rest auf seinem Konto nicht negativ ist. Das Problem besteht darin, dass der Benutzer beim Erstellen einer Transaktion einen Nachweis ĂŒber seinen aktuellen Kontostand erstellt. Was passiert, wenn Bob Alice eine Transaktion zusendet und diese frĂŒher akzeptiert wird als die von Alice gesendete? Dann wird Alices Transaktion als ungĂŒltig angesehen, da der Nachweis des Guthabens vor der Annahme von Bobs Transaktion erstellt wurde.

Über AnonymitĂ€t in account-basierten Blockchains

Die erste Lösung, die in dieser Situation einfĂ€llt, ist, das Konto bis zur DurchfĂŒhrung der Transaktion einzufrieren. Aber dieser Ansatz ist nicht praktikabel, da neben der Schwierigkeit, eine solche Aufgabe in einem verteilten System zu lösen, in einem anonymen Schema unklar bleibt, wessen Konto blockiert werden soll.

Um dieses Problem zu lösen, trennt die Technologie eingehende und ausgehende Transaktionen: Der Einsatz von Mitteln hat sofortige Auswirkungen auf den Kontostand, wĂ€hrend Einnahmen verzögert erfolgen. Dazu wird der Begriff „Epoche“ eingefĂŒhrt – eine Gruppe von Blöcken fester GrĂ¶ĂŸe. Die aktuelle „Epoche“ wird bestimmt, indem die Blockhöhe durch die GruppengrĂ¶ĂŸe geteilt wird. Bei der Verarbeitung einer Transaktion aktualisiert das Netzwerk sofort den Kontostand des Absenders, wĂ€hrend die Mittel des EmpfĂ€ngers in einem Speicher gesammelt werden. Die gesammelten Mittel stehen dem EmpfĂ€nger der Zahlung erst zur VerfĂŒgung, wenn die neue „Epoche“ einsetzt.

Infolgedessen kann der Nutzer Transaktionen senden, unabhĂ€ngig davon, wie oft er Mittel erhĂ€lt (sofern sein Kontostand es zulĂ€sst, versteht sich). Die GrĂ¶ĂŸe der Epoche wird bestimmt durch die Geschwindigkeit, mit der sich Blöcke im Netzwerk verbreiten, und wie schnell eine Transaktion in einen Block gelangt.

Diese Lösung funktioniert gut bei vertraulichen Überweisungen, verursacht jedoch bei anonymen Transaktionen, wie wir spĂ€ter sehen werden, ernsthafte Probleme.

Schutz vor Replay-Angriffen

In account-basierten Blockchains wird jede Transaktion mit dem privaten SchlĂŒssel des Absenders signiert, was den ÜberprĂŒfer davon ĂŒberzeugt, dass die Transaktion nicht verĂ€ndert wurde und von dem Besitzer dieses SchlĂŒssels erstellt wurde. Was geschieht jedoch, wenn ein Angreifer, der den Übertragungskanal abgehört hat, diese Nachricht abfĂ€ngt und eine identische zweite sendet? Der ÜberprĂŒfer vergleicht die Signatur der Transaktion und ist ĂŒberzeugt von ihrer Herkunft, und das Netzwerk zieht den gleichen Betrag erneut vom Kontostand des Absenders ab.

Dieser Angriff wird als Replay-Angriff bezeichnet. Im UTXO-Modell sind solche Angriffe nicht relevant, da der Angreifer versuchen wĂŒrde, ausgegebene AusgĂ€nge zu verwenden, was fĂŒr sich allein nicht gĂŒltig ist und vom Netzwerk abgelehnt wird.

Um dies zu verhindern, wird ein Feld mit zufĂ€lligen Daten in die Transaktion integriert, das als Nonce oder einfach „Salz“ bezeichnet wird. Bei der erneuten Übertragung einer Transaktion mit „Salz“ prĂŒft der ÜberprĂŒfer, ob dieser Nonce zuvor verwendet wurde, und wenn nicht, gilt diese Transaktion als gĂŒltig. Um nicht die gesamte Geschichte der Nonces von Nutzern in der Blockchain zu speichern, wird in der ersten Transaktion der Nonce normalerweise auf null gesetzt und dann um eins erhöht. Das Netzwerk muss nur ĂŒberprĂŒfen, dass der Nonce der neuen Transaktion sich um eins von dem vergangenen unterscheidet.

In anonymen Überweisungssystemen tritt das Problem der Validierung von Transaktions-Nonce auf. Wir können den Nonce nicht direkt an die Adresse des Absenders binden, da dies offensichtlich die Überweisung de-anonymisieren wĂŒrde. Wir können auch nicht zu den Nonce aller beteiligten Konten eins addieren, da dies mit anderen Überweisungen, die in Bearbeitung sind, in Konflikt geraten kann.

Die Autoren von Zether schlagen vor, die Nonce kryptografisch zu generieren — abhĂ€ngig von der „Ära“. Zum Beispiel:

Über AnonymitĂ€t in account-basierten Blockchains
Hier x — der geheime SchlĂŒssel des Absenders und Gepoch — ein zusĂ€tzlicher Generator fĂŒr die Ära, der durch Hashing eines Strings der Art „Zether + “ erhalten wird. Damit scheint das Problem gelöst zu sein — wir geben die Nonce des Absenders nicht preis und mischen uns nicht in die Nonce unbeteiligter Teilnehmer ein. Aber dieser Ansatz bringt eine ernsthafte EinschrĂ€nkung mit sich: Ein Konto kann nicht mehr als eine Transaktion in einer „Ära“ senden. Dieses Problem bleibt leider ungelöst und macht die anonyme Version von Zether derzeit, unserer Meinung nach, kaum brauchbar.

Die KomplexitÀt der Null-Wissen-Beweise

In UTXO muss der Absender dem Netzwerk beweisen, dass er keinen negativen Betrag ausgibt, da sonst die Möglichkeit besteht, neue MĂŒnzen aus dem Nichts zu generieren (warum dies möglich ist, haben wir in einem der vorherigen Artikel). Außerdem muss er die „EingĂ€nge“ mit einer Ringunterschrift signieren, um zu beweisen, dass unter den gemischten MĂŒnzen auch Mittel sind, die ihm gehören.

In der anonymen Version der account-basierten Blockchain wird der Beweis wesentlich komplizierter. Der Absender muss beweisen, dass:

  1. Der gesendete Betrag positiv ist;
  2. Das Guthaben nicht negativ bleibt;
  3. Der Absender die BetrĂ€ge der Überweisungen (einschließlich null) korrekt verschlĂŒsselt hat;
  4. Der Kontostand Àndert sich nur beim Absender und beim EmpfÀnger;
  5. Der Absender besitz den geheimen SchlĂŒssel seines Kontos und dieser ist tatsĂ€chlich in der Liste der Absender (unter den gemischten) vorhanden;
  6. Der in der Transaktion verwendete Nonce ist korrekt zusammengesetzt.

FĂŒr einen so komplexen Beweis verwenden die Autoren eine Mischung Bulletproof (ĂŒbrigens war einer der Autoren an seiner Erstellung beteiligt) und Sigma-Protokoll, das sie Sigma-Bullets nennen. Der formale Beweis einer solchen Behauptung ist eine ziemlich komplexe Aufgabe und schrĂ€nkt die Zahl derjenigen, die sich mit der Umsetzung der Technologie befassen wollen, erheblich ein.

Was kommt dabei heraus?

Nach unserer Ansicht könnte der Zether-Teil, der Vertraulichkeit in account-basierten Blockchains einfĂŒhrt, durchaus bereits jetzt verwendet werden. Aber derzeit bringt die anonyme Version der Technologie erhebliche EinschrĂ€nkungen fĂŒr ihre Nutzung mit sich, und ihre KomplexitĂ€t erschwert die Implementierung. Man sollte jedoch nicht außer Acht lassen, dass die Autoren sie erst vor wenigen Monaten veröffentlicht haben, und vielleicht wird jemand anderes eine Lösung fĂŒr die heutigen Probleme finden. So funktioniert schließlich Wissenschaft.

Quelle: habr.com

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster