ZKP ist ein praktisches kenntnisfreies Protokoll, das kleine und recheneffiziente Zero-Knowledge-Proofs für beliebige Berechnungen bereitstellt. Mit diesem System können wir kurze, nicht interaktive Proofs mit günstigen und schnellen Überprüfungszeiten erstellen. Die Topologie des Proof-Generierungssystems wird in der folgenden Abbildung beschrieben.
- Programmaufbau
- Vertrauenswürdiges Setup
- Proof-Generierung
- Nachweisprüfung
Die Programmkonstruktion wird von anderen Bibliotheken entwickelt, die einen Standard-JSON ausgeben Protokoll, das die funktionale Zusammensetzung von arithmetisch berechneten Toren beschreibt Operationen der Addition und Multiplikation und mit Drähten. Diese Bibliothek kann Verwenden Sie einfach einen anderen Compiler oder eine andere Bibliothek, die JSON als Austausch ausgibt Format.
Eine Referenzbibliothek für die Schaltungskonstruktionssprache wird von bereitgestellt Rechenschaltungen Paket.
Das vertrauenswürdige Setup kann über die Befehlszeile ausgeführt werden. Welches wird die eine erzeugen Zeitparameter, die für die Einrichtung eines bestimmten Stromkreises benötigt werden. Die Setup-Parameter können entweder später zerstört oder in einem geheimen Shamir-Sharing verteilt werden Aufbau. Die Shamir-Freigabe ermöglicht ein n-von-m-Setup mit einem Minimum von n Die Teilnehmer müssen ihre geheimen Teile kombinieren, um das vertrauenswürdige Setup wiederherzustellen.
zkp setup --prover Groth16 --input samples/example1.json -o setupdir
Dadurch werden die vertrauenswürdigen Setup-Parameter im Verzeichnis "setupdir"
generiert. Diese fünf Zufallsparameter (α
,β
,𝛾
,δ
,x
) aus dem
Primfeld Fr der elliptischen Kurve BN254
RandomSetup
{ setupAlpha =
P 12256559805687004284032990640481138455228350420895296477627313054450750333538
, setupBeta =
P 4401553107086663101145669242467980542018664489189708849056812824771109996937
, setupGamma =
P 11751086019938025633396747311851452921508835627313304853903993116945166687533
, setupDelta =
P 168604024821165987426171350616143663866971217710026689954359697680025921731
, setupX =
P 17090290750981977232640417368259094286138615605287635462955897488010126230557
}
Wenn Sie Hardware-Entropie aus dem Kernel verwenden möchten, um den Zufall auszuführen
Generation übergeben die --hardware
Flagge während des Trusted Setups.
Für einen gegebenen Satz gültiger Eingaben ( --inputs
) wird hierdurch der
Proof generiert Ausdruck pi
in eine Proof-Datei. Dies beinhaltet den
prägnanten Null-Wissensnachweis die Auswertung der Schaltung mit den
vorgegebenen vertrauenswürdigen Setup- und Programmeingaben.
zkp prove --input samples/example1.json -d setupdir --inputs samples/inputs1.json --pi proof
Dies wird einen π
- Beweisbegriff erzeugen, der aus drei Begriffen in besteht
aus der bilinearen Abbildung A : G2, B : G1 and C : G1.
Proof
{ proofA =
A (P 4881623700312852323508547682818174690864977127565225101692969747455865314076)
(P 21226270279582811012422188678741405568697460494611910557066940647978844558004)
, proofB =
A (E (P 20323099801991325872207033941577805160427313780137510282152872074461606067272 *
X +
P 1422252355533785307633747654423585463232482725315893764382065912760224949248))
(E (P 3567658277931205602889970963406800124094834788390622140804820116722346374274 *
X +
P 15030027696371368845331628915595104373945089162840261486371773861661834388966))
, proofC =
A (P 21113978983642622273905001525315900726975017023639887701995527379031005434733)
(P 1703880359115562486637532379447225273456712398817044635461020607254025768226)
}
Der Verifizierungsalgorithmus verwendet als Eingabe eine eingeschränkte gemeinsame Referenzzeichenfolge
und ein Beweisbegriff ( --pi
) berechnet die endgültige Paarungsoperation, um das zu verifizieren
Integrität des Proofs und gibt eine Ablehnung oder eine Annahme als Exit-Code zurück.
zkp verify -d setupdir --inputs samples/inputs1.json --pi proof
Dieses Beweissystem verwendet eine polymorphe Darstellung der elliptischen Kurve Operationen, mit denen wir den Beweiser über mehrere elliptische Kurven instanziieren können einschließlich:
- BN254
- BLS12-381
Diese Bibliothek wird auf 8.x des Haskell-Compilers kompiliert. Zum Installieren von GHC verwenden Sie ghcup.
ghcup install 8.6.5
Laden Sie diese Bibliothek nach der Einrichtung von GHC herunter und erstellen Sie sie mit cabal
.
git clone [email protected]:adjoint-io/zkp.git
cd zkp
cabal new-install --installdir=.
cp ./zkp ~/.local/bin
Alternativ kann diese Bibliothek mit erstellt werden stack:
cd zkp
stack install
Die ausführbare Datei zkp
kann in einem Docker-Image erstellt und ausgeführt werden:
$ docker build -t zkp .
$ docker run -ti zkp /bin/bash
Dies ist ein optionaler Schritt und nur für Entwickler.
ZKP wird mit einer Reihe von Spezifikationen durch Verfeinerungsarten angereichert, die sind überprüfbar die LiquidHaskell Rahmen. LiquidHaskell analysiert die Module und erfüllt die Nachweispflichten zu einem SMT-Löser, um zu sehen, ob die Bedingungen erfüllt sind. Dies ermöglicht es uns, beweisen das Fehlen einer Familie von Fehlern in Bezug auf Speichersicherheit, Arithmetik Ausnahmen und Informationsfluss.
Sie benötigen entweder Microsoft Research Z3 SMT Solver oder Stanford CVC4 SMT Solver.
Für Linux:
sudo apt install z3 # z3
sudo apt install cvc4 # cvc4
Für Mac:
brew tap z3 # z3
brew tap cvc4/cvc4 # cvc4
brew install cvc4/cvc4/cvc4
Dann installieren Sie LiquidHaskell entweder mit Cabal oder Stack:
cabal install liquidhaskell
stack install liquidhaskell
Die Überprüfung kann dann über die Kryptografiemodule in diesem Projekt ausgeführt werden.
liquid -f --cabaldir -i src -i spec src/Poly.hs
liquid -f --cabaldir -i src -i spec src/Protocol/Groth.hs
Dieses Beweissystem hängt von den folgenden Abhängigkeiten ab.
- arithmetic-circuits - Rechenschaltungen für wissensfreie Systeme
- pairing - Bilinearen Abbildung
- galois-field - Finite-Feld-Arithmetik
- galois-fft - Finite-Feld-Polynom-Arithmetik basierend auf schnellen Fourier-Transformationen
- elliptic-curve - Elliptische Kurvenoperationen
- arithmoi - Zahlentheoretische Operationen
- semirings - Algebraische Semirings
- poly - Effiziente Polynomarithmetik
- entropy - Erzeugung von Entropie
- shamir - Shamir geheime Weitergabe