Weiterleitung des Originaltitels 'Ein Zero-Knowledge-Paradigma: Teil 1 - Was ist eine zk-VM?'
Was sind Zero-Knowledge-Proofs (ZKPs)?
Wenn Sie keine Vorkenntnisse in Zero Knowledge Proofs (ZKP) haben, erklärt dieses Video von Wired das Konzept in fünf Schwierigkeitsstufen interaktiv mit leicht verständlichen Beispielen und Demonstrationen. Sehr empfehlenswert.
Einfach ausgedrückt ermöglichen ZKPs einer Partei (Beweiser), einer anderen Partei (dem Prüfer) zu beweisen, dass sie etwas weiß, ohne preiszugeben, was diese Sache ist oder zusätzliche Informationen. Genauer gesagt beweisen ZKPs die Kenntnis eines Datenelements oder die Kenntnis des Ergebnisses einer Berechnung, ohne die Daten oder Eingaben preiszugeben. Der Prozess der Erstellung eines Zero-Knowledge-Beweises umfasst eine Reihe mathematischer Modelle, um die Ergebnisse einer Berechnung in eine ansonsten bedeutungslose Information umzuwandeln, die die erfolgreiche Ausführung von Code beweist, der später überprüft werden kann.
In einigen Fällen erfordert es weniger Arbeit, den Beweis zu überprüfen, der nach mehreren Runden algebraischer Konvertierungen und Kryptographie erstellt wird, als es dauern würde, die Berechnung auszuführen. Diese einzigartige Kombination aus Sicherheit und Skalierbarkeit macht die Zero-Knowledge-Kryptographie zu einem so leistungsstarken Werkzeug.
zkSNARKs: Zero Knowledge Prägnantes, nicht-interaktives Argument des Wissens
zkSTARKs: Zero Knowledge Skalierbares transparentes Argument des Wissens
(Hinweis: Die Bridge von Succinct verwendet SNARKs, aber SP1 ist ein STARK-basiertes Protokoll)
Es ist erwähnenswert, dass alle STARKs SNARKs sind, aber nicht alle SNARKs sind STARKs.
Für ein besseres allgemeines Verständnis von SNARKs und STARKs empfehlen wir die Lektüre dieser @krzhang/privacy-in-cryptocurrencies-zero-knowledge-and-zk-snarks-1-2-68ce1838fd9c">Artikelserie von Yan Zhang und Yi Sun von Axiom und dieser Sammlung von Artikeln in Ventali Tans Github.
Eine virtuelle Maschine (VM) ist ein Programm, das Programme ausführt. Im Kontext ist eine zkVM ein virtueller Computer, der als System zum Generieren von Zero-Knowledge-Beweisen oder als universelle Schaltung oder Werkzeug zum Generieren von ZKPs für jedes Programm oder jede Berechnung implementiert ist.
zkVMs machen das Erlernen komplizierter Mathematik und Kryptographie für das Entwerfen und Codieren von ZK überflüssig und ermöglichen es jedem Entwickler, Programme auszuführen, die in seinen bevorzugten Sprachen geschrieben sind, und ZKPs zu generieren, was die Integration und Interaktion mit Nullwissen erheblich erleichtert. Im Großen und Ganzen umfassen die meisten Verweise auf zkVMs implizit die Compiler-Toolchains und Proof-Systeme, die an die virtuelle Maschine angehängt sind, die die Programme ausführt, und nicht nur die virtuelle Maschine selbst. Im Folgenden fassen wir die Hauptkomponenten einer zkVM und ihre Funktionen zusammen:
Die Hauptkomponenten einer zkVM
Das Design und die Implementierung jeder Komponente werden durch die Wahl des Beweises (SNARKs oder STARKs) und die Befehlssatzarchitektur (ISA) der zkVM bestimmt. Traditionell gibt eine ISA an, wozu eine CPU fähig ist (Datentypen, Register, Speicher usw.) und die Abfolge von Aktionen, die die CPU beim Ausführen eines Programms ausführt. Im Kontext bestimmt die ISA den Maschinencode, der von der VM interpretierbar und ausführbar ist. Die Wahl einer ISA kann zu radikalen Unterschieden in der Zugänglichkeit und Benutzerfreundlichkeit der zkVM sowie in der Geschwindigkeit und Effizienz der Proof-Erstellungsprozesse führen und den Aufbau einer zkVM untermauern.
Nachfolgend finden Sie einige Beispiele für zkVMs und ihre Komponenten als Referenz.
zkVMs und ihre Komponenten
Im Moment werden wir uns auf die Wechselwirkungen zwischen den einzelnen Komponenten auf hoher Ebene konzentrieren, um in einem späteren Artikel einen Rahmen für das Verständnis der algebraischen und kryptographischen Prozesse sowie der Design-Kompromisse einer zkVM zu schaffen.
Das folgende Diagramm ist ein abstrahiertes, verallgemeinertes Prozessflussdiagramm einer zkVM, aufgeteilt und kategorisiert zwischen dem Format (Ein- und Ausgänge) eines Programms, während es sich durch die Komponenten einer zkVM bewegt. Wir werden jeden Prozess in den folgenden Artikeln eingehend untersuchen.
Allgemeiner Ablauf für eine zkVM
Der Prozessablauf einer zkVM sieht im Allgemeinen wie folgt aus:
Der Beweiser empfängt die Spur und stellt sie als eine Menge von Polynomen dar, die durch eine Reihe von Einschränkungen gebunden sind, wobei er die Berechnung im Wesentlichen in Algebra übersetzt, indem er die Fakten mathematisch abbildet.
Der Beweiser legt sich mit einem Polynomial Commitment Scheme (PCS) für diese Polynome fest. Ein Verpflichtungsschema ist ein Protokoll, das es dem Beweiser ermöglicht, einen Fingerabdruck einiger Daten X zu erstellen, was als Verpflichtung gegenüber X bezeichnet wird, und später Fakten über X zu beweisen, ohne X preiszugeben, indem er die Verpflichtung zu X verwendet. Das PCS ist der Fingerabdruck; Eine "vorverarbeitete" prägnante Version der Einschränkungen für die Berechnung. Dies ermöglicht es dem Beweiser, Fakten über die Berechnung, die jetzt in einer Polynomgleichung ausgedrückt werden, mit Zufallswerten zu beweisen, die vom Prüfer in den folgenden Schritten vorgeschlagen werden.
Der Beweiser führt einen Polynomial Interactive Oracle Proof (PIOP) aus, um zu zeigen, dass die festgeschriebenen Polynome eine Ausführungsablaufverfolgung darstellen, die die angegebenen Einschränkungen erfüllt. Ein PIOP ist ein interaktives Beweisprotokoll, das aus einer Reihe von Runden besteht, in denen der Beweiser Zusagen an Polynome sendet, der Prüfer mit zufälligen Feldwerten antwortet und der Beweiser Auswertungen des Polynoms bei diesen Zufallswerten liefert, ähnlich dem "Lösen" der Polynomgleichung mit Zufallswerten, um den Prüfer probabilistisch zu überzeugen.
Anwendung der Fiat-Shamir-Heuristik; Der Prüfer führt den PIOP in einem nicht-interaktiven Modus aus, in dem das Verhalten des Prüfers auf das Senden von pseudozufälligen Herausforderungspunkten beschränkt ist. In der Kryptographie wandelt die Fiat-Shamir-Heuristik einen interaktiven Wissensnachweis in eine digitale Signatur zur Verifizierung um. Dieser Schritt verschlüsselt den Beweis und macht ihn zu Nullwissen.
Der Prüfer muss den Prüfer davon überzeugen, dass die beanspruchten polynomialen Auswertungen in Bezug auf die polynomialen Verpflichtungen, die er an den Prüfer gesendet hat, korrekt sind. Dazu erstellt der Beweiser einen "Auswertungs-" oder "Eröffnungs"-Beweis, der durch das polynomiale Commitment-Schema (Fingerabdruck) bereitgestellt wird.
Zusammenfassend beweist ein zkVM-Beweis für ein bestimmtes Programm, ein gegebenes Ergebnis und gegebene Anfangsbedingungen, dass es eine Eingabe gibt, die das Programm dazu veranlasst, das gegebene Ergebnis zu erzeugen, wenn es von den gegebenen Anfangsbedingungen ausgeführt wird. Wir können diese Aussage mit dem Prozessablauf kombinieren, um zu der folgenden Beschreibung einer zkVM zu gelangen.
Ein zkVM-Beweis beweist für ein bestimmtes VM-Programm und eine bestimmte Ausgabe, dass es eine Eingabe gibt, die das gegebene Programm dazu veranlasst, die angegebene Ausgabe zu erzeugen, wenn es auf der VM ausgeführt wird.
Nach welchen Kriterien sollten wir zkVMs bewerten? Mit anderen Worten, wann sollten wir sagen, dass eine zkVM besser ist als eine andere? Ehrlich gesagt hängt die Antwort vom Anwendungsfall ab.
Die Marktforschung von Lita legt nahe, dass für die meisten kommerziellen Anwendungsfälle die wichtigsten Eigenschaften, abgesehen von Geschwindigkeit, Effizienz und Prägnanz, je nach Anwendung entweder Geschwindigkeit oder Kernzeiteffizienz sind. Einige Anwendungen sind preissensibel und wollen für einen niedrigen Energieverbrauch und einen geringen Kapitaleinsatz bei der Prüfung optimiert werden. Für diese ist die Kernzeiteffizienz wahrscheinlich die wichtigste Kennzahl, die es zu optimieren gilt. Andere Anwendungen, insbesondere Finanz- oder Handelsanwendungen, sind latenzempfindlich und wollen die Geschwindigkeit optimieren.
Die meisten veröffentlichten Leistungsvergleiche konzentrieren sich ausschließlich auf die Geschwindigkeit, was wichtig ist, aber keine ganzheitliche Messung der Leistung. Es gibt auch einige wichtige Eigenschaften, die die Zuverlässigkeit einer zkVM messen; die meisten von ihnen entsprechen nicht den produktionsreifen Standards, selbst für marktführende etablierte Unternehmen.
Wir schlagen hiermit vor, dass zkVMs nach den folgenden Kriterien bewertet werden sollten, die in zwei Untergruppen unterteilt sind:
Hauptkriterien für die Bewertung von zk-VMs
Baseline: Misst die Zuverlässigkeit von zkVMs
Leistung: Misst die Fähigkeiten einer zkVM
4.1 Baseline: Annahmen zu Korrektheit, Sicherheit und Vertrauen
Bei der Bewertung von zkVMs für unternehmenskritische Anwendungen sollten Korrektheit und Sicherheit als Grundlage berücksichtigt werden. Es muss genügend Gründe geben, um sich auf die Richtigkeit zu verlassen, und es muss eine ausreichend starke behauptete Sicherheit geben. Außerdem müssen die Vertrauensannahmen für die Anwendung ausreichend schwach sein.
Ohne diese Eigenschaften ist die zkVM für die Anwendung möglicherweise mehr als nutzlos, da sie möglicherweise nicht wie angegeben funktioniert und Benutzer Hacking und Exploits aussetzt.
i. Richtigkeit
Die Korrektheit setzt sich aus drei Eigenschaften zusammen:
Sie können Vollständigkeit ohne Solidität haben; Wenn das Beweissystem alles beweist, einschließlich der Falschheit, ist es offensichtlich vollständig, aber nicht stichhaltig. Umgekehrt kann man Solidität ohne Vollständigkeit haben; Wenn das Beweissystem beweist, dass ein Programm existierte, aber die Berechnungen nicht beweisen kann, ist es offensichtlich solide (schließlich beweist es nie eine Falschheit), aber nicht vollständig.
ii. Sicherheit
In der Praxis haben alle drei Korrektheitseigenschaften Toleranzen ungleich Null. Dies impliziert, dass alle Beweise statistische Wahrscheinlichkeiten der Richtigkeit und keine absoluten Gewissheiten sind. Eine Toleranz bezieht sich auf die maximal tolerierbare Wahrscheinlichkeit, dass eine Eigenschaft ausfällt. Nulltoleranzen sind natürlich das Ideal, aber zkVMs erreichen in der Praxis nicht bei all diesen Eigenschaften Nulltoleranzen. Vollkommene Solidität und Vollständigkeit scheinen mit Prägnanz unvereinbar zu sein, und es gibt keine bekannten Methoden, um perfektes Nullwissen zu erreichen. Eine gängige Methode zur Messung der Sicherheit ist in Sicherheitsbits, wobei eine Toleranz von 1 / (2^n) als n Sicherheitsbits bezeichnet wird. Mehr Sicherheit ist besser.
Wenn eine zkVM vollkommen korrekt ist, bedeutet das nicht unbedingt, dass sie zuverlässig ist. Korrektheit bedeutet nur, dass die zkVM ihre Sicherheitseigenschaften bis zu den angegebenen Toleranzen erfüllt. Dies bedeutet nicht, dass die behaupteten Toleranzen niedrig genug sind, um marktreif zu sein. Wenn eine zkVM ausreichend sicher ist, bedeutet das nicht, dass sie korrekt ist; Sicherheit bezieht sich auf die behaupteten Toleranzen, nicht auf die tatsächlich erreichten Toleranzen. Nur wenn eine zkVM sowohl vollkommen korrekt als auch ausreichend sicher ist, kann man sagen, dass die zkVM bis zu den behaupteten Toleranzen zuverlässig ist.
iii. Vertrauensannahmen
Wenn zkVMs Vertrauensannahmen haben, geschieht dies in der Regel in Form eines vertrauenswürdigen Setup-Prozesses. Ein Setup-Prozess für ein ZK-Proof-System wird einmal ausgeführt, bevor der erste Proof mit dem Proof-System generiert wird, um einige Informationen zu generieren, die als "Setup-Daten" bezeichnet werden. In einem vertrauenswürdigen Setup-Prozess erzeugen eine oder mehrere Personen eine Zufälligkeit, die in die Setup-Daten integriert wird, und es muss davon ausgegangen werden, dass mindestens eine dieser Personen die Zufälligkeit, die sie in die Setup-Daten aufgenommen haben, gelöscht hat.
In der Praxis gibt es zwei gängige Modelle für Vertrauensannahmen.
Eine ehrliche Annahme des Mehrheitsvertrauens besagt, dass von einer Gruppe von N Personen mehr als N/2 dieser Personen Integrität in einer bestimmten Interaktion mit dem System zeigten, die üblicherweise von Blockchains verwendet wird
Eine Vertrauensannahme von "1 von N" besagt, dass von einer Gruppe von N Personen mindestens eine dieser Personen Integrität in einer bestimmten Interaktion mit dem System zeigte, die häufig von MPC-basierten Tools und Anwendungen verwendet wird.
Es ist allgemein anerkannt, dass zkVMs ohne Vertrauensannahmen sicherer sind als zkVMs, die Vertrauensannahmen erfordern.
4.2 Das zkVM-Trilemma: Balance zwischen Geschwindigkeit, Effizienz und Prägnanz in zkVMs
Das zkVM-Trilemma: Geschwindigkeit, Effizienz und Prägnanz
Geschwindigkeit, Effizienz und Prägnanz sind alles gleitende Skaleneigenschaften. All diese Faktoren tragen zu den Endbenutzerkosten von zkVM bei. Wie sie in einer Bewertung gewichtet werden sollten, hängt von der Anwendung ab. Oft ist die schnellste Lösung nicht die effizienteste oder prägnanteste; Die prägnanteste Lösung ist nicht die schnellste oder effizienteste; und so weiter und so fort. Lassen Sie uns zuerst jede Eigenschaft definieren, bevor wir ihre Beziehung erklären
i. Geschwindigkeit
Die Geschwindigkeit sollte in Bezug auf bestimmte Testprogramme, Eingaben und Systeme definiert und gemessen werden, um sicherzustellen, dass sie quantitativ bewertet werden kann. Diese Metrik ist entscheidend für latenzempfindliche Anwendungen, bei denen eine schnelle Verfügbarkeit von Proofs unerlässlich ist, aber mit höherem Overhead und größeren Proof-Größen verbunden ist
ii. Effizienz
Der Prüfer verbraucht zwei Arten von Ressourcen: Kernzeit und Speicherplatz. Der Wirkungsgrad kann daher in Kernzeiteffizienz und Raumeffizienz unterteilt werden.
Kernzeiteffizienz: Durchschnittliche Betriebszeit des Prüfers über alle Kerne hinweg multipliziert mit der Anzahl der Kerne, auf denen der Prüfer ausgeführt wird. Bei einem Single-Core-Prover sind der Kernzeitverbrauch und die Geschwindigkeit dasselbe. Für einen Multi-Core-fähigen Prüfer, der im Multi-Core-Modus auf einem Multi-Core-System ausgeführt wird, sind Kernzeitverbrauch und Geschwindigkeit nicht dasselbe. Wenn ein Programm 5 Kerne oder Threads für 5 Sekunden vollständig nutzt, wären das 25 Sekunden Benutzerzeit und 5 Sekunden Wanduhrzeit.
Platzeffizienz: Bezieht sich auf die verwendete Speicherkapazität, z. B. RAM
Die Benutzerzeit ist als Stellvertreter für die Energie interessant, die durch die Ausführung einer Berechnung verbraucht wird. In einer Situation, in der alle Kerne fast immer voll ausgelastet sind, sollte der Energieverbrauch einer CPU relativ konstant bleiben. In dieser Situation sollte die Benutzerzeit, die von einer CPU-gebundenen, überwiegend benutzermodusmäßigen Codeausführung aufgewendet wird, ungefähr linear proportional zur Anzahl der Wattstunden (d. h. Energie) sein, die von dieser Codeausführung verbraucht wird.
Die Einsparung des Energieverbrauchs oder der Nutzung von Rechenressourcen sollte aus der Sicht aller Prüfvorgänge interessant sein, die so groß sind, dass ihre Energierechnung (oder ihre Cloud-Rechenrechnung) für den Nachweis erhebliche Betriebskosten verursacht. Aus diesen Gründen ist die Benutzerzeit eine interessante Kennzahl. Niedrigere Kosten für die Prüfung ermöglichen es den Dienstanbietern, niedrigere Prüfpreise an kostensensible Kunden weiterzugeben.
Beide Arten von Effizienz hängen mit dem Energieverbrauch des Prüfungsprozesses und dem Kapitalverbrauch des Prüfungsprozesses zusammen, der sich auf die finanziellen Kosten der Prüfung bezieht. Um die Definition der Effizienz für die Messung zu operationalisieren, muss die Definition in Bezug auf ein oder mehrere Testprogramme, einen oder mehrere Testeingänge für jedes dieser Programme und ein oder mehrere Testsysteme vorgenommen werden.
iii. Prägnanz
Prägnanz setzt sich aus drei verschiedenen Metriken zusammen, wobei die Komplexität der Beweisüberprüfung weiter unterteilt wird:
Die Verifikation ist in der Regel ein einzelner Kernvorgang, daher sind Geschwindigkeit und Kernzeiteffizienz in diesem Zusammenhang im Allgemeinen gleichwertig. Wie bei Geschwindigkeit und Effizienz erfordert die Operationalisierung der Definition von Prägnanz die Spezifikation von Testprogrammen, Testeingaben und Testsystemen.
Nachdem jede Performance-Eigenschaft definiert ist, veranschaulichen wir nun die Dimunitiv-Effekte der Optimierung einer Eigenschaft gegenüber den anderen.
Im Allgemeinen bedeutet die Optimierung für eine Qualität, dass nicht für eine andere Qualität optimiert wird, und daher ist eine mehrdimensionale Analyse erforderlich, um von Fall zu Fall eine optimale Lösung auszuwählen.
Eine gute Möglichkeit, diese Eigenschaften in einer Auswertung zu gewichten, kann darin bestehen, akzeptable Werte für jede Eigenschaft zu definieren und dann zu bestimmen, welche Eigenschaften am wichtigsten sind. Die wichtigsten Eigenschaften sollten optimiert werden, sofern bei allen anderen Immobilien ein ausreichendes Niveau beibehalten wird.
Im Folgenden fassen wir jede Immobilie und ihre wichtigsten Überlegungen zusammen:
Auswertungseigenschaften von zkVMs
Mit der obigen Tabelle schließen wir hiermit den ersten Artikel unserer Serie ab. In den nächsten Artikeln werden wir auf dem oben gezeigten Flussdiagramm aufbauen, um gängige arithmetische und kryptografische Prozesse in zkVMs zu erklären.
Wenn Sie dies hilfreich fanden, besuchen Sie unsere Website und unser Gitbook , um mehr darüber zu erfahren, was wir bei Lita entwickeln.
Folgen Sie uns auch auf X und Discord , um auf dem Laufenden zu bleiben, damit Sie den Rest der Serie nicht verpassen
Weiterleitung des Originaltitels 'Ein Zero-Knowledge-Paradigma: Teil 1 - Was ist eine zk-VM?'
Was sind Zero-Knowledge-Proofs (ZKPs)?
Wenn Sie keine Vorkenntnisse in Zero Knowledge Proofs (ZKP) haben, erklärt dieses Video von Wired das Konzept in fünf Schwierigkeitsstufen interaktiv mit leicht verständlichen Beispielen und Demonstrationen. Sehr empfehlenswert.
Einfach ausgedrückt ermöglichen ZKPs einer Partei (Beweiser), einer anderen Partei (dem Prüfer) zu beweisen, dass sie etwas weiß, ohne preiszugeben, was diese Sache ist oder zusätzliche Informationen. Genauer gesagt beweisen ZKPs die Kenntnis eines Datenelements oder die Kenntnis des Ergebnisses einer Berechnung, ohne die Daten oder Eingaben preiszugeben. Der Prozess der Erstellung eines Zero-Knowledge-Beweises umfasst eine Reihe mathematischer Modelle, um die Ergebnisse einer Berechnung in eine ansonsten bedeutungslose Information umzuwandeln, die die erfolgreiche Ausführung von Code beweist, der später überprüft werden kann.
In einigen Fällen erfordert es weniger Arbeit, den Beweis zu überprüfen, der nach mehreren Runden algebraischer Konvertierungen und Kryptographie erstellt wird, als es dauern würde, die Berechnung auszuführen. Diese einzigartige Kombination aus Sicherheit und Skalierbarkeit macht die Zero-Knowledge-Kryptographie zu einem so leistungsstarken Werkzeug.
zkSNARKs: Zero Knowledge Prägnantes, nicht-interaktives Argument des Wissens
zkSTARKs: Zero Knowledge Skalierbares transparentes Argument des Wissens
(Hinweis: Die Bridge von Succinct verwendet SNARKs, aber SP1 ist ein STARK-basiertes Protokoll)
Es ist erwähnenswert, dass alle STARKs SNARKs sind, aber nicht alle SNARKs sind STARKs.
Für ein besseres allgemeines Verständnis von SNARKs und STARKs empfehlen wir die Lektüre dieser @krzhang/privacy-in-cryptocurrencies-zero-knowledge-and-zk-snarks-1-2-68ce1838fd9c">Artikelserie von Yan Zhang und Yi Sun von Axiom und dieser Sammlung von Artikeln in Ventali Tans Github.
Eine virtuelle Maschine (VM) ist ein Programm, das Programme ausführt. Im Kontext ist eine zkVM ein virtueller Computer, der als System zum Generieren von Zero-Knowledge-Beweisen oder als universelle Schaltung oder Werkzeug zum Generieren von ZKPs für jedes Programm oder jede Berechnung implementiert ist.
zkVMs machen das Erlernen komplizierter Mathematik und Kryptographie für das Entwerfen und Codieren von ZK überflüssig und ermöglichen es jedem Entwickler, Programme auszuführen, die in seinen bevorzugten Sprachen geschrieben sind, und ZKPs zu generieren, was die Integration und Interaktion mit Nullwissen erheblich erleichtert. Im Großen und Ganzen umfassen die meisten Verweise auf zkVMs implizit die Compiler-Toolchains und Proof-Systeme, die an die virtuelle Maschine angehängt sind, die die Programme ausführt, und nicht nur die virtuelle Maschine selbst. Im Folgenden fassen wir die Hauptkomponenten einer zkVM und ihre Funktionen zusammen:
Die Hauptkomponenten einer zkVM
Das Design und die Implementierung jeder Komponente werden durch die Wahl des Beweises (SNARKs oder STARKs) und die Befehlssatzarchitektur (ISA) der zkVM bestimmt. Traditionell gibt eine ISA an, wozu eine CPU fähig ist (Datentypen, Register, Speicher usw.) und die Abfolge von Aktionen, die die CPU beim Ausführen eines Programms ausführt. Im Kontext bestimmt die ISA den Maschinencode, der von der VM interpretierbar und ausführbar ist. Die Wahl einer ISA kann zu radikalen Unterschieden in der Zugänglichkeit und Benutzerfreundlichkeit der zkVM sowie in der Geschwindigkeit und Effizienz der Proof-Erstellungsprozesse führen und den Aufbau einer zkVM untermauern.
Nachfolgend finden Sie einige Beispiele für zkVMs und ihre Komponenten als Referenz.
zkVMs und ihre Komponenten
Im Moment werden wir uns auf die Wechselwirkungen zwischen den einzelnen Komponenten auf hoher Ebene konzentrieren, um in einem späteren Artikel einen Rahmen für das Verständnis der algebraischen und kryptographischen Prozesse sowie der Design-Kompromisse einer zkVM zu schaffen.
Das folgende Diagramm ist ein abstrahiertes, verallgemeinertes Prozessflussdiagramm einer zkVM, aufgeteilt und kategorisiert zwischen dem Format (Ein- und Ausgänge) eines Programms, während es sich durch die Komponenten einer zkVM bewegt. Wir werden jeden Prozess in den folgenden Artikeln eingehend untersuchen.
Allgemeiner Ablauf für eine zkVM
Der Prozessablauf einer zkVM sieht im Allgemeinen wie folgt aus:
Der Beweiser empfängt die Spur und stellt sie als eine Menge von Polynomen dar, die durch eine Reihe von Einschränkungen gebunden sind, wobei er die Berechnung im Wesentlichen in Algebra übersetzt, indem er die Fakten mathematisch abbildet.
Der Beweiser legt sich mit einem Polynomial Commitment Scheme (PCS) für diese Polynome fest. Ein Verpflichtungsschema ist ein Protokoll, das es dem Beweiser ermöglicht, einen Fingerabdruck einiger Daten X zu erstellen, was als Verpflichtung gegenüber X bezeichnet wird, und später Fakten über X zu beweisen, ohne X preiszugeben, indem er die Verpflichtung zu X verwendet. Das PCS ist der Fingerabdruck; Eine "vorverarbeitete" prägnante Version der Einschränkungen für die Berechnung. Dies ermöglicht es dem Beweiser, Fakten über die Berechnung, die jetzt in einer Polynomgleichung ausgedrückt werden, mit Zufallswerten zu beweisen, die vom Prüfer in den folgenden Schritten vorgeschlagen werden.
Der Beweiser führt einen Polynomial Interactive Oracle Proof (PIOP) aus, um zu zeigen, dass die festgeschriebenen Polynome eine Ausführungsablaufverfolgung darstellen, die die angegebenen Einschränkungen erfüllt. Ein PIOP ist ein interaktives Beweisprotokoll, das aus einer Reihe von Runden besteht, in denen der Beweiser Zusagen an Polynome sendet, der Prüfer mit zufälligen Feldwerten antwortet und der Beweiser Auswertungen des Polynoms bei diesen Zufallswerten liefert, ähnlich dem "Lösen" der Polynomgleichung mit Zufallswerten, um den Prüfer probabilistisch zu überzeugen.
Anwendung der Fiat-Shamir-Heuristik; Der Prüfer führt den PIOP in einem nicht-interaktiven Modus aus, in dem das Verhalten des Prüfers auf das Senden von pseudozufälligen Herausforderungspunkten beschränkt ist. In der Kryptographie wandelt die Fiat-Shamir-Heuristik einen interaktiven Wissensnachweis in eine digitale Signatur zur Verifizierung um. Dieser Schritt verschlüsselt den Beweis und macht ihn zu Nullwissen.
Der Prüfer muss den Prüfer davon überzeugen, dass die beanspruchten polynomialen Auswertungen in Bezug auf die polynomialen Verpflichtungen, die er an den Prüfer gesendet hat, korrekt sind. Dazu erstellt der Beweiser einen "Auswertungs-" oder "Eröffnungs"-Beweis, der durch das polynomiale Commitment-Schema (Fingerabdruck) bereitgestellt wird.
Zusammenfassend beweist ein zkVM-Beweis für ein bestimmtes Programm, ein gegebenes Ergebnis und gegebene Anfangsbedingungen, dass es eine Eingabe gibt, die das Programm dazu veranlasst, das gegebene Ergebnis zu erzeugen, wenn es von den gegebenen Anfangsbedingungen ausgeführt wird. Wir können diese Aussage mit dem Prozessablauf kombinieren, um zu der folgenden Beschreibung einer zkVM zu gelangen.
Ein zkVM-Beweis beweist für ein bestimmtes VM-Programm und eine bestimmte Ausgabe, dass es eine Eingabe gibt, die das gegebene Programm dazu veranlasst, die angegebene Ausgabe zu erzeugen, wenn es auf der VM ausgeführt wird.
Nach welchen Kriterien sollten wir zkVMs bewerten? Mit anderen Worten, wann sollten wir sagen, dass eine zkVM besser ist als eine andere? Ehrlich gesagt hängt die Antwort vom Anwendungsfall ab.
Die Marktforschung von Lita legt nahe, dass für die meisten kommerziellen Anwendungsfälle die wichtigsten Eigenschaften, abgesehen von Geschwindigkeit, Effizienz und Prägnanz, je nach Anwendung entweder Geschwindigkeit oder Kernzeiteffizienz sind. Einige Anwendungen sind preissensibel und wollen für einen niedrigen Energieverbrauch und einen geringen Kapitaleinsatz bei der Prüfung optimiert werden. Für diese ist die Kernzeiteffizienz wahrscheinlich die wichtigste Kennzahl, die es zu optimieren gilt. Andere Anwendungen, insbesondere Finanz- oder Handelsanwendungen, sind latenzempfindlich und wollen die Geschwindigkeit optimieren.
Die meisten veröffentlichten Leistungsvergleiche konzentrieren sich ausschließlich auf die Geschwindigkeit, was wichtig ist, aber keine ganzheitliche Messung der Leistung. Es gibt auch einige wichtige Eigenschaften, die die Zuverlässigkeit einer zkVM messen; die meisten von ihnen entsprechen nicht den produktionsreifen Standards, selbst für marktführende etablierte Unternehmen.
Wir schlagen hiermit vor, dass zkVMs nach den folgenden Kriterien bewertet werden sollten, die in zwei Untergruppen unterteilt sind:
Hauptkriterien für die Bewertung von zk-VMs
Baseline: Misst die Zuverlässigkeit von zkVMs
Leistung: Misst die Fähigkeiten einer zkVM
4.1 Baseline: Annahmen zu Korrektheit, Sicherheit und Vertrauen
Bei der Bewertung von zkVMs für unternehmenskritische Anwendungen sollten Korrektheit und Sicherheit als Grundlage berücksichtigt werden. Es muss genügend Gründe geben, um sich auf die Richtigkeit zu verlassen, und es muss eine ausreichend starke behauptete Sicherheit geben. Außerdem müssen die Vertrauensannahmen für die Anwendung ausreichend schwach sein.
Ohne diese Eigenschaften ist die zkVM für die Anwendung möglicherweise mehr als nutzlos, da sie möglicherweise nicht wie angegeben funktioniert und Benutzer Hacking und Exploits aussetzt.
i. Richtigkeit
Die Korrektheit setzt sich aus drei Eigenschaften zusammen:
Sie können Vollständigkeit ohne Solidität haben; Wenn das Beweissystem alles beweist, einschließlich der Falschheit, ist es offensichtlich vollständig, aber nicht stichhaltig. Umgekehrt kann man Solidität ohne Vollständigkeit haben; Wenn das Beweissystem beweist, dass ein Programm existierte, aber die Berechnungen nicht beweisen kann, ist es offensichtlich solide (schließlich beweist es nie eine Falschheit), aber nicht vollständig.
ii. Sicherheit
In der Praxis haben alle drei Korrektheitseigenschaften Toleranzen ungleich Null. Dies impliziert, dass alle Beweise statistische Wahrscheinlichkeiten der Richtigkeit und keine absoluten Gewissheiten sind. Eine Toleranz bezieht sich auf die maximal tolerierbare Wahrscheinlichkeit, dass eine Eigenschaft ausfällt. Nulltoleranzen sind natürlich das Ideal, aber zkVMs erreichen in der Praxis nicht bei all diesen Eigenschaften Nulltoleranzen. Vollkommene Solidität und Vollständigkeit scheinen mit Prägnanz unvereinbar zu sein, und es gibt keine bekannten Methoden, um perfektes Nullwissen zu erreichen. Eine gängige Methode zur Messung der Sicherheit ist in Sicherheitsbits, wobei eine Toleranz von 1 / (2^n) als n Sicherheitsbits bezeichnet wird. Mehr Sicherheit ist besser.
Wenn eine zkVM vollkommen korrekt ist, bedeutet das nicht unbedingt, dass sie zuverlässig ist. Korrektheit bedeutet nur, dass die zkVM ihre Sicherheitseigenschaften bis zu den angegebenen Toleranzen erfüllt. Dies bedeutet nicht, dass die behaupteten Toleranzen niedrig genug sind, um marktreif zu sein. Wenn eine zkVM ausreichend sicher ist, bedeutet das nicht, dass sie korrekt ist; Sicherheit bezieht sich auf die behaupteten Toleranzen, nicht auf die tatsächlich erreichten Toleranzen. Nur wenn eine zkVM sowohl vollkommen korrekt als auch ausreichend sicher ist, kann man sagen, dass die zkVM bis zu den behaupteten Toleranzen zuverlässig ist.
iii. Vertrauensannahmen
Wenn zkVMs Vertrauensannahmen haben, geschieht dies in der Regel in Form eines vertrauenswürdigen Setup-Prozesses. Ein Setup-Prozess für ein ZK-Proof-System wird einmal ausgeführt, bevor der erste Proof mit dem Proof-System generiert wird, um einige Informationen zu generieren, die als "Setup-Daten" bezeichnet werden. In einem vertrauenswürdigen Setup-Prozess erzeugen eine oder mehrere Personen eine Zufälligkeit, die in die Setup-Daten integriert wird, und es muss davon ausgegangen werden, dass mindestens eine dieser Personen die Zufälligkeit, die sie in die Setup-Daten aufgenommen haben, gelöscht hat.
In der Praxis gibt es zwei gängige Modelle für Vertrauensannahmen.
Eine ehrliche Annahme des Mehrheitsvertrauens besagt, dass von einer Gruppe von N Personen mehr als N/2 dieser Personen Integrität in einer bestimmten Interaktion mit dem System zeigten, die üblicherweise von Blockchains verwendet wird
Eine Vertrauensannahme von "1 von N" besagt, dass von einer Gruppe von N Personen mindestens eine dieser Personen Integrität in einer bestimmten Interaktion mit dem System zeigte, die häufig von MPC-basierten Tools und Anwendungen verwendet wird.
Es ist allgemein anerkannt, dass zkVMs ohne Vertrauensannahmen sicherer sind als zkVMs, die Vertrauensannahmen erfordern.
4.2 Das zkVM-Trilemma: Balance zwischen Geschwindigkeit, Effizienz und Prägnanz in zkVMs
Das zkVM-Trilemma: Geschwindigkeit, Effizienz und Prägnanz
Geschwindigkeit, Effizienz und Prägnanz sind alles gleitende Skaleneigenschaften. All diese Faktoren tragen zu den Endbenutzerkosten von zkVM bei. Wie sie in einer Bewertung gewichtet werden sollten, hängt von der Anwendung ab. Oft ist die schnellste Lösung nicht die effizienteste oder prägnanteste; Die prägnanteste Lösung ist nicht die schnellste oder effizienteste; und so weiter und so fort. Lassen Sie uns zuerst jede Eigenschaft definieren, bevor wir ihre Beziehung erklären
i. Geschwindigkeit
Die Geschwindigkeit sollte in Bezug auf bestimmte Testprogramme, Eingaben und Systeme definiert und gemessen werden, um sicherzustellen, dass sie quantitativ bewertet werden kann. Diese Metrik ist entscheidend für latenzempfindliche Anwendungen, bei denen eine schnelle Verfügbarkeit von Proofs unerlässlich ist, aber mit höherem Overhead und größeren Proof-Größen verbunden ist
ii. Effizienz
Der Prüfer verbraucht zwei Arten von Ressourcen: Kernzeit und Speicherplatz. Der Wirkungsgrad kann daher in Kernzeiteffizienz und Raumeffizienz unterteilt werden.
Kernzeiteffizienz: Durchschnittliche Betriebszeit des Prüfers über alle Kerne hinweg multipliziert mit der Anzahl der Kerne, auf denen der Prüfer ausgeführt wird. Bei einem Single-Core-Prover sind der Kernzeitverbrauch und die Geschwindigkeit dasselbe. Für einen Multi-Core-fähigen Prüfer, der im Multi-Core-Modus auf einem Multi-Core-System ausgeführt wird, sind Kernzeitverbrauch und Geschwindigkeit nicht dasselbe. Wenn ein Programm 5 Kerne oder Threads für 5 Sekunden vollständig nutzt, wären das 25 Sekunden Benutzerzeit und 5 Sekunden Wanduhrzeit.
Platzeffizienz: Bezieht sich auf die verwendete Speicherkapazität, z. B. RAM
Die Benutzerzeit ist als Stellvertreter für die Energie interessant, die durch die Ausführung einer Berechnung verbraucht wird. In einer Situation, in der alle Kerne fast immer voll ausgelastet sind, sollte der Energieverbrauch einer CPU relativ konstant bleiben. In dieser Situation sollte die Benutzerzeit, die von einer CPU-gebundenen, überwiegend benutzermodusmäßigen Codeausführung aufgewendet wird, ungefähr linear proportional zur Anzahl der Wattstunden (d. h. Energie) sein, die von dieser Codeausführung verbraucht wird.
Die Einsparung des Energieverbrauchs oder der Nutzung von Rechenressourcen sollte aus der Sicht aller Prüfvorgänge interessant sein, die so groß sind, dass ihre Energierechnung (oder ihre Cloud-Rechenrechnung) für den Nachweis erhebliche Betriebskosten verursacht. Aus diesen Gründen ist die Benutzerzeit eine interessante Kennzahl. Niedrigere Kosten für die Prüfung ermöglichen es den Dienstanbietern, niedrigere Prüfpreise an kostensensible Kunden weiterzugeben.
Beide Arten von Effizienz hängen mit dem Energieverbrauch des Prüfungsprozesses und dem Kapitalverbrauch des Prüfungsprozesses zusammen, der sich auf die finanziellen Kosten der Prüfung bezieht. Um die Definition der Effizienz für die Messung zu operationalisieren, muss die Definition in Bezug auf ein oder mehrere Testprogramme, einen oder mehrere Testeingänge für jedes dieser Programme und ein oder mehrere Testsysteme vorgenommen werden.
iii. Prägnanz
Prägnanz setzt sich aus drei verschiedenen Metriken zusammen, wobei die Komplexität der Beweisüberprüfung weiter unterteilt wird:
Die Verifikation ist in der Regel ein einzelner Kernvorgang, daher sind Geschwindigkeit und Kernzeiteffizienz in diesem Zusammenhang im Allgemeinen gleichwertig. Wie bei Geschwindigkeit und Effizienz erfordert die Operationalisierung der Definition von Prägnanz die Spezifikation von Testprogrammen, Testeingaben und Testsystemen.
Nachdem jede Performance-Eigenschaft definiert ist, veranschaulichen wir nun die Dimunitiv-Effekte der Optimierung einer Eigenschaft gegenüber den anderen.
Im Allgemeinen bedeutet die Optimierung für eine Qualität, dass nicht für eine andere Qualität optimiert wird, und daher ist eine mehrdimensionale Analyse erforderlich, um von Fall zu Fall eine optimale Lösung auszuwählen.
Eine gute Möglichkeit, diese Eigenschaften in einer Auswertung zu gewichten, kann darin bestehen, akzeptable Werte für jede Eigenschaft zu definieren und dann zu bestimmen, welche Eigenschaften am wichtigsten sind. Die wichtigsten Eigenschaften sollten optimiert werden, sofern bei allen anderen Immobilien ein ausreichendes Niveau beibehalten wird.
Im Folgenden fassen wir jede Immobilie und ihre wichtigsten Überlegungen zusammen:
Auswertungseigenschaften von zkVMs
Mit der obigen Tabelle schließen wir hiermit den ersten Artikel unserer Serie ab. In den nächsten Artikeln werden wir auf dem oben gezeigten Flussdiagramm aufbauen, um gängige arithmetische und kryptografische Prozesse in zkVMs zu erklären.
Wenn Sie dies hilfreich fanden, besuchen Sie unsere Website und unser Gitbook , um mehr darüber zu erfahren, was wir bei Lita entwickeln.
Folgen Sie uns auch auf X und Discord , um auf dem Laufenden zu bleiben, damit Sie den Rest der Serie nicht verpassen