/understanding-zkp

My learning journey to understand practical ZKP systems, including KZG poly commitment, Groth16, Plonk, ...

Primary LanguageJupyter Notebook

Zero-Knowledge Proof Learning Resources (a learning path)

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:

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:

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:

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.