Vertrauliche Transaktionen in Monero oder wie man unbekannte Dinge an unbekannte Ziele überträgt

Wir setzen unsere Serie über die Monero-Blockchain fort und der heutige Artikel konzentriert sich auf das RingCT-Protokoll (Ring Confidential Transactions), das vertrauliche Transaktionen und neue Ringsignaturen einführt. Leider gibt es im Internet kaum Informationen darüber, wie es funktioniert, und wir haben versucht, diese Lücke zu schließen.

Vertrauliche Transaktionen in Monero oder wie man unbekannte Dinge an unbekannte Ziele überträgt

Wir werden darüber sprechen, wie das Netzwerk mithilfe dieses Protokolls Überweisungsbeträge verbirgt, warum es die klassischen Kryptonoten-Ringsignaturen aufgegeben hat und wie sich diese Technologie weiterentwickeln wird.

Da es sich bei diesem Protokoll um eine der komplexesten Technologien in Monero handelt, benötigt der Leser Grundkenntnisse über das Design dieser Blockchain und vorübergehende Kenntnisse der Elliptischen-Kurven-Kryptographie (um diese Kenntnisse aufzufrischen, können Sie die ersten Kapitel unseres Buches lesen). vorheriger Artikel über Multisignaturen).

RingCT-Protokoll

Einer der möglichen Angriffe auf Kryptowährungen ist die Blockchain-Analyse, die auf der Kenntnis von Betrag und Zeitpunkt der gesendeten Transaktion basiert. Dies erlaubt Den Suchbereich nach Ausgängen, die für den Angreifer von Interesse sind, erheblich einschränken. Um sich vor einer solchen Analyse zu schützen, hat Monero ein anonymes Transaktionsprotokoll implementiert, das die Überweisungsbeträge im Netzwerk vollständig verbirgt.

Es ist erwähnenswert, dass die Idee, Beträge zu verbergen, nicht neu ist. Der Bitcoin Core-Entwickler Greg Maxwell war einer der ersten, der es in seinem Beitrag beschrieb Artikel Vertrauliche Transaktionen. Die aktuelle Implementierung von RingCT ist seine Modifikation mit der Möglichkeit, Ringsignaturen (auch ohne diese) zu verwenden, und daher erhielt es seinen Namen – Ring Confidential Transactions.

Unter anderem hilft das Protokoll dabei, Probleme mit der Vermischung von Staubausgängen zu beseitigen – Ausgaben kleiner Mengen (normalerweise in Form von Wechselgeld aus Transaktionen erhalten), die mehr Probleme verursachten, als sie wert waren.

Im Januar 2017 erfolgte ein Hard Fork des Monero-Netzwerks, der die optionale Nutzung vertraulicher Transaktionen ermöglichte. Und bereits im September desselben Jahres, mit der Version 6 des Hard Forks, waren solche Transaktionen die einzigen, die im Netzwerk erlaubt waren.

RingCT verwendet mehrere Mechanismen gleichzeitig: mehrschichtige verknüpfte spontane anonyme Gruppensignaturen (Multilayered Linkable Spontaneous Anonymous Group Signature, im Folgenden als MLSAG bezeichnet), ein Commitment-Schema (Pedersen Commitments) und Range Proofs (für diesen Begriff gibt es keine etablierte Übersetzung ins Russische). .

Das RingCT-Protokoll führt zwei Arten anonymer Transaktionen ein: einfache und vollständige. Die erste generiert das Wallet, wenn eine Transaktion mehr als eine Eingabe erfordert, die zweite – im umgekehrten Fall. Sie unterscheiden sich in der Validierung von Transaktionsbeträgen und den mit einer MLSAG-Signatur signierten Daten (wir werden weiter unten mehr darüber sprechen). Darüber hinaus können Transaktionen vom Typ „Full“ mit beliebig vielen Eingaben generiert werden, es gibt keinen grundsätzlichen Unterschied. Im Buch „Null zu Monero“ In diesem Zusammenhang heißt es, dass die Entscheidung, vollständige Transaktionen auf eine Eingabe zu beschränken, in Eile getroffen wurde und sich in Zukunft ändern könnte.

MLSAG-Signatur

Erinnern wir uns daran, was signierte Transaktionseingaben sind. Jede Transaktion gibt etwas Geld aus und generiert es. Die Generierung von Geldern erfolgt durch die Erstellung von Transaktionsoutputs (eine direkte Analogie sind Rechnungen), und der Output, den die Transaktion ausgibt (schließlich geben wir im wirklichen Leben Banknoten aus), wird zum Input (Vorsicht, es ist sehr leicht, verwirrt zu werden). Hier).

Eine Eingabe verweist auf mehrere Ausgaben, gibt jedoch nur eine aus und erzeugt so eine „Nebelwand“, die die Analyse des Übersetzungsverlaufs erschwert. Wenn eine Transaktion mehr als eine Eingabe hat, kann eine solche Struktur als Matrix dargestellt werden, wobei die Zeilen die Eingaben und die Spalten die gemischten Ausgaben sind. Um dem Netzwerk zu beweisen, dass die Transaktion genau ihre Ausgaben ausgibt (ihre geheimen Schlüssel kennt), werden die Eingaben mit einer Ringsignatur signiert. Eine solche Signatur garantiert, dass der Unterzeichner die geheimen Schlüssel für alle Elemente einer der Spalten kannte.

Vertrauliche Transaktionen nutzen keine klassischen Transaktionen mehr Crypto Ringsignaturen wurden durch MLSAG ersetzt – eine Version ähnlicher einschichtiger Ringsignaturen, die für mehrere Eingaben angepasst sind. LSAG.

Sie werden Multilayer genannt, weil sie mehrere Eingaben gleichzeitig signieren, von denen jede mit mehreren anderen gemischt wird, d. h. eine Matrix wird signiert und nicht eine Zeile. Wie wir später sehen werden, hilft dies, die Signaturgröße zu sparen.

Schauen wir uns an, wie eine Ringsignatur entsteht, am Beispiel einer Transaktion, die 2 echte Ausgaben ausgibt und m – 1 zufällige Ausgaben aus der Blockchain zum Mischen verwendet. Bezeichnen wir die öffentlichen Schlüssel der Ausgaben, die wir ausgeben, als
Vertrauliche Transaktionen in Monero oder wie man unbekannte Dinge an unbekannte Ziele überträgt, und Schlüsselbilder für sie entsprechend: Vertrauliche Transaktionen in Monero oder wie man unbekannte Dinge an unbekannte Ziele überträgt Somit erhalten wir eine Größenmatrix 2 x m. Zunächst müssen wir die sogenannten Herausforderungen für jedes Ausgabepaar berechnen:
Vertrauliche Transaktionen in Monero oder wie man unbekannte Dinge an unbekannte Ziele überträgt
Wir beginnen die Berechnungen mit den Ausgaben, die wir mit ihren öffentlichen Schlüsseln ausgeben:Vertrauliche Transaktionen in Monero oder wie man unbekannte Dinge an unbekannte Ziele überträgtund ZufallszahlenVertrauliche Transaktionen in Monero oder wie man unbekannte Dinge an unbekannte Ziele überträgtAls Ergebnis erhalten wir folgende Werte:
Vertrauliche Transaktionen in Monero oder wie man unbekannte Dinge an unbekannte Ziele überträgt, die wir zur Berechnung der Herausforderung verwenden
Vertrauliche Transaktionen in Monero oder wie man unbekannte Dinge an unbekannte Ziele überträgtdas nächste Ausgabepaar (um leichter zu verstehen, was wir wo ersetzen, haben wir diese Werte in verschiedenen Farben hervorgehoben). Alle folgenden Werte werden im Kreis anhand der in der ersten Abbildung angegebenen Formeln berechnet. Als letztes muss die Herausforderung für ein Paar realer Ausgaben berechnet werden.

Wie wir sehen können, verwenden alle Spalten außer der Spalte mit den realen Ausgaben zufällig generierte ZahlenVertrauliche Transaktionen in Monero oder wie man unbekannte Dinge an unbekannte Ziele überträgt. Für π- Kolumne werden wir sie auch brauchen. Lasst uns transformierenVertrauliche Transaktionen in Monero oder wie man unbekannte Dinge an unbekannte Ziele überträgtin s:Vertrauliche Transaktionen in Monero oder wie man unbekannte Dinge an unbekannte Ziele überträgt
Die Signatur selbst ist ein Tupel all dieser Werte:

Vertrauliche Transaktionen in Monero oder wie man unbekannte Dinge an unbekannte Ziele überträgt

Diese Daten werden dann in eine Transaktion geschrieben.

Wie wir sehen können, enthält MLSAG nur eine Herausforderung c0, wodurch Sie die Signaturgröße einsparen können (die bereits viel Platz benötigt). Darüber hinaus kann jeder Inspektor die Daten verwendenVertrauliche Transaktionen in Monero oder wie man unbekannte Dinge an unbekannte Ziele überträgt, stellt die Werte c1,…, cm wieder her und überprüft dasVertrauliche Transaktionen in Monero oder wie man unbekannte Dinge an unbekannte Ziele überträgt. Damit ist unser Ring geschlossen und die Signatur verifiziert.

Für RingCT-Transaktionen des vollständigen Typs wird der Matrix mit gemischten Ausgaben eine weitere Zeile hinzugefügt, aber darüber werden wir weiter unten sprechen.

Pedersen Verpflichtungen

Verpflichtungssysteme (häufiger wird der englische Begriff „commitments“ verwendet) werden verwendet, damit eine Partei nachweisen kann, dass sie ein bestimmtes Geheimnis (Nummer) kennt, ohne es tatsächlich preiszugeben. Sie würfeln zum Beispiel mit einer bestimmten Zahl, erwägen die Verpflichtung und geben diese an die überprüfende Partei weiter. Somit berechnet der Prüfer im Moment der Offenlegung der Geheimnummer selbstständig die Verpflichtung und stellt so sicher, dass Sie ihn nicht getäuscht haben.

Monero-Verpflichtungen werden verwendet, um die Beträge der Überweisungen zu verbergen und nutzen die häufigste Option – Pedersen-Verpflichtungen. Übrigens eine interessante Tatsache: Zuerst schlugen die Entwickler vor, die Beträge durch gewöhnliches Mischen zu verbergen, d die Transaktionsgröße, wie wir weiter unten sehen werden).
Im Allgemeinen sieht Engagement so aus:
Vertrauliche Transaktionen in Monero oder wie man unbekannte Dinge an unbekannte Ziele überträgtWo C — die Bedeutung des Engagements selbst, a - versteckter Betrag, H ist ein fester Punkt auf der elliptischen Kurve (zusätzlicher Generator) und x – eine Art willkürliche Maske, ein zufällig generierter Versteckfaktor. Hier ist die Maske nötig, damit ein Dritter den Wert des Engagements nicht einfach erraten kann.

Wenn eine neue Ausgabe generiert wird, berechnet das Wallet das dafür erforderliche Commitment, und wenn es ausgegeben wird, nimmt es entweder den bei der Generierung berechneten Wert oder berechnet ihn neu, abhängig von der Art der Transaktion.

RingCT einfach

Bei einfachen RingCT-Transaktionen ist es notwendig, dass die Summe der Verpflichtungen der ersten und zweiten Transaktion die Summe der Verpflichtungen der ersten und zweiten Transaktion ist, um sicherzustellen, dass die Transaktion Outputs in einer Höhe erzeugt, die der Menge der Inputs entspricht (kein Geld aus dem Nichts produziert). die gleichen sein, das heißt:
Vertrauliche Transaktionen in Monero oder wie man unbekannte Dinge an unbekannte Ziele überträgt
Engagement-Kommissionen sehen das etwas anders – ohne Maske:
Vertrauliche Transaktionen in Monero oder wie man unbekannte Dinge an unbekannte Ziele überträgtWo a — Die Höhe der Provision ist öffentlich zugänglich.

Mit diesem Ansatz können wir der vertrauenden Partei nachweisen, dass wir die gleichen Beträge verwenden, ohne diese offenzulegen.

Schauen wir uns zur Verdeutlichung ein Beispiel an. Nehmen wir an, eine Transaktion gibt zwei Ausgaben (d. h. sie werden zu Eingaben) von 10 und 5 XMR aus und generiert drei Ausgaben im Wert von 12 XMR: 3, 4 und 5 XMR. Gleichzeitig zahlt er eine Provision von 3 XMR. Somit beträgt der ausgegebene Geldbetrag zuzüglich des generierten Betrags und der Provision 15 XMR. Versuchen wir, die Verpflichtungen zu berechnen und uns die Differenz ihrer Beträge anzusehen (denken Sie an die Mathematik):

Vertrauliche Transaktionen in Monero oder wie man unbekannte Dinge an unbekannte Ziele überträgt
Hier sehen wir, dass die Summen der Eingabe- und Ausgabemasken gleich sein müssen, damit die Gleichung konvergiert. Dazu generiert das Wallet zufällig x1, y1, y2 und y3, und der Rest x2 rechnet so:
Vertrauliche Transaktionen in Monero oder wie man unbekannte Dinge an unbekannte Ziele überträgt
Mithilfe dieser Masken können wir jedem Gutachter nachweisen, dass wir nicht mehr Mittel erwirtschaften, als wir ausgeben, ohne den Betrag offenzulegen. Original, oder?

RingCT voll

Bei vollständigen RingCT-Transaktionen ist die Überprüfung der Überweisungsbeträge etwas komplizierter. Bei diesen Transaktionen berechnet das Wallet die Verpflichtungen für Eingaben nicht neu, sondern verwendet die bei ihrer Generierung berechneten. In diesem Fall müssen wir davon ausgehen, dass wir nicht mehr die Differenz der Summen gleich Null bekommen, sondern:
Vertrauliche Transaktionen in Monero oder wie man unbekannte Dinge an unbekannte Ziele überträgt
Hier z — Unterschied zwischen Eingabe- und Ausgabemasken. Wenn wir darüber nachdenken zG als öffentlicher Schlüssel (was es de facto ist). z ist der private Schlüssel. Somit kennen wir den öffentlichen und den entsprechenden privaten Schlüssel. Mit diesen Daten können wir sie zusammen mit den öffentlichen Schlüsseln der gemischten Ausgaben in der MLSAG-Ringsignatur verwenden:
Vertrauliche Transaktionen in Monero oder wie man unbekannte Dinge an unbekannte Ziele überträgt
Somit stellt eine gültige Ringsignatur sicher, dass wir alle privaten Schlüssel einer der Spalten kennen, und wir können den privaten Schlüssel in der letzten Zeile nur kennen, wenn die Transaktion nicht mehr Geld generiert, als sie ausgibt. Hier ist übrigens die Antwort auf die Frage „Warum führt die Differenz in der Höhe der Zusagen nicht zu Null“ – wenn zG = 0, dann erweitern wir die Spalte mit realen Ausgaben.

Woher weiß der Empfänger des Geldes, wie viel Geld ihm überwiesen wurde? Hier ist alles einfach: Der Absender der Transaktion und der Empfänger tauschen Schlüssel mithilfe des Diffie-Hellman-Protokolls aus, verwenden den Transaktionsschlüssel und den Ansichtsschlüssel des Empfängers und berechnen das gemeinsame Geheimnis. Der Absender schreibt die mit diesem gemeinsamen Schlüssel verschlüsselten Daten über die Ausgabebeträge in spezielle Felder der Transaktion.

Reichweitenbeweise

Was passiert, wenn Sie als Betrag in den Verpflichtungen eine negative Zahl verwenden? Dies kann zur Generierung zusätzlicher Coins führen! Dieses Ergebnis ist inakzeptabel, daher müssen wir garantieren, dass die von uns verwendeten Beträge nicht negativ sind (natürlich ohne diese Beträge offenzulegen, sonst ist die Arbeit so viel und alles umsonst). Mit anderen Worten: Wir müssen beweisen, dass die Summe im Intervall liegt [0, 2n - 1].

Dazu wird die Summe jeder Ausgabe in Binärziffern unterteilt und das Commitment für jede Ziffer separat berechnet. Es ist besser, anhand eines Beispiels zu sehen, wie dies geschieht.

Nehmen wir an, dass unsere Mengen klein sind und in 4 Bit passen (in der Praxis sind das 64 Bit), und wir erstellen eine Ausgabe im Wert von 5 XMR. Wir berechnen die Verpflichtungen für jede Kategorie und die Gesamtverpflichtung für den Gesamtbetrag:Vertrauliche Transaktionen in Monero oder wie man unbekannte Dinge an unbekannte Ziele überträgt
Als nächstes wird jede Zusage mit einem Stellvertreter gemischt (Ci-2iH) und ist paarweise mit der Borromeo-Ringsignatur (einer weiteren Ringsignatur) signiert, die 2015 von Greg Maxwell vorgeschlagen wurde (mehr darüber können Sie lesen). hier):
Vertrauliche Transaktionen in Monero oder wie man unbekannte Dinge an unbekannte Ziele überträgtZusammenfassend wird dies als Bereichsnachweis bezeichnet und ermöglicht es Ihnen, sicherzustellen, dass Verpflichtungen Beträge innerhalb des Bereichs verwenden [0, 2n - 1].

Was kommt als nächstes?

In der aktuellen Implementierung beanspruchen Bereichsnachweise viel Platz – 6176 Byte pro Ausgabe. Dies führt zu größeren Transaktionen und damit höheren Gebühren. Um die Größe einer Monero-Transaktion zu reduzieren, führen Entwickler Bulletproofs anstelle von Borromeo-Signaturen ein – einen Range-Proof-Mechanismus ohne bitweise Verpflichtungen. Nach einigen SchätzungenSie sind in der Lage, die Größe des Reichweitennachweises um bis zu 94 % zu reduzieren. Übrigens wurde die Technologie Mitte Juli verabschiedet Prüfung von Kudelski Security, das weder in der Technologie selbst noch in der Umsetzung wesentliche Mängel erkennen ließ. Die Technologie wird bereits im Testnetzwerk eingesetzt und kann mit dem neuen Hard Fork voraussichtlich in das Hauptnetzwerk übergehen.

Stellen Sie Ihre Fragen, schlagen Sie Themen für neue Artikel über Technologien im Bereich Kryptowährung vor und abonnieren Sie auch unsere Gruppe in Facebookum über unsere Veranstaltungen und Veröffentlichungen auf dem Laufenden zu bleiben.

Source: habr.com

Kommentar hinzufügen