# Cryptography and ZKP Primer Resources ## General Blockchain Concepts - [Do you need a Blockchain?](https://eprint.iacr.org/2017/375.pdf) - [Bitcoin Original Paper](https://bitcoin.org/bitcoin.pdf) - [Ethereum White Paper](https://ethereum.org/669c9e2e2027310b6b3cdce6e1c52962/Ethereum_Whitepaper_-_Buterin_2014.pdf) - [Ethereum Beige Paper](https://cryptopapers.info/assets/pdf/eth_beige.pdf) - [Ethereum Yellow Paper](https://ethereum.github.io/yellowpaper/paper.pdf) ## Zero Knowledge Proofs ### [Zero-Knowledge Proofs Starter Pack](https://ethresear.ch/t/zero-knowledge-proofs-starter-pack/4519) - [Introduction to zk-SNARKs with examples](https://media.consensys.net/introduction-to-zksnarks-with-examples-3283b554fc3b) - [What are zk-SNARKs (Zcash blog)](https://z.cash/technology/zksnarks) - [BabySNARK- The simplest possible SNARK for NP. You know, for kids!](https://github.com/initc3/babySNARK) ### Why and How zk-SNARK Works: - [Why and How zk-SNARK Works 1: Introduction & the Medium of a Proof](https://medium.com/@imolfar/why-and-how-zk-snark-works-1-introduction-the-medium-of-a-proof-d946e931160) - [Why and How zk-SNARK Works 2: Proving Knowledge of a Polynomial](https://medium.com/@imolfar/why-and-how-zk-snark-works-2-proving-knowledge-of-a-polynomial-f817760e2805) - [Why and How zk-SNARK Works 3: Non-interactivity & Distributed Setup](https://medium.com/@imolfar/why-and-how-zk-snark-works-3-non-interactivity-distributed-setup-c0310c0e5d1c) - [Why and How zk-SNARK Works 4: General-Purpose Computation](https://medium.com/@imolfar/why-and-how-zk-snark-works-4-general-purpose-computation-dcdc8081ee42) - [Why and How zk-SNARK Works 5: Variable Polynomials](https://medium.com/@imolfar/why-and-how-zk-snark-works-5-variable-polynomials-3b4e06859e30) - [Why and How zk-SNARK Works 6: Verifiable Computation Protocol ](https://medium.com/@imolfar/why-and-how-zk-snark-works-6-verifiable-computation-protocol-1aa19f95a5cc) - [Why and How zk-SNARK Works 7: Constraints and Public Inputs](https://medium.com/@imolfar/why-and-how-zk-snark-works-7-constraints-and-public-inputs-e95f6596dd1c) - [Why and How zk-SNARK Works 8: Zero-Knowledge Computation](https://medium.com/@imolfar/why-and-how-zk-snark-works-8-zero-knowledge-computation-f120339c2c55) ### Electric Coin blog series: - [Explaining SNARKs Part I: Homomorphic Hidings](https://electriccoin.co/blog/snark-explain/) - [Explaining SNARKs Part II: Blind Evaluation of Polynomials](https://electriccoin.co/blog/snark-explain2/) - [Explaining SNARKs Part III: The Knowledge of Coefficient Test and Assumption](https://electriccoin.co/blog/snark-explain3/) - [Explaining SNARKs Part IV: How to make Blind Evaluation of Polynomials Verifiable](https://electriccoin.co/blog/snark-explain4/) - [Explaining SNARKs Part V: From Computations to Polynomials](https://electriccoin.co/blog/snark-explain5/) - [Explaining SNARKs Part VI: The Pinocchio Protocol](https://electriccoin.co/blog/snark-explain6/) - [Explaining SNARKs Part VII: Pairings of Elliptic Curves](https://electriccoin.co/blog/snark-explain7/) ### Vitalik Buterin's blog series on SNARKs: - [Part 1: Quadratic Arithmetic Programs: from Zero to Hero](https://medium.com/@VitalikButerin/quadratic-arithmetic-programs-from-zero-to-hero-f6d558cea649) - [Part 2: Exploring Elliptic Curve Pairings](https://medium.com/@VitalikButerin/exploring-elliptic-curve-pairings-c73c1864e627) - [Part 3: Zk-SNARKs: Under the Hood](https://medium.com/@VitalikButerin/zk-snarks-under-the-hood-b33151a013f6) ### Protocol descriptions: - [zkSNARKs in a Nutshell](https://chriseth.github.io/notes/articles/zksnarks/zksnarks.pdf) - [Groth16 protocol](https://eprint.iacr.org/2016/260.pdf) (original paper) - [Zcash Sapling protocol spec](https://github.com/zcash/zips/blob/master/protocol/protocol.pdf) (very useful as detailed cheat-sheet of all cryptography used) ## Math Background ### Pairings - [Pairings for beginners - Costello notes](https://static1.squarespace.com/static/5fdbb09f31d71c1227082339/t/5ff394720493bd28278889c6/1609798774687/PairingsForBeginners.pdf) - [Part 2: Exploring Elliptic Curve Pairings](https://medium.com/@VitalikButerin/exploring-elliptic-curve-pairings-c73c1864e627) - [An Introduction to Pairing-Based Cryptography - Alfred Menezes](https://www.math.uwaterloo.ca/~ajmeneze/publications/pairings.pdf) ### BLS12-381 Elliptic Curve - [BLS12-381 For The Rest Of Us](https://hackmd.io/@benjaminion/bls12-381#Twists) ## PlonK - [PLONK paper](https://eprint.iacr.org/2019/953.pdf) - [Awesome PLONK](https://github.com/Fluidex/awesome-plonk): A curated list of awesome things related to plonk proof system. - [Understanding PLONK by Vitalik Buterin](https://vitalik.ca/general/2019/09/22/plonk.html) - [Ignition: Trusted Setup MPC Ceremony for PLONK](https://medium.com/aztec-protocol/aztec-announcing-our-ignition-ceremony-757850264cfe) - PONK by Hand - [Part 1](https://research.metastate.dev/plonk-by-hand-part-1/) - [Part 2](https://research.metastate.dev/plonk-by-hand-part-2-the-proof/) - [Part 3](https://research.metastate.dev/plonk-by-hand-part-3-verification/) - [Into the deep end: making sense of PLONK - Zac Williamson - Youtube](https://www.youtube.com/watch?v=ty-LZf0YCK0) - [Dusk PlonK Implementation (Rust)](https://github.com/dusk-network/plonk) ## Multi-Party Ceremony (MPC) for Trusted Setup - [“Powers of Tau” protocol for scalable generation of structured reference string](https://eprint.iacr.org/2017/1050) - [Perpetual powers of Tau Repository](https://github.com/weijiekoh/perpetualpowersoftau/tree/master/0000_weijie_initial) - Tornado cash Repos for MPC - [phase2-bn254](https://github.com/tornadocash/phase2-bn254) - [phase2-wasm](https://github.com/tornadocash/phase2-wasm) - [trusted setup server](https://github.com/tornadocash/trusted-setup-server) - [Implementation of ZCash MPC Ceremony, Part I: "Powers of Tau"](https://github.com/ebfull/powersoftau) - [Archived independent implementation in Go](https://github.com/FiloSottile/powersoftau/) - [Implementation of ZCash MPC Ceremony, Part I: "Sapling Circuit"](https://github.com/zcash-hackworks/sapling-mpc) ## Internal Documentation - [Basic concepts](https://hackmd.io/@Serg10JV/ByMbUBzoc) - [Link to Google Drive Folder](https://drive.google.com/drive/folders/1DR__DoP9nk224gPQley6YOaGtwsOEzhg?usp=sharing) ## Mixers