ZK Proving Systems

https://github.com/matter-labs/awesome-zero-knowledge-proofs#bulletproofs

SNARKs

An approximate introduction to how zk-SNARKs are possible

Setup Ceremonies

Pinocchio Protocol + Groth16

R1CS -> QAP -> Trusted Setup -> NILP (Non-interactive Linear Proof) -> pairing-based NIZK (non-interactive zero knowledge) proof

  • R1CS arithmetization
  • Requires phase 2 non-universal trusted setup

Quadratic Arithmetic Program (QAP)

Pinocchio Protocol

Groth16

PLONK

TurboPLONK

PlonK with custom gates

UltraPLONK

TurboPLONK plus plookup

Halo 2

Implements UltraPLONK

ewfew

  • PSE fork uses KZG commitments instead

Nova

Bulletproofs

Original paper

Halo (original ZCash)

STARKs

Polynomial Commitment Schemes (PCS)

Table from https://vitalik.ca/general/2021/11/05/halo.html

Technology Cryptographic assumptions Proof size Verification time
FRI Hashes only (quantum safe!) Large (10-200 kB) Medium (poly-logarithmic)
Inner product arguments (IPAs) Basic elliptic curves Medium (1-3 kB) Very high (linear)
KZG commitments Elliptic curves + pairings + trusted setup Short (~500 bytes) Low (constant)
IPA + Halo-style aggregation Basic elliptic curves Medium (1-3 kB) Medium (constant* but higher than KZG)

*constant = log(size of incremental step)

KZG (Kate, Zaverucha and Goldberg)

IPAs (Inner product arguments)

FRI