Wir eröffnen eine Reihe von Veröffentlichungen über das Gerät verschiedener Blockchains und beginnen mit der Forschung mit Monero. Dies ist eine ziemlich bekannte Kryptowährung, die eine Reihe interessanter algorithmischer und kryptografischer Lösungen implementiert. Vor einigen Monaten wurde Monero Core um die Unterstützung von Mehrfachsignaturen erweitert, und im heutigen Artikel werden wir uns diese Technologie genauer ansehen.

Multi-Signaturen sind ein Mechanismus zum Erstellen und Verwenden von gemeinsam genutzten Brieftaschen. Das Konzept selbst ist nicht neu, es wurde bereits in einigen Kryptowährungen wie Bitcoin, Ethereum und anderen implementiert. Sein Kern liegt in der gemeinsamen Inhaberschaft und Veräußerung von Brieftaschenfonds. Für die Veräußerung von Geldern gelten einige Einschränkungen: Um eine Transaktion durchzuführen, muss eine bestimmte Anzahl von Stimmen gesammelt werden, die bei der Erstellung der Brieftasche festgelegt wird und von der Anzahl der Eigentümer abhängt.
Diese Parameter kennzeichnen das sogenannte "Schema" einer Brieftasche, z. B. 3/3 - eine Brieftasche für drei Eigentümer mit den erforderlichen drei Signaturen zum Senden einer Transaktion oder 2/3 - eine Brieftasche für drei Eigentümer mit den erforderlichen zwei Signaturen eines ihrer Eigentümer. Es ist zu beachten, dass es in der Multisignatur-Brieftasche kein Konzept für „Ihre Aktie“ und „meine Aktie“ gibt. Alle Fonds gehören allen Teilnehmern gleichzeitig.
Kryptographie in Monero
Die Kryptographie in Monero (wie in den meisten anderen Kryptowährungen) basiert auf elliptischen Kurven. Sie können darüber
auf Wikipedia lesen. Kurz gesagt, die Vorteile dieses Verschlüsselungssystems sind eine höhere kryptografische Stärke im Vergleich zu klassischen kryptografischen Systemen, eine kleine Schlüsselgröße und eine höhere Geschwindigkeit kryptografischer Operationen.
Jede Brieftasche im Monero-Netzwerk verfügt über zwei Paare (private und öffentliche) Schlüssel - Anzeigen und Ausgeben. Die Ansicht und die Ausgaben des öffentlichen Schlüsselpaars werden als Brieftaschenadresse bezeichnet. Sie können es als Adresse für den Erhalt von Geldern verwenden. Wenn Sie Informationen über die Anzahl und Größe der Belege in Ihrem Portemonnaie an Dritte weitergeben möchten, können Sie zusätzlich zur Adresse einen privaten Ansichtsschlüssel angeben. Ein Paar aus privatem Ansichtsschlüssel und öffentlichen Ausgaben wird als Tracking-Schlüssel bezeichnet. Damit können Sie den Eingang von Geldern in der Brieftasche sehen (aber nicht die Kosten) und es ist absolut sicher - wenn Sie ein solches Schlüsselpaar besitzen, können Sie Ihr Geld nicht ausgeben.
Der vielleicht geheimste Schlüssel sind private Ausgaben - Sie sollten ihn mit niemandem teilen, weil Wenn Sie es und einen privaten Ansichtsschlüssel besitzen, können Sie die Brieftasche verwalten.
Weiter im Artikel werden wir öffentliche Schlüssel in Großbuchstaben (z. B. B - öffentlicher Ausgabenschlüssel) und private Kleinbuchstaben (b - privater Ausgabenschlüssel) bezeichnen. Um einige der folgenden Berechnungen zu verstehen, zeigen wir im Artikel, wie der öffentliche Schlüssel vom privaten geerbt wird:
Wenn
G ein fester Punkt ist, ergibt das Multiplizieren eines privaten Schlüssels (Skalars) mit diesem einen öffentlichen Schlüssel, der auch ein Punkt auf einer elliptischen Kurve ist.
Monero-Netzwerksignaturen
Die der Technologie zugrunde liegende Idee ist einfach: Jeder Wallet-Teilnehmer behält nur einen Teil des privaten Ausgabenschlüssels, und beim Bilden und Signieren von Transaktionen werden alle diese Teile zu einem einzigen Schlüssel zusammengefasst.
Natürlich kann zu keinem Zeitpunkt einer der Teilnehmer den gesamten Schlüssel abholen. Der öffentliche Ausgabenschlüssel wird von jedem Teilnehmer vollständig gespeichert. Jeder der Teilnehmer speichert auch die Vollversion des privaten und öffentlichen Ansichtsschlüssels, mit dem Sie zusammen mit den öffentlichen Ausgaben eingehende Belege an einer gemeinsamen Adresse anzeigen können.
Erstellen einer Multisig-Brieftasche in Monero
Die aktuelle Release-Version von Monero unterstützt nur N / N- und N-1 / N-Schemata.
Der Erstellungsprozess erfolgt in 1 oder 2 Stufen für die N / N- bzw. N - 1 / N-Schaltungen. In der ersten Phase tauschen die Teilnehmer des Prozesses private Ansichten und öffentliche Ausgabenschlüssel miteinander aus und berechnen die Summe dieser Schlüssel - alle Ansichten und alle Ausgaben. Somit wird der private Ansichtsschlüssel der Brieftasche zur Summe der Ansichtsschlüssel für alle Schemata, und der öffentliche Ausgabenschlüssel für das N / N-Schema ist die Summe der öffentlichen Ausgabenschlüssel aller Teilnehmer. Damit ist die Generierung der N / N-Brieftasche beendet.
Für N - 1 / N Brieftaschen wird ein weiterer Schlüsselsatz angezeigt. Dieser Satz ist ein Array von privaten Schlüsseln, die von jedem der öffentlichen Ausgabenschlüssel der anderen Teilnehmer als Produkt seines aktuellen privaten Ausgabenschlüssels berechnet werden, dh (der Einfachheit halber ohne die Hash-Funktion):
Und ähnlich für jeden der Teilnehmer.
Der private Ausgabenschlüssel jedes Teilnehmers ist die Summe seiner Multisig-Schlüssel, dh:
Jeder Teilnehmer führt diese Operation aus. Eine wichtige Eigenschaft solcher Arbeiten sollte zum Beispiel beachtet werden:
Aus dieser Gleichheit folgt, dass jede Brieftasche einen (in unserem Beispiel mit 2/3 Schema) Multisig-Schlüssel hat, den ein anderer Teilnehmer hat.
Nach der Generierung tauschen die Teilnehmer öffentliche Multisig-Schlüssel aus:
Im Endeffekt wird der Brieftaschenschlüssel für öffentliche Ausgaben berechnet, indem die eindeutigen Werte der öffentlichen Multisig-Schlüssel summiert werden. In unserem Beispiel ist dies beispielsweise:
Wie wir sehen können, benötigen wir zur Berechnung des Ausgabenschlüssels (sowohl privat als auch öffentlich) im Fall von 2/3 genügend Informationen von zwei beliebigen Teilnehmern.
Damit ist die Erstellung der Brieftasche abgeschlossen und sie kann gemäß dem ausgewählten Schema verwendet werden.
Transaktionen in Monero
Um zu erklären, wie Multisig-Transaktionen erstellt werden, sehen wir uns kurz an, wie eine Transaktion in Monero organisiert ist. Vereinfacht (ohne Ringsignaturen und RingCT) kann man sich Folgendes vorstellen:
Abbildung 1. Vereinfachte Transaktionsansicht
Hier rechts werden die Ausgaben der Transaktion angezeigt - das Geld, das sie generiert (eine direkte Analogie: Banknoten in einer Brieftasche), und die Eingaben links sind das Geld, das sie verbrennt.
Wenn Alice also 1 XMR an Bob senden möchte, sammelt sie 1 XMR plus Provision unter ihren nicht ausgegebenen Ausgaben, setzt sie an die Stelle der Transaktionseingaben, berechnet für jede von ihnen ein Schlüsselbild, generiert Ausgaben für die Menge von 1 XMR und berechnet für jede von sie geben den Schlüssel aus.
Nach dem Empfang der Transaktion stellt Bob den Ausgabeschlüssel für jede der Ausgaben mithilfe der privaten Ansicht und der öffentlichen Ausgabenschlüssel wieder her. Wenn die in der Transaktion wiederhergestellten und empfangenen Schlüssel übereinstimmen, betrachtet er diese Ausgabe als für ihn bestimmt.
Trotz der Tatsache, dass sich eine Multisig-Transaktion aus Sicht des Netzwerks nicht von jeder anderen Transaktion unterscheidet, ist ihre Erstellung etwas komplizierter und in mehreren Phasen:
- Die Teilnehmer tauschen teilweise Schlüsselbilder gegen bekannte Ausgaben aus (oder tauschen einfach Ausgaben aus).
- Die Teilnehmer synchronisieren ihre Brieftaschen neu, um ein genaues Gleichgewicht zu erhalten, wobei das bereits vollständige Schlüsselbild berücksichtigt wird
- Der Absender bereitet die Transaktion vor, signiert sie und sendet sie an den nächsten Teilnehmer
- Jeder nachfolgende Teilnehmer fügt einen Teil seiner RingCT-Signatur hinzu.
- Letzter Unterzeichner schließt RingCT ab
Und jetzt kann die Transaktion an das Netzwerk gesendet werden.
Schlüsselbilderzeugung und Ausgabefreigabe
Während des Scannens der Blockchain (Synchronisation) kann die Brieftasche nicht bestimmen, welche bestimmten Eingaben ihre Ausgaben ausgeben, da sie nicht in der Lage ist, das Schlüsselbild für sie zu berechnen. Daher sieht er nur eingehende Transaktionen (für sie sind nur Tracking-Schlüsselpaare ausreichend).
Um eine korrekte Transaktion zu erstellen, müssen Sie das Schlüsselbild für jede der Ausgaben wiederherstellen, die Blockchain scannen und bestimmen, welche davon ausgegeben werden, und erst dann mit der Generierung fortfahren.
Betrachten Sie den Prozess der Bildung eines Schlüsselbildes. Es wird nach folgender Formel berechnet:
Wenn Hp eine bestimmte vorgegebene Hash-Funktion ist,
P der öffentliche Exit-Schlüssel ist (siehe Abbildung 1),
x der private Exit-Schlüssel ist, den wir für den Empfänger dieser Ausgabe wiederherstellen, wird er wie folgt berechnet:
Dabei ist
Hs eine bestimmte bekannte kryptografische Hash-Funktion,
a ein privater Ansichtsschlüssel,
R ein öffentlicher Transaktionsschlüssel (Tx-Pub-Schlüssel, siehe Abbildung 1) und
b ein privater Ausgabenschlüssel. Wenn wir einen Ausdruck durch einen anderen ersetzen und die Klammern öffnen, erhalten wir:
Da wir jedoch keinen vollständigen Ausgabenschlüssel haben, müssen wir ihn wiederherstellen. Im Fall von N / N ist alles einfach (zum Beispiel 3/3):
Hier ist
H p (P) b i ein
Teilschlüsselbild, das vom i-ten Teilnehmer empfangen wird.
Für Systeme N - 1 / N (2/3 im Namen des ersten Teilnehmers ohne Teilnahme des dritten):
in diesem Fall ist
H p (P) b i B j ein
Teilschlüsselbild.Das Wesentliche beim Austausch von Exits ist genau, dass die erforderliche Anzahl von Unterzeichnern der Transaktion ihr Teilschlüsselbild für jeden der Exits an andere Teilnehmer in der Brieftasche sendet. Gleichzeitig geben die Teilnehmer ihre privaten Schlüssel nicht weiter, sodass ein externer Beobachter oder ein skrupelloser Teilnehmer nicht die Möglichkeit hat, den vollen Ausgabenschlüssel zurückzugewinnen und die Brieftasche allein in Besitz zu nehmen.
Mit diesen Daten kann der Transaktionsinitiator sie bilden und für die Signatur vorbereiten. Die generierte Transaktion wird an alle gesendet, die sich bereit erklären, sie zu signieren, um Ring-CT-Signaturen zu generieren. Alle erforderlichen Signaturen werden erstellt und die Transaktion wird an das Netzwerk gesendet.
Automatisierung des Datenaustauschs
Die obigen Verfahren werden zum Austauschen von Teilen von Schlüsseln und Schlüsselbildern beschrieben, die entweder einmal oder nach jeder gesendeten Transaktion ausgeführt werden müssen. In der aktuellen Implementierung von Monero Core Wallet wird vorgeschlagen, diese Aktionen manuell auszuführen, indem die erforderlichen Daten manuell über sichere Kommunikationskanäle mit ihren Korrespondenten ausgetauscht werden (indem die erforderlichen Daten aus der Brieftasche exportiert und über Instant Messenger oder auf andere Weise gesendet werden).
Sie können dies am Beispiel der Erstellung einer Brieftasche nach dem 2/3 Schema und der Unterzeichnung der Transaktion demonstrieren. Jeder der Teilnehmer führt die folgenden Befehle mit dem Dienstprogramm monero-wallet-cli aus:
[Brieftasche 9uKCgo]: prepare_multisig
MultisigV1baCWviNomMXe271W8HW4imh8SsnNEWP2bCswQfoB9MGzNZ8FUG3e8UCNm5toKQzSQH2e8rUWUCGazaCcvej1ToCQYBMovJZYaYiYWQvzsvyWruXycZdVDSsyugjEzwQNK3FUEkug2LXiH91NmekGb7kp9gK9kuoxDDhGn1nLKXUpnXR5
Senden Sie diese Multisig-Informationen an alle anderen Teilnehmer und verwenden Sie dann make_multisig <Threshold> <info1> [<info2> ...] mit den Multisig-Informationen anderer
Dies schließt den PRIVATE-Ansichtsschlüssel ein und muss daher nur den Teilnehmern dieser Multisig-Brieftasche mitgeteilt werden
[Wallet 9uKCgo]: make_multisig 2 MultisigV1XQugvU4JwcwTQbKdH5qGFnavxUX54wGxNis2iN6zoLD94DahnXbyNxH1NQBp2rYRFFJCT2uiJbssHLJYEAb8X1tS5UCqTXYu3FkgRNSZt5mRNgE58iXZHPj839Pbm3ozGcXmRT6GcRMMxMjRonfYKpnPq1UyZSMN7Qr9AYin1gYyoJSh MultisigV1HVqTW8P4UNWUE8QfBaEdwDWJuXBWEPnTrKqVJiUudGG14cHREk9TKmeR9xzSs4wf4jd22mV94C2ehSViApawnpp2SpRqp19eKXLHz2JmNp7eGR6TJMt4VsDTqANRwb1FtD9weef342f5KXDRZK7iQT1MTubyHhEcFyV5aLCjjQ8owMkH
Ein weiterer Schritt ist erforderlich
MultisigxV1PQwytRuYGkB6UEVJ7v2S7q492cwNTdwySXyasToAuQQq73TvM1rBrog5bcYz5w2P6Z4jwKtzrHr7shRGo5mAShvLVbYtBdQNhQsizMb51K7iaWQB4te5mQaiB1cok84CbvA9WKnVpTJGyb7SbS7NwAgmpEhU812RTdzrdHp5sD41duYtRNW6qna5mTMYmtTjAEdKpKCvM6EwhV4ncWscpvoBfyYP
Senden Sie diese Multisig-Informationen an alle anderen Teilnehmer und verwenden Sie finalize_multisig <info1> [<info2> ...] mit den Multisig-Informationen anderer
[Wallet 9uKCgo]: finalize_multisig MultisigxV1PdeMJo5rxcWTXDJ7rbyuacBseugsn2djZKKEdwvFYVmz73TvM1rBrog5bcYz5w2P6Z4jwKtzrHr7shRGo5mAShvLUxykuq5gho7gGQBCEa3JmBaY7rNHqqUaCUs1WWQi9tojZTMmCJJ4evwJzcXEDqcAd7ShwxsJtJtXdiATs54BbBfyCbwXbnDRKAtagJF36z74KJA58NgEmnHv23ZQeePCoacM MultisigxV1RTwyE53FjKPQaAn4ZMWM5hc8C92eJndpyKby4L9HpF2TUxykuq5gho7gGQBCEa3JmBaY7rNHqqUaCUs1WWQi9tojVbYtBdQNhQsizMb51K7iaWQB4te5mQaiB1cok84CbvA928U2yJFK86jNxtMopxHkcnYjjeYfp8TAB53Y1CukBiHfL2M4EztDALXLReXjJxkMry65Jw6vVePJp2T5CW8T8QE5
Vor dem Senden einer Transaktion müssen die Parteien teilweise Schlüsselbilder austauschen:
[Brieftasche 9uKCgo]: export_multisig_info ki1
Multisig-Informationen nach ki1 exportiert
[Brieftasche 9uKCgo]: import_multisig_info ki2 ki3
Höhe 1103873, txid <f7e648915287fafca1dc67eb26267e09f92bba7ab7fd52a12600c3e6440db0eb>, 2.000000000000, idx 0/0
Höhe 1103882, txid <2e3a5591c741c0943a47a2bcbd1ec26493158088c88308bcbfc97423ea95c491>, 0,009000000000, idx 0/0
Multisig-Informationen importiert
Anschließend wird die Brieftasche unter Berücksichtigung der vollständigen Schlüssel erneut synchronisiert. Nachdem der Teilnehmer Daten zu ausgehenden Zahlungen erhalten hat, kann er die Transaktion vorbereiten:
[Brieftasche 9uKCgo]: 9vUnTucAioDHD4ZqrFHXAgfLqrsC3LkZ6JFr5axBLhDiFMaHuEk33aqXimoZEMtQh5ibdYxcNSBw2hBZLAsCnuw4B4rBeZX 1 übertragen
In dieser Transaktion ist keine Zahlungs-ID enthalten. Ist das okay (J / Ja / N / Nein): Y.
Derzeit gibt es einen Rückstand von 2 Blöcken auf dieser Gebührenebene. Ist das okay (J / Ja / N / Nein) Y.
Transaktion 1/1:
Ausgaben ab Adressindex 0
Senden von 1.000000000000. Die Transaktionsgebühr beträgt 0.012000000000
Ist das okay (J / Ja / N / Nein): Y.
Nicht signierte Transaktion (en) erfolgreich in Datei geschrieben: multisig_monero_tx
Die generierte Datei muss zum Signieren und Senden an das Netzwerk an einen anderen Teilnehmer übertragen werden:
[Brieftasche 9twQxU]: sign_multisig multisig_monero_tx
Geladen 1 Transaktionen, für 1,031762770000, Gebühr ,012000000000, Senden 1,000000000000 zu 9vUnTucAioDHD4ZqrFHXAgfLqrsC3LkZ6JFr5axBLhDiFMaHuEk33aqXimoZEMtQh5ibdYxcNSBw2hBZLAsCnuw4B4rBeZX, ,019762770000 Änderung 9uKCgopHzXrQLnph1ZNFQgdxZZyGhKRLfaNv7EEgWc1f3LQPSZR7BP4ZZn4oH7kAbX3kCd4oDYHg6hE541rQTKtHB7ufnmk, mit min-Ringgröße 7, ohne Zahlungs-ID. Ist das okay (J / Ja / N / Nein): Y.
Transaktion erfolgreich in Datei multisig_monero_tx, txid 1d28af64bc78d05b625c4f7af7c321d4c8943c4c2692f57aa53e303387f40db6 signiert
[Brieftasche 9twQxU]: submit_multisig multisig_monero_tx
Geladen 1 Transaktionen, für 1,031762770000, Gebühr ,012000000000, Senden 1,000000000000 zu 9vUnTucAioDHD4ZqrFHXAgfLqrsC3LkZ6JFr5axBLhDiFMaHuEk33aqXimoZEMtQh5ibdYxcNSBw2hBZLAsCnuw4B4rBeZX, ,019762770000 Änderung 9uKCgopHzXrQLnph1ZNFQgdxZZyGhKRLfaNv7EEgWc1f3LQPSZR7BP4ZZn4oH7kAbX3kCd4oDYHg6hE541rQTKtHB7ufnmk, mit min-Ringgröße 7, ohne Zahlungs-ID. Ist das okay (J / Ja / N / Nein): Y.
Transaktion erfolgreich übermittelt, Transaktion <1d28af64bc78d05b625c4f7af7c321d4c8943c4c2692f57aa53e303387f40db6>
Sie können den Status mit dem Befehl `show_transfers` überprüfen.
Offensichtlich kann dieser Ansatz, obwohl er es Ihnen ermöglicht, Multisig-Wallets zu verwenden, wenn Sie dies wirklich möchten, nicht von unerfahrenen Benutzern oder beispielsweise Benutzern von mobilen Wallets angewendet werden.
Aus diesem Grund entwickeln wir eine eigene Lösung, die den Austausch dieser Daten automatisiert, ohne die Privatsphäre der Parteien und die Sicherheit von Transaktionen zu verletzen, um die Mehrsignaturtechnologie in Monero mehr Menschen zugänglich zu machen. Die Lösung basiert auf Anwendungen, die sowohl Standard- als auch Multisig-Wallets unterstützen, sowie auf einem offenen Serverteil, der den Datenaustausch und die Weiterleitung an entsprechende Wallets ermöglicht.
Weitere
Informationen zu diesem Projekt finden Sie unter
wallet.exan.tech und zu den Ressourcen, die wir für das Monero-Netzwerk unterstützen, finden Sie unter
exan.tech/en/projects/monero .
Fazit
Wir haben den Mechanismus zum Erstellen von Multisig-Wallets und zum Erstellen von Transaktionen mit mehreren Signaturen in Monero untersucht. Derzeit wird nur eine begrenzte Anzahl von Signaturschemata unterstützt, diese werden jedoch auf beliebige Formeln der Form 2/5 usw. erweitert. Der vorhandene Mechanismus zum Austausch der Daten, die für das Funktionieren der Brieftasche erforderlich sind, ist recht unpraktisch, kann jedoch aufgrund der Offenheit des Monero-Ökosystems mithilfe von Lösungen von Drittanbietern auf die für normale Benutzer übliche Qualität gebracht werden.
In den folgenden Artikeln werden wir über andere Aspekte des Monero-Geräts sprechen: RingCT- und Ringsignaturen, die Wallet-Architektur und die libwallet-Bibliothek sowie die Entwicklungsperspektiven dieser Blockchain.
Stellen Sie Ihre Fragen, schlagen Sie Themen für neue Artikel über Kryptowährungstechnologien vor und abonnieren Sie unsere Gruppe auf
Facebook , um über unsere Veranstaltungen und Veröffentlichungen auf dem Laufenden zu bleiben.