Über Anonymität in kontobasierten Blockchains

Wir haben uns seit langem für das Thema Anonymität in Kryptowährungen interessiert und versuchen, die Entwicklung von Technologien in diesem Bereich zu verfolgen. In unseren Artikeln haben wir bereits die Grundsätze für den Betrieb vertraulicher Transaktionen in Monero eingehend untersucht und eine vergleichende Überprüfung der in diesem Bereich vorhandenen Technologien durchgeführt. Alle anonymen Kryptowährungen basieren heute jedoch auf dem von Bitcoin - Unspent Transaction Output (im Folgenden: UTXO) vorgeschlagenen Datenmodell. Bei kontobasierten Blockchains wie Ethereum haben vorhandene Lösungen für die Implementierung von Anonymität und Datenschutz (z. B. Mobius oder Aztec ) versucht, das UTXO-Modell in intelligenten Verträgen zu wiederholen.

Im Februar 2019 eine Gruppe von Forschern der Stanford University und Visa Research veröffentlichte den Preprint "Zether: Auf dem Weg zum Datenschutz in der Welt der intelligenten Verträge". Die Autoren schlugen zunächst einen Ansatz zur Gewährleistung der Anonymität in kontobasierten Blockchains vor und stellten zwei Optionen für einen intelligenten Vertrag vor: für vertrauliche (Ausblenden von Guthaben und Überweisungsbeträgen) und anonyme (Ausblenden von Empfänger und Absender) Transaktionen. Wir finden die vorgeschlagene Technologie interessant und möchten ihr Gerät teilen und darüber sprechen, warum das Anonymitätsproblem in kontobasierten Blockchains als sehr komplex angesehen wird und ob es den Autoren gelungen ist, es vollständig zu lösen.



Über das Gerät dieser Datenmodelle


Im UTXO-Modell besteht eine Transaktion aus „Eingaben“ und „Ausgaben“. Ein direktes Analogon zu den „Ausgängen“ ist die Banknote in Ihrer Brieftasche: Jeder „Ausgang“ hat eine bestimmte Stückelung. Wenn Sie mit jemandem bezahlen (eine Transaktion bilden), geben Sie eine oder mehrere "Ausgaben" aus, während diese zu "Eingaben" der Transaktion werden, und die Blockchain markiert sie als ausgegeben. Gleichzeitig erhält der Empfänger Ihrer Zahlung (oder Sie selbst, wenn Sie eine Änderung benötigen) die neu generierten „Ausgaben“. Schematisch kann dies wie folgt dargestellt werden:

Bild

Kontobasierte Blockchains sind wie Ihr Bankkonto aufgebaut. Sie arbeiten nur mit dem Betrag auf Ihrem Konto und dem Überweisungsbetrag. Wenn Sie einen bestimmten Betrag von Ihrem Konto überweisen, verbrennen Sie keine "Ausgänge". Das Netzwerk muss sich nicht merken, welche Münzen ausgegeben werden und welche nicht. Im einfachsten Fall reduziert sich die Überprüfung einer Transaktion auf die Überprüfung der Unterschrift des Absenders und des Betrags in seiner Bilanz:

Bild

Technologie-Analyse


Als nächstes werden wir darüber sprechen, wie Zether die Anzahl der Transaktionen, den Empfänger und den Absender verbirgt. Im Verlauf der Beschreibung der Prinzipien seiner Arbeit werden wir die Unterschiede in der vertraulichen und anonymen Version feststellen. Da die Gewährleistung des Datenschutzes in kontobasierten Blockchains viel einfacher ist, sind einige der durch die Anonymisierung auferlegten Einschränkungen für eine vertrauliche Version der Technologie nicht relevant.

Verschleierung von Guthaben und Überweisungsbeträgen


Zether verwendet das El Gamal- Verschlüsselungsschema, um Guthaben zu verschlüsseln und Beträge zu übertragen. Es funktioniert wie folgt. Wenn Alice Bob b Münzen an die Adresse (seinen öffentlichen Schlüssel) Y senden möchte, wählt sie eine Zufallszahl r und verschlüsselt den Betrag:

Bild

wobei C die verschlüsselte Summe ist, D der Hilfswert ist, der zum Entschlüsseln dieser Summe benötigt wird, G der feste Punkt auf der elliptischen Kurve ist, wenn der geheime Schlüssel multipliziert wird, mit dem der öffentliche Schlüssel erhalten wird.

Wenn Bob diese Werte erhält, fügt er sie einfach zu seinem Guthaben hinzu, das auf die gleiche Weise verschlüsselt ist, was für dieses Schema praktisch ist.

In ähnlicher Weise subtrahiert Alice dieselben Werte von ihrer Bilanz und verwendet nur Y als ihren öffentlichen Schlüssel.

Verschleierung des Adressaten und des Absenders


Das Mischen von „Exits“ in UTXO trat zu Beginn der Kryptowährungen auf und hilft, den Absender zu verbergen. Zu diesem Zweck sammelt der Absender bei einer Überweisung zufällige „Ausgänge“ in der Blockchain und knetet sie mit seinen eigenen. Dann signiert er die „Ausgänge“ mit einer Ringsignatur - ein kryptografischer Mechanismus, mit dem er den Prüfer davon überzeugen kann, dass sich unter den beteiligten „Ausgängen“ Absender-Münzen befinden. Die betroffenen Münzen selbst werden natürlich nicht verschwendet.

Um den Empfänger zu verbergen, können wir jedoch keine gefälschten „Ausgaben“ generieren. Daher hat in UTXO jeder „Ausgang“ seine eigene eindeutige Adresse und ist kryptografisch mit der Adresse des Empfängers dieser Münzen verknüpft. Im Moment gibt es keine Möglichkeit, die Beziehung zwischen der eindeutigen "Exit" -Adresse und der Adresse des Empfängers zu identifizieren, ohne seine geheimen Schlüssel zu kennen.

In einem kontobasierten Modell können wir keine einmaligen Adressen verwenden (andernfalls handelt es sich bereits um ein Modell für "Exits"). Daher müssen Empfänger und Absender unter anderen Konten in der Blockchain geknetet werden. Gleichzeitig werden verschlüsselte 0-Münzen von den gekneteten Konten abgebucht (oder 0 wird hinzugefügt - im Falle eines Knetens des Empfängers), ohne dass sich der tatsächliche Kontostand ändert.

Da sowohl der Absender als auch der Empfänger immer eine permanente Adresse haben, müssen hier dieselben Gruppen zum Mischen mit denselben Adressen verwendet werden. Es ist einfacher, dies anhand eines Beispiels zu betrachten.

Angenommen, Alice hat beschlossen, zu Bobs Wohltätigkeit beizutragen, zieht es jedoch vor, dass die Übertragung für einen externen Beobachter anonym bleibt. Um sich im Feld des Absenders zu verkleiden, gibt sie dann auch die Konten von Adam und Adele ein. Und um Bob zu verstecken - im Empfängerfeld zusätzlich Ben- und Bill-Konten. Alice machte die nächste Rate und beschloss, Alex und Amanda neben sich und Bruce und Bengen neben Bob zu betreten. In diesem Fall gibt es bei der Analyse der Blockchain in diesen beiden Transaktionen nur ein sich überschneidendes Teilnehmerpaar - Alice und Bob, die diese Transaktionen dekanonymisieren.

Bild

Transaktionsrennen


Wie bereits erwähnt, verschlüsselt der Benutzer sein Guthaben und den Überweisungsbetrag, um sein Guthaben in kontobasierten Systemen zu verbergen. Darüber hinaus muss er nachweisen, dass der Saldo auf seinem Konto nicht negativ bleibt. Das Problem ist, dass der Benutzer beim Erstellen einer Transaktion Beweise für seinen aktuellen Status des Kontos erstellt. Und was passiert, wenn Bob eine Transaktion an Alice sendet und diese früher akzeptiert wird als von Alice gesendet? Dann wird Alices Transaktion als ungültig angesehen, da der Nachweis des Gleichgewichts vor der Annahme der Transaktion Bob erstellt wurde.

Bild

Die erste Lösung in einer solchen Situation besteht darin, Ihr Konto vor der Transaktion einzufrieren. Dieser Ansatz ist jedoch nicht geeignet, da neben der Komplexität der Lösung eines solchen Problems in einem verteilten System in einem anonymen Schema nicht klar ist, wessen Konto gesperrt werden soll.

Um dieses Problem zu lösen, trennt die Technologie eingehende und ausgehende Transaktionen: Geldausgaben wirken sich unmittelbar auf die Bilanz aus und Einnahmen werden abgegrenzt. Dazu wird das Konzept der „Ära“ eingeführt - eine Gruppe von Blöcken fester Größe. Die aktuelle „Ära“ wird bestimmt, indem die Blockhöhe durch die Größe der Gruppe geteilt wird. Bei der Verarbeitung der Transaktion aktualisiert das Netzwerk sofort den Kontostand des Absenders und fügt das Guthaben des Empfängers dem Laufwerk hinzu. Die angesammelten Mittel stehen dem Zahlungsempfänger nur dann zur Verfügung, wenn eine neue „Ära“ beginnt.

Infolgedessen kann der Benutzer Transaktionen senden, unabhängig davon, wie oft er Geld erhält (sofern sein Kontostand dies zulässt). Die Größe einer Epoche hängt davon ab, wie schnell sich die Blöcke im Netzwerk ausbreiten und wie schnell die Transaktion in den Block fällt.

Diese Lösung funktioniert gut bei vertraulichen Überweisungen, aber bei anonymen Transaktionen treten, wie wir später sehen werden, ernsthafte Probleme auf.

Angriffsschutz wiederholen


In kontobasierten Blockchains wird jede Transaktion mit dem privaten Schlüssel des Absenders signiert, wodurch der Prüfer davon überzeugt wird, dass die Transaktion nicht geändert wurde und vom Eigentümer dieses Schlüssels erstellt wurde. Was aber, wenn der Angreifer, der den Übertragungskanal abgehört hat, diese Nachricht abfängt und genau dieselbe Sekunde sendet? Der Prüfer überprüft die Unterschrift der Transaktion und ist von ihrer Urheberschaft überzeugt, und das Netzwerk belastet den Saldo des Absenders erneut mit dem gleichen Betrag.

Dieser Angriff wird als Wiederholungsangriff bezeichnet. Im UTXO-Modell sind solche Angriffe nicht relevant, da der Angreifer versucht, die verbrauchten Ausgaben zu verwenden, die an sich nicht gültig sind und vom Netzwerk zurückgewiesen werden.

Um dies zu verhindern, wird ein zufälliges Datenfeld in die Transaktion eingefügt, das als Nonce oder einfach als "Salt" bezeichnet wird. Wenn Sie eine Transaktion mit einem Salt erneut senden, prüft der Prüfer, ob diese Nonce bereits verwendet wurde, und betrachtet diese Transaktion, falls nicht, als gültig. Um nicht den gesamten Verlauf von Nonce-Benutzern in der Blockchain zu speichern, wird dieser normalerweise bei der ersten Transaktion als Null angenommen und dann um Eins erhöht. Das Netzwerk kann nur überprüfen, ob sich die Nonce der neuen Transaktion von der Vergangenheit um eins unterscheidet.

In einem anonymen Übersetzungsschema tritt das Problem der Validierung von Nonce-Transaktionen auf. Wir können nonce nicht explizit an die Absenderadresse binden, da dies offensichtlich die Übersetzung deanonymisiert. Wir können auch keine Einheit zum Nonce aller teilnehmenden Konten hinzufügen, da dies zu Konflikten mit anderen Übersetzungen führen kann, die verarbeitet werden.

Die Autoren von Zether schlagen vor, Nonce kryptografisch zu generieren - abhängig von der "Ära". Zum Beispiel:

Bild

Hier ist x der geheime Schlüssel des Absenders, und die G- Epoche ist ein zusätzlicher Generator für die Ära, der durch Hashing einer Zeichenfolge der Form 'Zether +' erhalten wird. Nun scheint das Problem gelöst zu sein - wir legen das Nonce des Absenders nicht offen und stören das Nonce der unbeteiligten Teilnehmer nicht. Dieser Ansatz stellt jedoch eine ernsthafte Einschränkung dar: Ein Konto kann in der „Ära“ nicht mehr als eine Transaktion senden. Dieses Problem bleibt leider ungelöst und macht derzeit eine anonyme Version von Zether unserer Meinung nach kaum zur Verwendung geeignet.

Zero-Confidence-Beweise


Bei UTXO muss der Absender dem Netzwerk nachweisen, dass er keinen negativen Betrag ausgibt, da es sonst möglich wird, neue Münzen aus der Luft zu generieren (warum dies möglich war, haben wir in einem der vorherigen Artikel geschrieben ). Und unterschreiben Sie auch die „Eingaben“ mit einer Ringsignatur, um zu beweisen, dass sich unter den Knetmünzen Gelder befinden, die ihm gehören.

In der anonymen Version der kontobasierten Blockchain sind Beweisausdrücke viel komplizierter. Der Absender beweist, dass:

  1. Der gesendete Betrag ist positiv;
  2. Der Saldo bleibt nicht negativ;
  3. Der Absender hat die Anzahl der Überweisungen (einschließlich Null) korrekt verschlüsselt.
  4. Der Kontostand wird nur vom Absender und vom Empfänger geändert.
  5. Der Absender besitzt den geheimen Schlüssel von seinem Konto und steht wirklich auf der Liste der Absender (unter den Beteiligten).
  6. Die in der Transaktion verwendete Nonce ist korrekt zusammengesetzt.

Für solch komplexe Beweise verwenden die Autoren eine Mischung aus Bulletproof (einer der Autoren war übrigens an seiner Erstellung beteiligt) und dem Sigma-Protokoll , das Sigma-Bullets genannt wird. Der formale Nachweis einer solchen Aussage ist eine ziemlich schwierige Aufgabe und schränkt die Anzahl der Personen, die mit der Implementierung der Technologie beginnen möchten, erheblich ein.

Was ist das Ergebnis?


Unserer Meinung nach kann der Teil von Zether, der kontobasierten Blockchains Datenschutz verleiht, jetzt durchaus verwendet werden. Gegenwärtig unterliegt eine anonyme Version der Technologie ernsthaften Einschränkungen bei ihrer Verwendung und ihrer Komplexität bei der Implementierung. Vergessen Sie jedoch nicht, dass die Autoren es erst vor wenigen Monaten veröffentlicht haben und vielleicht jemand anderes heute eine Lösung für die Probleme finden wird. In der Tat wird Wissenschaft auf diese Weise betrieben.

Source: https://habr.com/ru/post/de452184/


All Articles