ZKP’s — for dummies
Zero knowledge proofs are extremely powerful security primitives that are likely going to be integrated in many of our computer systems (especially the newer tech like Blockchain and other distributed systems)
In attempts to understand, utilize and build programs around ZKP’s I took a deep dive into the scary world of knowledglessness.
This article contains some of my words and many links and excepts from various places on line.
The content ranges from technical reads to simplified videos. I hope these are helpful for building an intuitive understanding of ZKP’s their uses and current progress.
Zero Knowledge and Proof should not be confused. They are separate topics and caused me much confusion when looking into ZKPs. This is an important distinction. Zero Knowledge simply means that no information was leaked, while proving — allows a verifier to reason that the information they received did is actually true.
ZKP’s are awesome tools and are difficult to develop in a production setting at the current time. The math is sound and libraries are available — but mostly in systems languages
haskell which may be most sustainable (but are not languages that promote shared understanding — and easy prototyping). It is currently hard for a developer to leverage the full potential of ZKPs due to their complex math and low level implementations. I imagine that this will get much easier over time as higher level packages get written on top of the early implementations.
Zero Knowledge Proofs require a strong mathematical background — being that a lot of the programming work is translating problems into arithmetic circuits which can be used to create quadratic arithmetic programs, a fundamental part of ZKP’s. It is important that a developer understands how to reduce the question they are trying to prove to a series of
a*b=c form (see the article STARKs, Part I: Proofs with Polynomials below)
In the wild there are a few flavors of ZKP’s in production. Monero (Bulletproof) — ZCash (SNARKS) and Ethereum with a focus on STARKS.
These three systems have time, space and initial setup tradeoffs. For instance SNARKS requires a Trusted Setup while STARKS and Bulletproof do not.
The reference implementations of STARKS are written in C++ while Bulletproof is in Haskell and some of the research work from the ZCash community is in Rust (Bellman).
Math is always fun, but what are the practical implications of ZKP’s — and more specifically non-interactive ZKP’s?
If the theory is 20+ years old, why am I hearing about it now?
Well, thats the story with a lot of abstract mathematical concepts. The underpinnings of our modern day devices, protocols and software work because of theories someone first realized hundreds of years ago. Math is a way to describe systems in the world we experience (and some crazier math explores worlds we cant experience)
From a lower level, what does it actually prove? Hows that applicable for my business?
Well, the current implementations can prove (theoretically anything) but practically the tools available allow you to build arbitrary proofs of arithmetic circuits.
Here is more insight into the value ZKPs can provide.
Explain Like I’m 5: Zero Knowledge Proof (Halloween Edition)
Explaining crypto is hard, explaining crypto in simple words is harder. Explaining Zero Knowledge Proof to a child…
Zero Knowledge Proofs: An illustrated primer
One of the best things about modern cryptography is the beautiful terminology. You could start any number of punk bands…
Interactive zero knowledge 3-colorability demonstration
This is an interactive demonstration of the zero knowledge proof protocol for 3-colorable graphs. Zero-knowledge proofs…
Contribute to Manishearth/sudoku-zkp development by creating an account on GitHub.
C++ library for zkSNARKs. Contribute to scipr-lab/libsnark development by creating an account on GitHub.
examples for bellman zk-snarks library. Contribute to arcalinea/bellman-examples development by creating an account on…
STARKs, Part I: Proofs with Polynomials
Special thanks to Eli Ben-Sasson for ongoing help, explanations and review, coming up with some of the examples used in…
STARKs, Part II: Thank Goodness It's FRI-day
In the last part of this series, we talked about how you can make some pretty interesting succinct proofs of…
STARKs, Part 3: Into the Weeds
Special thanks to Eli ben Sasson for his kind assistance, as usual. Special thanks to Chih-Cheng Liang and Justin Drake…
Contribute to ethereum/research development by creating an account on GitHub.
A curated list of awesome things related to learning zero knowledge proofs - gluk64/awesome-zero-knowledge-proofs