Zero-knowledge proof (ZKP) probably is currently the hottest topic in the cryptography world. The idea of proving that something is true without revealing any information apart from the fact that this specific statement is true
is one of the most beautiful things that cryptography could do.
Although the ZKP concept was introduced a long time ago by MIT researchers Shafi Goldwasser, Silvio Micali, and Charles Rackoff, it was just getting more attention to practical applications recently and yields a huge potential in Web3.
From my experience, I found that it is hard to understand zero-knowledge through academic papers. If you want, I think the most comprehensive explanation trying to illustrate this concept was probably written by Matthew Green in his blog and and YouTube video by Avi Wigderson:
- Zero Knowledge Proofs: An illustrated primer, written by Matthew Green.
- Zero Knowledge Proof - Numberphile, given by Avi Wigderson.
After getting a sense of what is zero-knowledge proof, you then can go to very good video lectures that summarize the development of zero-knowledge proof schemes:
- Introduction to Zero Knowledge Interactive Proofs, given by Shafi Goldwasser.
- Overview of Modern SNARK Constructions, given by Dan Boneh.
- Bilinear Pairings-based Zero-Knowledge Proofs, given by Jens Groth.
That is probably enough to get started with ZKP from theory. Recently, when you heard about Zero-Knowledge systems on BLockchain or Web3, that is more about applied
ZKP. Thanks to some ZK languages such as circom, halo2, noir, etc., your task to implement a ZP program is much easier.
Circom and Halo2 are probably the most popular ZK languages. Their documentation is in the following links:
- Step-by-step: how to implement and deploy a Circom's circuit
- The Halo2 book, by ZCash
- 0xPARC: a fruitful resources introducing the use of Circom and halo2.
Personally, I found that the Rareskills book is great source. It explained and demonstrated by Python step-by-step how to a practical Zero-Knowledge Proof system work. You can find code in the subfolder Python
.