Was sind ZK-SNARKs?
Sie sind möglicherweise auf den Begriff „ZK-SNARK“ in Diskussionen über Blockchain, Web3 und andere aufkommende Technologien gestoßen. Aber was sind sie genau? Lassen Sie uns das in einfachen Worten erläutern.
ZK-SNARK steht für „Zero-Knowledge Succinct Non-Interactive Argument of Knowledge.“ Es handelt sich um eine Art kryptografischen Beweises, der es ermöglicht, nachzuweisen, dass jemand bestimmte Informationen oder Kenntnisse hat, ohne diese Informationen tatsächlich preiszugeben.
So funktioniert es:
Zero-Knowledge: Die Person, die den Beweis erbringt (der „Beweisender“), kann die Person, die den Beweis überprüft (der „Überprüfer“), überzeugen, dass eine Aussage wahr ist, ohne zusätzliche Details zur Aussage preiszugeben. Zum Beispiel könnte der Beweisende beweisen, dass er ein geheimes Passwort kennt, ohne dem Überprüfer zu sagen, was das Passwort ist.
Kompakt: Der Beweis selbst ist sehr kompakt, normalerweise nur einige hundert Bytes lang. Das bedeutet, dass er schnell verifiziert werden kann, selbst für komplexe Aussagen.
Nicht-interaktiv: Der Beweiser kann den Beweis selbstständig generieren, ohne jegliche Kommunikation mit dem Prüfer. Der Prüfer kann dann den Beweis jederzeit überprüfen, ohne dass der Beweiser anwesend sein muss.
Argument des Wissens: Wenn die Aussage, die bewiesen wird, wahr ist, wird der Prüfer den Beweis akzeptieren. Wenn die Aussage falsch ist, wird der Prüfer den Beweis ablehnen. Dies stellt sicher, dass der Beweiser tatsächlich das Wissen hat, das er behauptet zu haben.
Praktisch ermöglichen ZK-SNARKs alle Arten von leistungsstarken Anwendungen, wie datenschutzfreundliche Transaktionen, verifizierbare Berechnungen und mehr. Sie sind ein wichtiger Baustein für viele Blockchain- und Web3-Technologien. Die Fähigkeit, Dinge zu beweisen, ohne sensible Informationen preiszugeben, hat viele potenzielle Anwendungen in der digitalen Welt.
Wie werden ZK-SNARKs konstruiert?
Der Aufbau eines ZK-SNARK-Systems umfasst drei Hauptkomponenten:
1. Arithmetisierung: Der erste Schritt besteht darin, das Problem oder die Berechnung, die der Beweiser beweisen möchte, in einer Form darzustellen, die für das ZK-SNARK-System geeignet ist. Dies beinhaltet die Umwandlung des Problems in eine Menge polynomialer Gleichungen.
Die Idee ist, dass jedes Programm oder jeder Algorithmus, egal wie komplex, letztendlich in eine Reihe einfacher arithmetischer Operationen wie Addition und Multiplikation zerlegt werden kann. In einem ZK-SNARK-System werden diese arithmetischen Operationen mit „Gates“ dargestellt — ähnlich wie die CPU eines Computers Logikgatter verwendet, um Anweisungen auszuführen. Durch die Darstellung des Problems als Schaltung dieser arithmetischen Gatter kann es in eine Menge polynomialer Gleichungen übersetzt werden, die erfüllt werden müssen.
2. Beweissystem: Sobald das Problem arithmetisiert wurde, muss der Beweiser einen kryptografischen Beweis generieren, dass er eine gültige Lösung der polynomialen Gleichungen kennt, ohne die tatsächliche Lösung preiszugeben.
Dies geschieht mit einem speziellen Beweissystem, das als „Interaktiver Oracle-Beweis“ (IOP) bezeichnet wird. Der Beweiser und der Prüfer nehmen an einem interaktiven Protokoll teil, bei dem der Beweiser Wissen über die Lösung demonstriert, der Prüfer jedoch nie die tatsächliche Lösung erfährt. Dieser interaktive Beweis kann dann mit einer Technik namens Fiat-Shamir-Transformation in einen nicht-interaktiven Beweis umgewandelt werden.
3. Verpflichtungsschema: Die letzte Komponente ist ein Verpflichtungsschema, das es dem Beweiser ermöglicht, sich „zu verpflichten“ zu seiner Lösung, auf eine Weise, die sowohl bindend ist (der Beweiser kann sie später nicht ändern) als auch versteckt (der Prüfer kann die tatsächliche Lösung nicht sehen).
Konzeptionell können Sie sich das so vorstellen, als würde der Beweiser seine Lösung auf ein Stück Papier schreiben, es in eine Box sperren und die Box an den Prüfer senden. Der Prüfer kann den Inhalt nicht sehen, aber der Beweiser kann ihn auch nicht ändern. Wenn der Beweiser bereit ist, gibt er den Schlüssel zur Öffnung der Box, sodass der Prüfer die Lösung überprüfen kann.
In der Praxis wird die Verpflichtung mit kryptografischen Techniken wie Verschlüsselung umgesetzt, anstatt mit einer wörtlichen physischen Box.
Durch die Kombination dieser drei Komponenten — Arithmetisierung, ein Beweissystem und ein Verpflichtungsschema — sind ZK-SNARK-Systeme in der Lage, prägnante, nicht-interaktive Beweise zu erstellen, die Wissen über eine Lösung demonstrieren, ohne die Lösung selbst preiszugeben. Dies ist die zentrale Innovation, die ZK-SNARKs so mächtig und nützlich in einer Vielzahl von Anwendungen macht.
ZK-SNARKs in der Anwendung
Jetzt, da wir die Kernkomponenten eines ZK-SNARK-Systems verstehen, lautet die nächste Frage: Wie können wir diese Technologie tatsächlich nutzen, um unsere eigenen Ideen oder Ansprüche zu beweisen?
Der Prozess sieht ungefähr so aus:
Idee: Beginnen Sie mit der Idee oder dem Problem, das Sie beweisen möchten.
Programm: Übersetzen Sie diese Idee in ein Computerprogramm, das ausgeführt werden kann, um das Problem zu lösen.
Schaltung: Wandeln Sie das Programm in eine „Schaltung“ um — ein Netzwerk einfacher arithmetischer Operationen, das als polynomiale Gleichungen dargestellt werden kann.
Parameter: Generieren Sie die kryptografischen Parameter, die für das ZK-SNARK-Beweissystem benötigt werden.
Beweis: Mit der Schaltung und den Parametern kann der Beweiser einen prägnanten, nicht-interaktiven Beweis generieren, dass er eine gültige Lösung kennt.
Verifizierung: Der Prüfer kann dann den Beweis überprüfen, um die Gültigkeit der Behauptung des Beweisers zu bestätigen, ohne die tatsächliche Lösung zu erfahren.
Eine Anatomie eines typischen ZK-SNARK-Systems
Wie überbrücken wir also die Lücke zwischen einem regulären Computerprogramm und der für ZK-SNARKs erforderlichen Schaltkreisdarstellung? Es gibt einige verschiedene Ansätze:
Hardwarebeschreibungssprachen (HDLs): Werkzeuge wie Circom ermöglichen es Ihnen, die Schaltung direkt mit einer Sprache zu programmieren, die ähnlich ist wie die Art und Weise, wie integrierte Schaltkreise entworfen werden. Dies gibt Ihnen eine feingranulare Kontrolle über die Schaltung, erfordert jedoch das Erlernen einer neuen domänenspezifischen Sprache.
Bibliotheken: Frameworks wie Bellman (Rust) und Gadgetlib (C++) bieten Programmierbibliotheken, mit denen Sie Schaltungen mit vertrauten Programmiersprachen erstellen können. Dies ist für Entwickler zugänglicher, erfordert jedoch dennoch ein Verständnis der schaltungsspezifischen Einschränkungen.
Compiler: Einige neue Programmiersprachen wie Zinc sind speziell für ZK-SNARK-Anwendungen konzipiert. Sie ermöglichen es Ihnen, hochgradigen Code zu schreiben, der automatisch in die erforderliche Schaltkreisdarstellung kompiliert wird. Dies ist der benutzerfreundlichste Ansatz, kann jedoch im Vergleich zu anderen Methoden Leistungseinbußen mit sich bringen.
Letztendlich hängt die Wahl des Ansatzes von Ihren spezifischen Bedürfnissen und dem Grad an Kontrolle ab, den Sie über die Schaltkreisdarstellung benötigen. Entwickler mit einem starken Hintergrund im Hardware-Design bevorzugen möglicherweise den HDL-Weg, während diejenigen, die sich mit allgemeingültigen Programmiersprachen wohler fühlen, die Bibliotheks- oder Compileroptionen zugänglicher finden.
Unabhängig vom Ansatz ist der Schlüssel, in der Lage zu sein, Ihre Idee oder Ihr Problem in eine Form zu übersetzen, die effizient als ZK-SNARK-Schaltung dargestellt werden kann. Dies entfaltet die Kraft der ZK-SNARKs, um die Gültigkeit Ihrer Ansprüche zu beweisen, ohne sensible Informationen preiszugeben.
Verifizierung von Maschinellem Lernen mit ZK-SNARKs
Da maschinelle Lernmodelle (ML) komplexer und leistungsfähiger geworden sind, ist eine neue Herausforderung entstanden: Wie können wir überprüfen, dass die von diesen Modellen getroffenen Vorhersagen korrekt sind, insbesondere wenn die Modelle von einem Drittanbieter in einem „ML-as-a-Service“ (MLaaS) Szenario bereitgestellt werden?
Hier kommt das verifizierbare maschinelle Lernen (VML) ins Spiel. Die Idee ist, ZK-SNARKs zu verwenden, um einem ML-Modellanbieter zu ermöglichen, einem Verbraucher zu beweisen, dass das Modell korrekt funktioniert, ohne die sensiblen Details des Modells selbst preiszugeben.
Wie gehen wir also vor, um einen ZK-SNARK-Beweis für ein maschinelles Lernmodell zu generieren? Es gibt einige verschiedene Ansätze:
Direkte Schaltkreisdarstellung: Der einfachste Weg ist, die zuvor besprochenen Werkzeuge wie Circom zu verwenden, um das ML-Modell in eine Schaltkreisdarstellung zu übersetzen, die verwendet werden kann, um einen ZK-SNARK-Beweis zu generieren. Diese Methode kann jedoch recht ineffizient sein, da die Größe des Schaltkreises und die Zeit, die zur Generierung des Beweises benötigt wird, schnell wachsen können, wenn die Komplexität des Modells zunimmt.
Spezialisierte ZK-SNARK-Protokolle: Um die Leistungsherausforderungen des direkten Ansatzes zu bewältigen, haben Forscher ZK-SNARK-Protokolle entwickelt, die speziell für Anwendungen im Bereich des maschinellen Lernens optimiert sind. Ein Beispiel ist Halo2, das in der Kryptowährung Zcash verwendet wird. Halo2 enthält Funktionen wie Nachschlagetabellen und benutzerdefinierte Gatter, die es viel effizienter machen, die nicht-linearen Operationen zu bearbeiten, die in ML-Modellen häufig vorkommen.
ML-fokussierte Frameworks: Auf diesen spezialisierten ZK-SNARK-Protokollen aufbauend gibt es jetzt Frameworks wie EZKL und ZKML, die höherstufige Werkzeuge zur Konstruktion von ZK-SNARK-Beweisen für ML-Modelle bereitstellen. Diese Frameworks ermöglichen es Entwicklern, direkt mit gängigen ML-Modellformaten wie PyTorch und TensorFlow Lite zu arbeiten, ohne sich um die low-level Schaltkreisdarstellung kümmern zu müssen.
Hybride Ansätze: Eine weitere Option ist, die Stärken verschiedener Ansätze zu kombinieren. Zum Beispiel bietet die Circom-HDL-Sprache, obwohl sie nicht so optimiert ist wie Halo2 für ML, sehr schnelle Überprüfungszeiten und kurze Beweise. Die Circomlib-ML-Bibliothek bietet einige vorgefertigte Schaltkreisvorlagen für gängige ML-Operationen, die als Ausgangspunkt verwendet werden können.
Letztendlich hängt die Wahl des Ansatzes von den spezifischen Anforderungen der Anwendung, der Komplexität des ML-Modells und den Abwägungen zwischen Beweisgenerierungszeit, Beweisgröße und Überprüfungsleistung ab.
Die zentrale Erkenntnis ist, dass ZK-SNARKs ein leistungsstarkes Werkzeug zur Überprüfung des Verhaltens von Modellen des maschinellen Lernens bieten, insbesondere in Szenarien, in denen die Modelle von einem Drittanbieter bereitgestellt werden. Durch die Generierung prägnanter, nicht-interaktiver Beweise kann der Modellverbraucher Vertrauen in die Richtigkeit der Vorhersagen haben, ohne die sensiblen Details des Modells selbst preiszugeben.
Referenzen
Für weitere Informationen zu ZK-SNARKs und ihren Anwendungen im maschinellen Lernen finden Sie hier einige hilfreiche Ressourcen:
Zero Knowledge Proofs MOOC: https://zk-learning.org/
Ein umfassender Online-Kurs über Zero-Knowledge-Beweise und deren Konstruktion.
ZKCNN-Papier: https://eprint.iacr.org/2021/673
Eine Forschungsarbeit, die ein spezialisiertes ZK-SNARK-Protokoll zur Verifizierung von konvolutionalen neuronalen Netzwerk (CNN)-Modellen einführt.
ZKML-Community: https://github.com/zkml-community/awesome-zkml
Eine kuratierte Liste von Ressourcen, Werkzeugen und Projekten, die mit verifizierbarem maschinellen Lernen unter Verwendung von ZK-SNARKs verbunden sind.
Daniel Kangs Medium: https://medium.com/@danieldkang
Eine Sammlung von Artikeln von Daniel Kang, einem Forscher auf dem Gebiet der ZK-SNARKs und deren Anwendungen.
Daniel Kangs Papier: https://arxiv.org/abs/2210.08674
Eine Forschungsarbeit von Daniel Kang über die Verwendung von ZK-SNARKs für verifizierbares maschinelles Lernen.
