Mitglieder des Ethereum -F & E -Teams und des ZCASH -Unternehmens arbeiten an einem Forschungsprojekt zusammen, das sich mit der Kombination von Programmierbarkeit und Privatsphäre in Blockchains befasst. Dieser gemeinsame Beitrag wird gleichzeitig auf dem veröffentlicht Zcash Blogund wird von Ariel Gabizon (Zcash) und Christian Reitwiessner (Ethereum) zusammengefasst.
Die flexible Smart Contract -Schnittstelle von Ethereum ermöglicht eine Vielzahl von Anwendungen, von denen viele wahrscheinlich noch nicht konzipiert wurden. Die Möglichkeiten wachsen erheblich, wenn die Kapazität für die Privatsphäre hinzugefügt wird. Stellen Sie sich beispielsweise eine Wahl oder Auktion vor, die über einen intelligenten Vertrag auf der Blockchain durchgeführt wird, so dass die Ergebnisse von einem Beobachter der Blockchain überprüft werden können, aber die individuellen Stimmen oder Gebote werden nicht bekannt gegeben. Ein weiteres mögliches Szenario kann eine selektive Offenlegung beinhalten, bei der Benutzer die Möglichkeit haben, nachzuweisen, dass sie sich in einer bestimmten Stadt befinden, ohne ihren genauen Standort offenzulegen. Der Schlüssel zum Hinzufügen solcher Funktionen zu Ethereum sind null Wissen, prägnante nicht-interaktive Wissensargumente (ZK-Snarks)-genau der kryptografische Motor, der ZCASH zugrunde liegt.
Eines der Ziele des ZCASH -Unternehmens, Codenamen Projektalchemieist, einen direkten dezentralen Austausch zwischen Ethereum und ZCASH zu ermöglichen. Das Verbinden dieser beiden Blockchains und Technologien, die sich auf die Programmierbarkeit und die andere auf Privatsphäre konzentrieren, ist ein natürlicher Weg, um die Entwicklung von Anwendungen zu erleichtern, die beides benötigt werden.
Im Rahmen der technischen Zusammenarbeit von Zcash/Ethereum besuchte Ariel Gabizon von Zcash vor einigen Wochen den Christian Reitwiessner aus dem Ethereum Hub in Berlin. Der Höhepunkt des Besuchs ist ein Proof of Concept-Implementierung eines ZK-Snark-Verifikers, das auf vorgefertigten Ethereum-Verträgen, die für den Client von Ethereum C ++ implementiert sind, basiert. Diese Arbeit ergänzt Baby Zoe wo ein Zk-Snark-vorkompilierter Vertrag für Parität geschrieben wurde (der Ethereum Rust-Kunde). Bei den Aktualisierungen, die wir vorgenommen haben, wurden winzige kryptografische Primitive (elliptische Kurve-Multiplikation, Addition und Paarung) hinzugefügt und den Rest in Solidität implementiert, was eine größere Flexibilität ermöglicht und eine Vielzahl von ZK-Snark-Konstruktionen ermöglicht, ohne eine harte Gabel zu erfordern. Details werden weitergegeben, da sie später verfügbar sind. Wir haben den neuen Code getestet, indem wir eine echte Privatsphäre der ZCASH-Transaktion in einem Testnetz der Ethereum-Blockchain erfolgreich überprüft haben.
Die Überprüfung dauerte nur 42 Millisekunden, was zeigt, dass solche vorkompilierten Verträge hinzugefügt werden können und die Gaskosten für die Verwendung von ihnen als ziemlich erschwinglich gemacht werden können.
Was kann mit einem solchen System getan werden
Das ZCASH -System kann in Ethereum wiederverwendet werden, um geschützte benutzerdefinierte Token zu erstellen. Solche Token erlauben bereits viele Bewerbungen wie Abstimmungen (siehe unten) oder einfache blinde Auktionen, bei denen die Teilnehmer OB -Kenntnisse abgeben, ohne dass die Beträge anderer Gebote bieten.
Wenn Sie versuchen möchten, den Proof of Concept zu kompilieren, können Sie die folgenden Befehle verwenden. Wenn Sie Hilfe benötigen, sehen Sie https://gitter.im/ethereum/privacy-tech
git clone https://github.com/scipr-lab/libsnark.git cd libsnarksudo PREFIX=/usr/local make NO_PROCPS=1 NO_GTEST=1 NO_DOCS=1 \ CURVE=ALT_BN128 \FEATUREFLAGS="-DBINARY_OUTPUT=1 -DMONTGOMERY_OUTPUT=1 \ -DNO_PT_COMPRESSION=1" \lib installcd ..git clone --recursive -b snark https://github.com/ethereum/cpp-ethereum.gitcd cpp-ethereum./scripts/install_deps.sh && cmake . -DEVMJIT=0 -DETHASHCL=0 && make ethcd ..git clone --recursive -b snarks https://github.com/ethereum/solidity.gitcd solidity./scripts/install_deps.sh && cmake . && make soltestcd .../cpp-ethereum/eth/eth --test -d /tmp/test# And on a second terminal:./solidity/test/soltest -t "*/snark" -- --ipcpath /tmp/test/geth.ipc --show-messages
Wir haben auch verschiedene Aspekte der Integration von ZK-Snarks in die Ethereum-Blockchain diskutiert, auf die wir jetzt erweitern.
Entscheidung, welche vorkompilierten Verträge zu definieren sind
Denken Sie daran, dass ein Snark ein kurzer Beweis für eine Immobilie ist und was für das Hinzufügen der Datenschutzmerkmale in die Ethereum -Blockchain erforderlich ist, sind Kunden, die einen solchen Beweis überprüfen können.
In allen jüngsten Konstruktionen bestand das Überprüfungsverfahren ausschließlich aus Operationen auf elliptischen Kurven. Insbesondere erfordert der Überprüfer eine skalare Multiplikation und die Zugabe in einer elliptischen Kurvengruppe und müsste auch eine schwerere Operation benötigen, die als bilineare Paarung bezeichnet wird.
Wie erwähnt HierDie Implementierung dieser Vorgänge direkt im EVM ist zu kostspielig. Daher möchten wir vorgefertigte Verträge umsetzen, die diese Operationen ausführen. Jetzt diskutiert die Frage: Auf welcher Allgemeinheit sollten diese vorgefertigten Verträge anstreben.
Die Sicherheitsstufe des Snarks entspricht den Parametern der Kurve. Je größer die Kurvenreihenfolge ist, und desto größer ist etwas, das als Einbettungsgrad bezeichnet wird, und desto sicherer ist der auf dieser Kurve basierende Snark. Je größer diese Mengen sind, desto umso teurer sind die Vorgänge auf der entsprechenden Kurve. Daher möchte ein Vertragsdesigner, der Snarks verwendet, diese Parameter nach seiner eigenen gewünschten Effizienz-/Sicherheits -Kompromisse auswählen. Dieser Kompromiss ist ein Grund für die Umsetzung eines vorkompilierten Vertrags mit einem hohen Maß an Allgemeinheit, bei dem der Vertragsdesigner aus einer großen Familie von Kurven auswählen kann. Wir zielten in der Tat auf ein hohes Maß an Allgemeinheit, wobei die Beschreibung der Kurve im Rahmen der Eingabe in den Vertrag angegeben wird. In einem solchen Fall könnte ein intelligenter Vertrag in jeder elliptischen Kurvengruppe eine Ergänzung durchführen.
Eine Komplikation mit diesem Ansatz besteht darin, dem Betrieb Gaskosten zuzuweisen. Sie müssen lediglich aus der Beschreibung der Kurve und ohne Zugriff auf eine bestimmte Implementierung beurteilen, wie teuer ein Gruppenbetrieb in dieser Kurve im schlimmsten Fall wäre. Ein etwas weniger allgemeiner Ansatz besteht darin, alle Kurven einer bestimmten Familie zuzulassen. Wir haben festgestellt, dass bei der Arbeit mit der Kurvenfamilie von Barreto-Naehrig (BN) ungefähr beurteilen kann, wie teuer der Paarungsbetrieb angesichts der Kurvenparameter sein wird, da alle solchen Kurven eine bestimmte Art von optimaler ATE-Paarung unterstützen. Hier ist ein skizzieren Wie ein solches Vorkompilieren funktionieren würde und wie die Gaskosten berechnet würden.
Wir haben viel aus dieser Debatte gelernt, aber letztendlich haben wir uns entschlossen, es für diesen Beweis für das Konzept “einfach zu halten”: Wir haben uns entschieden, Verträge für die spezifische Kurve zu implementieren, die derzeit von ZCASH verwendet wird. Wir haben dies getan, indem wir Wrapper der entsprechenden Funktionen in der verwendet haben libsnark Bibliothek, die auch von ZCASH verwendet wird.
Beachten Sie, dass wir einfach einen Wrapper für die gesamte Snark -Überprüfungsfunktion hätten verwenden können, die derzeit von ZCASH verwendet werden, wie im oben genannten Baby Zoe -Projekt. Der Vorteil der explizit definierenden elliptischen Kurvenoperationen besteht jedoch darin, eine Vielzahl von Snark -Konstruktionen zu verwenden, die wiederum einen Verifizierer haben, der durch eine Kombination der drei zuvor erwähnten elliptischen Kurvenoperationen funktioniert.
Wiederverwenden des ZCash -Setups für neue anonyme Token und andere Anwendungen
Wie Sie vielleicht gehört haben, erfordert die Verwendung von Schnuppen a Komplexe Einrichtungsphase in denen die sogenannten öffentlichen Parameter des Systems konstruiert sind. Die Tatsache, dass diese öffentlichen Parameter jedes Mal auf sichere Weise erzeugt werden müssen, wenn wir einen Snark für einen bestimmten Schaltkreis erheblich verwenden möchten, behindert die Benutzerfreundlichkeit von Schnuppen. Die Vereinfachung dieser Setup -Phase ist ein wichtiges Ziel, an das wir uns überlegt haben, aber bisher keinen Erfolg hatten.
Die gute Nachricht ist, dass jemand, der ein Token ausstellen möchte, der Datenschutzverwaltungstransaktionen unterstützt, einfach die öffentlichen Parameter wiederverwenden kann, die bereits von ZCash sicher generiert wurden. Es kann wiederverwendet werden, da die Schaltung zur Überprüfung von Transaktionen für Datenschutzbestimmungen nicht von Natur aus an eine Währung oder Blockchain gebunden ist. Eine seiner expliziten Eingänge ist vielmehr die Wurzel eines Merkle -Baumes, der alle gültigen Anmerkungen der Währung enthält. Daher kann diese Eingabe gemäß der Währung geändert werden, mit der man arbeiten möchte. Darüber hinaus, wenn es einfach ist, ein neues anonymer Token zu gründen. Sie können bereits viele Aufgaben erledigen, die auf den ersten Blick nicht wie Token aussehen. Nehmen wir beispielsweise an, wir möchten eine anonyme Wahl durchführen, um eine bevorzugte Option zwischen zwei zu wählen. Wir können ein anonymer individuelles Token zur Abstimmung ausstellen und jeder Wahlpartei eine Münze senden. Da es keinen „Bergbau“ gibt, ist es nicht möglich, Token auf andere Weise zu generieren. Jetzt sendet jede Partei ihre Münze nach ihrer Stimme an eine von zwei Adressen. Die Adresse mit einem größeren endgültigen Restbetrag entspricht dem Wahlergebnis.
Andere Anwendungen
Es folgt ein nicht gequerdiges System, das ziemlich einfach zu erstellen ist und eine „selektive Offenlegung“ ermöglicht. Sie können beispielsweise eine verschlüsselte Nachricht in regelmäßigen Abständen veröffentlichen, die Ihren physischen Standort in die Blockchain enthalten (möglicherweise mit den Unterschriften anderer Personen, um Parodierung zu verhindern). Wenn Sie für jede Nachricht einen anderen Schlüssel verwenden, können Sie Ihren Standort nur zu einem bestimmten Zeitpunkt angeben, indem Sie den Schlüssel veröffentlichen. Mit ZK-Snarks können Sie jedoch zusätzlich beweisen, dass Sie sich in einem bestimmten Bereich befanden, ohne genau zu zeigen, wo Sie sich befanden. Im Zk-Snark entschlüsseln Sie Ihren Standort und überprüfen, ob er sich im Bereich befindet. Aufgrund der Null-Wissen-Eigenschaft kann jeder diesen Scheck überprüfen, aber niemand kann Ihren tatsächlichen Standort abrufen.
Die Arbeit voraus
Erreichen der genannten Funktionen – Erstellen anonymer Token und Überprüfung der ZCASH -Transaktionen auf der Ethereum -Blockchain müssen andere Elemente implementieren, die von ZCASH in Solidität verwendet werden.
Für die erste Funktionalität müssen wir eine Implementierung von Aufgaben haben, die von Knoten im ZCASH -Netzwerk ausgeführt werden, z. B. die Aktualisierung des Note -Engagement -Baumes.
Für die zweite Funktionalität benötigen wir eine Implementierung des Equihash -Nachweises des Arbeitsalgorithmus, der durch ZCASH in Solidität verwendet wird. Andernfalls können Transaktionen für sich selbst als gültig verifiziert werden, aber wir wissen nicht, ob die Transaktion tatsächlich in die ZCASH -Blockchain integriert wurde.
Glücklicherweise war eine solche Umsetzung geschrieben; Die Effizienz muss jedoch verbessert werden, um in praktischen Anwendungen verwendet zu werden.
Anerkennung: Wir danken Sean Bowe für technische Hilfe. Wir danken auch Sean und Vitalik Buterin für hilfreiche Kommentare und Ming Chan für die Bearbeitung.

