Was ist eine zk-VM?

Fortgeschrittene6/3/2024, 1:43:55 PM
ZK ist die Brücke zur weit verbreiteten Einführung der Kryptographie. Ob im Web2 oder Web3, alles, was mit Zero-Knowledge Proofs (ZKP) zu tun hat, wird einen immensen Wert schaffen. Das Lita-Team hat grundlegende wissenschaftliche Artikel geschrieben, die die Grundlagen von ZK und zkVM vorstellen, einen allgemeinen Überblick über den Prozess innerhalb von zkVM geben und schließlich eine Reihe von Standards für die Bewertung von zkVM vorschlagen.

Weiterleitung des Originaltitels 'Ein Zero-Knowledge-Paradigma: Teil 1 - Was ist eine zk-VM?'

1. Zero Knowledge Proofs: Eine Einführung

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

  • Basiert auf einem anfänglichen (vertrauenswürdigen oder nicht vertrauenswürdigen) Einrichtungsprozess, um Parameter für die Überprüfung festzulegen
  • Erfordert mindestens eine Interaktion zwischen Prüfer und Prüfer
  • Die Proof-Größen sind klein und leicht zu überprüfen
  • NARK-basierte Proofs werden von Rollups wie zkSync, Scroll und Linea verwendet

zkSTARKs: Zero Knowledge Skalierbares transparentes Argument des Wissens

  • Kein vertrauenswürdiges Setup erforderlich
  • Bieten Sie eine hohe Transparenz, indem Sie öffentlich überprüfbare Zufälligkeit verwenden, um vertrauenslose überprüfbare Systeme zu schaffen, d.h. nachweisbar zufällige Parameter zum Beweisen und Verifizieren zu generieren
  • Hochgradig skalierbar, da sie Beweise schnell (nicht immer) generieren und verifizieren können, selbst wenn die Größe des zugrunde liegenden Zeugen (Daten) groß ist
  • Erfordert keine Interaktion zwischen Prüfer und Prüfer
  • Kommt auf Kosten der Tatsache, dass STARKs größere Beweise generieren, die schwieriger zu verifizieren sein können als SNARKs
  • Beweise sind schwieriger zu überprüfen als einige zkSNARK-Beweise, aber nicht so schwer zu überprüfen wie einige andere
  • STARKs werden von Starknet sowie von zkVMs wie Lita, Risc Zero und Succinct Labs verwendet

(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.

2. Was ist eine zkVM?

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.

3. Abstrahierter zkVM-Prozessablauf

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:

  • Compiler-Phase
  1. Der Compiler kompiliert zunächst Programme, die in herkömmlichen Sprachen (C, C++, Rust, Solidity) geschrieben wurden, in Maschinencode. Das Format des Maschinencodes wird durch die Wahl der ISA bestimmt.
  • VM-Phase
  1. Die VM führt den Maschinencode aus und generiert eine Ausführungsablaufverfolgung, bei der es sich um die Reihe von Schritten des zugrunde liegenden Programms handelt. Das Format wird durch die Wahl der Arithmetisierung sowie durch die Menge der Polynombedingungen vorgegeben. Gängige Arithmetisierungsschemata sind R1CS wie in Groth16, PLONKsche Arithmetisierung wie in halo2 und AIR wie in plonky2 und plonky3.
  • Prover Bühne
  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  • Prüfer-Phase
  1. Der Prüfer überprüft den Nachweis, indem er das Verifizierungsprotokoll des Nachweissystems befolgt, entweder unter Verwendung der Einschränkungen oder der Verpflichtung. Der Prüfer akzeptiert oder lehnt das Ergebnis je nach Gültigkeit des Beweises ab.

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.

4. Bewerten von zkVMs

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

  • Korrektheit
  • Sicherheit
  • Annahmen für Vertrauen

Leistung: Misst die Fähigkeiten einer zkVM

  • Effizienz
  • Geschwindigkeit
  • Knappheit

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 VM muss die Berechnung wie vorgesehen ausführen
  • Das Proof-System muss die behaupteten Sicherheitseigenschaften erfüllen

Die Korrektheit setzt sich aus drei Eigenschaften zusammen:

  • Solidität: Das Beweissystem ist wahrhaftig und daher ist alles, was es beweist, wahr. Der Prüfer lehnt Beweise für falsche Aussagen ab; Es akzeptiert das Ergebnis einer Berechnung nur, wenn die Eingaben dieses Ergebnis tatsächlich erzeugen.
  • Vollständigkeit: Das Beweissystem ist vollständig und kann alle wahren Aussagen beweisen. Wenn der Prüfer behauptet, das Ergebnis einer Berechnung beweisen zu können, muss er in der Lage sein, einen Beweis zu erbringen, den der Prüfer akzeptiert.
  • Zero Knowledge: Der Besitz eines Beweises verrät nicht mehr über die Eingaben der Berechnung als die Kenntnis des Ergebnisses selbst

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

  • Bezieht sich auf die Toleranzen von Solidität, Vollständigkeit und Nullwissen

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

  • Annahmen über die Ehrlichkeit des Prüfers und des Prüfers, um zu der Schlussfolgerung zu gelangen, dass die zkVM zuverlässig funktioniert

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

  • Wie schnell kann der Prüfer Beweise generieren?
  • Gemessen in der Wanduhrzeit, d. h. der Zeit, die vom Anfang bis zum Ende der Berechnung verstrichen ist

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

  • Die vom Prüfer verbrauchten Ressourcen, wobei weniger vorzuziehen ist
  • Kann durch die Benutzerzeit angenähert werden, d. h. die Menge an Computerzeit, die durch den Programmcode aufgewendet wird

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

  • Die Größe der generierten Nachweise und die Komplexität ihrer Überprüfung

Prägnanz setzt sich aus drei verschiedenen Metriken zusammen, wobei die Komplexität der Beweisüberprüfung weiter unterteilt wird:

  • Proofgröße: Die physische Größe der Proofs, normalerweise in Kilobyte gemessen
  • Proof Verification Time: Dauer, die für die Überprüfung von Proofs erforderlich ist.
  • Proof Verification Space: Speichernutzung während der Proof-Verifizierung

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.

  • Geschwindigkeit: Schnelle Testdruckerstellung führt zu größeren Testversionen, aber die Testversandverifizierung ist langsam. Für die Erstellung von Nachweisen werden mehr Ressourcen verbraucht, was die Effizienz verringert
  • Prägnanz: Prover benötigt mehr Zeit, um Proofs zu komprimieren. Aber die Beweisüberprüfung ist schnell. Je prägnanter der Beweis, desto höher der Rechenaufwand
  • Effizienz: Die Minimierung des Ressourcenverbrauchs verringert die Geschwindigkeit der Proof-Generierung und die Prägnanz des Proofs

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

5. Was kommt als nächstes?

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

Verzichtserklärung:

  1. Dieser Artikel ist ein Nachdruck von [lita]. Weiterleitung des Originaltitels'Ein Zero-Knowledge-Paradigma: Teil 1 - Was ist eine zk-VM?'. Alle Urheberrechte liegen beim ursprünglichen Autor [Lita Team]. Wenn es Einwände gegen diesen Nachdruck gibt, wenden Sie sich bitte an das Gate Learn-Team , das sich umgehend darum kümmern wird.
  2. Haftungsausschluss: Die in diesem Artikel geäußerten Ansichten und Meinungen sind ausschließlich die des Autors und stellen keine Anlageberatung dar.
  3. Übersetzungen des Artikels in andere Sprachen werden vom Gate Learn-Team durchgeführt. Sofern nicht anders angegeben, ist das Kopieren, Verteilen oder Plagiieren der übersetzten Artikel untersagt.

Was ist eine zk-VM?

Fortgeschrittene6/3/2024, 1:43:55 PM
ZK ist die Brücke zur weit verbreiteten Einführung der Kryptographie. Ob im Web2 oder Web3, alles, was mit Zero-Knowledge Proofs (ZKP) zu tun hat, wird einen immensen Wert schaffen. Das Lita-Team hat grundlegende wissenschaftliche Artikel geschrieben, die die Grundlagen von ZK und zkVM vorstellen, einen allgemeinen Überblick über den Prozess innerhalb von zkVM geben und schließlich eine Reihe von Standards für die Bewertung von zkVM vorschlagen.

Weiterleitung des Originaltitels 'Ein Zero-Knowledge-Paradigma: Teil 1 - Was ist eine zk-VM?'

1. Zero Knowledge Proofs: Eine Einführung

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

  • Basiert auf einem anfänglichen (vertrauenswürdigen oder nicht vertrauenswürdigen) Einrichtungsprozess, um Parameter für die Überprüfung festzulegen
  • Erfordert mindestens eine Interaktion zwischen Prüfer und Prüfer
  • Die Proof-Größen sind klein und leicht zu überprüfen
  • NARK-basierte Proofs werden von Rollups wie zkSync, Scroll und Linea verwendet

zkSTARKs: Zero Knowledge Skalierbares transparentes Argument des Wissens

  • Kein vertrauenswürdiges Setup erforderlich
  • Bieten Sie eine hohe Transparenz, indem Sie öffentlich überprüfbare Zufälligkeit verwenden, um vertrauenslose überprüfbare Systeme zu schaffen, d.h. nachweisbar zufällige Parameter zum Beweisen und Verifizieren zu generieren
  • Hochgradig skalierbar, da sie Beweise schnell (nicht immer) generieren und verifizieren können, selbst wenn die Größe des zugrunde liegenden Zeugen (Daten) groß ist
  • Erfordert keine Interaktion zwischen Prüfer und Prüfer
  • Kommt auf Kosten der Tatsache, dass STARKs größere Beweise generieren, die schwieriger zu verifizieren sein können als SNARKs
  • Beweise sind schwieriger zu überprüfen als einige zkSNARK-Beweise, aber nicht so schwer zu überprüfen wie einige andere
  • STARKs werden von Starknet sowie von zkVMs wie Lita, Risc Zero und Succinct Labs verwendet

(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.

2. Was ist eine zkVM?

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.

3. Abstrahierter zkVM-Prozessablauf

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:

  • Compiler-Phase
  1. Der Compiler kompiliert zunächst Programme, die in herkömmlichen Sprachen (C, C++, Rust, Solidity) geschrieben wurden, in Maschinencode. Das Format des Maschinencodes wird durch die Wahl der ISA bestimmt.
  • VM-Phase
  1. Die VM führt den Maschinencode aus und generiert eine Ausführungsablaufverfolgung, bei der es sich um die Reihe von Schritten des zugrunde liegenden Programms handelt. Das Format wird durch die Wahl der Arithmetisierung sowie durch die Menge der Polynombedingungen vorgegeben. Gängige Arithmetisierungsschemata sind R1CS wie in Groth16, PLONKsche Arithmetisierung wie in halo2 und AIR wie in plonky2 und plonky3.
  • Prover Bühne
  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  • Prüfer-Phase
  1. Der Prüfer überprüft den Nachweis, indem er das Verifizierungsprotokoll des Nachweissystems befolgt, entweder unter Verwendung der Einschränkungen oder der Verpflichtung. Der Prüfer akzeptiert oder lehnt das Ergebnis je nach Gültigkeit des Beweises ab.

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.

4. Bewerten von zkVMs

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

  • Korrektheit
  • Sicherheit
  • Annahmen für Vertrauen

Leistung: Misst die Fähigkeiten einer zkVM

  • Effizienz
  • Geschwindigkeit
  • Knappheit

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 VM muss die Berechnung wie vorgesehen ausführen
  • Das Proof-System muss die behaupteten Sicherheitseigenschaften erfüllen

Die Korrektheit setzt sich aus drei Eigenschaften zusammen:

  • Solidität: Das Beweissystem ist wahrhaftig und daher ist alles, was es beweist, wahr. Der Prüfer lehnt Beweise für falsche Aussagen ab; Es akzeptiert das Ergebnis einer Berechnung nur, wenn die Eingaben dieses Ergebnis tatsächlich erzeugen.
  • Vollständigkeit: Das Beweissystem ist vollständig und kann alle wahren Aussagen beweisen. Wenn der Prüfer behauptet, das Ergebnis einer Berechnung beweisen zu können, muss er in der Lage sein, einen Beweis zu erbringen, den der Prüfer akzeptiert.
  • Zero Knowledge: Der Besitz eines Beweises verrät nicht mehr über die Eingaben der Berechnung als die Kenntnis des Ergebnisses selbst

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

  • Bezieht sich auf die Toleranzen von Solidität, Vollständigkeit und Nullwissen

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

  • Annahmen über die Ehrlichkeit des Prüfers und des Prüfers, um zu der Schlussfolgerung zu gelangen, dass die zkVM zuverlässig funktioniert

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

  • Wie schnell kann der Prüfer Beweise generieren?
  • Gemessen in der Wanduhrzeit, d. h. der Zeit, die vom Anfang bis zum Ende der Berechnung verstrichen ist

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

  • Die vom Prüfer verbrauchten Ressourcen, wobei weniger vorzuziehen ist
  • Kann durch die Benutzerzeit angenähert werden, d. h. die Menge an Computerzeit, die durch den Programmcode aufgewendet wird

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

  • Die Größe der generierten Nachweise und die Komplexität ihrer Überprüfung

Prägnanz setzt sich aus drei verschiedenen Metriken zusammen, wobei die Komplexität der Beweisüberprüfung weiter unterteilt wird:

  • Proofgröße: Die physische Größe der Proofs, normalerweise in Kilobyte gemessen
  • Proof Verification Time: Dauer, die für die Überprüfung von Proofs erforderlich ist.
  • Proof Verification Space: Speichernutzung während der Proof-Verifizierung

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.

  • Geschwindigkeit: Schnelle Testdruckerstellung führt zu größeren Testversionen, aber die Testversandverifizierung ist langsam. Für die Erstellung von Nachweisen werden mehr Ressourcen verbraucht, was die Effizienz verringert
  • Prägnanz: Prover benötigt mehr Zeit, um Proofs zu komprimieren. Aber die Beweisüberprüfung ist schnell. Je prägnanter der Beweis, desto höher der Rechenaufwand
  • Effizienz: Die Minimierung des Ressourcenverbrauchs verringert die Geschwindigkeit der Proof-Generierung und die Prägnanz des Proofs

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

5. Was kommt als nächstes?

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

Verzichtserklärung:

  1. Dieser Artikel ist ein Nachdruck von [lita]. Weiterleitung des Originaltitels'Ein Zero-Knowledge-Paradigma: Teil 1 - Was ist eine zk-VM?'. Alle Urheberrechte liegen beim ursprünglichen Autor [Lita Team]. Wenn es Einwände gegen diesen Nachdruck gibt, wenden Sie sich bitte an das Gate Learn-Team , das sich umgehend darum kümmern wird.
  2. Haftungsausschluss: Die in diesem Artikel geäußerten Ansichten und Meinungen sind ausschließlich die des Autors und stellen keine Anlageberatung dar.
  3. Übersetzungen des Artikels in andere Sprachen werden vom Gate Learn-Team durchgeführt. Sofern nicht anders angegeben, ist das Kopieren, Verteilen oder Plagiieren der übersetzten Artikel untersagt.
Jetzt anfangen
Registrieren Sie sich und erhalten Sie einen
100
-Euro-Gutschein!