Modern Cryptography · Module 11

Zero-Knowledge
Proofs

From Sigma Protocols to SNARKs and STARKs —
Proving Knowledge Without Revealing It

ZK-SNARKs ZK-STARKs Bulletproofs PLONK

What Is a Zero-Knowledge Proof?

A zero-knowledge proof allows a prover (P) to convince a verifier (V) that a statement is true, without revealing any information beyond the truth of the statement itself. Formally, a ZKP for language L must satisfy three properties.

Completeness

If the statement is true and both parties follow the protocol, the verifier always accepts.

x ∈ L ⇒ Pr[V accepts] = 1

Soundness

If the statement is false, no cheating prover can convince the verifier, except with negligible probability.

x ∉ L ⇒ Pr[V accepts] ≤ negl(λ)

Zero-Knowledge

The verifier learns nothing beyond the statement's validity. There exists a simulator that produces indistinguishable transcripts.

View_V[P(w) ↔ V](x) ≈ Sim(x)

Soundness variants: Statistical soundness — no unbounded prover can cheat. Computational soundness (argument) — no PPT prover can cheat. ZK-SNARKs achieve computational soundness; ZK-STARKs achieve information-theoretic soundness.

Classic Analogies

Ali Baba's Cave

A circular cave with a magic door. The prover enters from a random side, the verifier calls out which side to exit from. If the prover knows the secret word, they always emerge correctly. After n rounds, probability of cheating = 2-n.

DOOR Path A Path B V Entrance

Colour-Blind Friend

You have two balls — one red, one green. Your colour-blind friend cannot tell them apart. You prove they are different by having the friend hide them behind their back, optionally swap, then show you one. You always correctly say whether they swapped. After n rounds, the friend is convinced.

Red Green Swap? Prover detects swap with certainty
Key insight: In both analogies, each round leaks zero information about the secret (path choice / colour). The verifier only learns that the prover can consistently respond correctly — which is overwhelming evidence of knowledge.

Interactive vs Non-Interactive ZK

Interactive ZK (IZK)

Multiple rounds of communication between prover and verifier. Verifier sends random challenges; prover responds.

Pros: Simpler construction, information-theoretic ZK possible
Cons: Requires live interaction, not transferable

Sigma Protocols Schnorr ID

Non-Interactive ZK (NIZK)

Single message from prover to verifier. No interaction needed. Uses a Common Reference String (CRS) or random oracle.

Pros: Publicly verifiable, composable, blockchain-friendly
Cons: Stronger assumptions (CRS or ROM)

SNARKs STARKs Fiat-Shamir

Interactive P V commit challenge response Non-Interactive P V π (single proof) CRS / Random Oracle

Schnorr Identification Protocol

The foundational interactive ZK proof of knowledge of a discrete logarithm. Prover knows x such that h = gx in group G of order q.

Prover (knows x) Verifier (knows h) r ← Z_q a = g^r a (commitment) e ← {0,1}^t e (challenge) z = r + e·x (mod q) z (response) Check: g^z = a · h^e Accept if equal
Why it is zero-knowledge: A simulator can produce valid-looking transcripts (a, e, z) by picking z and e first, then computing a = gz · h-e. These are indistinguishable from real transcripts — so the verifier learns nothing about x.

Sigma Protocols

A Sigma (Σ) protocol is a three-move interactive proof: commit → challenge → response. The Schnorr protocol is the canonical example, but the structure generalizes to many relations.

Commit (a)
Prover picks randomness r, sends a = f(r)
Challenge (e)
Verifier sends random e from challenge space
Response (z)
Prover computes z = g(r, e, w)

Special Soundness

Given two accepting transcripts (a, e, z) and (a, e', z') with e ≠ e', one can extract the witness w. This gives proof of knowledge, not just proof of existence.

Special HVZK

Honest-Verifier Zero-Knowledge: a simulator exists when the verifier picks challenges uniformly at random. Sufficient for Fiat-Shamir transformation.

Sigma ProtocolRelation ProvedWitnessApplications
Schnorrh = gxx (discrete log)Digital signatures, authentication
Guillou-Quisquatery = xe mod nx (e-th root)RSA-based identification
Pedersen ORDL(h₁) OR DL(h₂)One of x₁, x₂Ring signatures, deniability
Chaum-PedersenDL equalityx: gx=h, fx=vVRFs, re-encryption proofs

Fiat-Shamir Heuristic

Transforms any Sigma protocol into a non-interactive proof by replacing the verifier's random challenge with a hash of the commitment. Secure in the Random Oracle Model (ROM).

INTERACTIVE 1. a = g^r 2. e ← Verifier 3. z = r + e·x Proof = (a, z), verified live H() NON-INTERACTIVE 1. a = g^r 2. e = H(g, h, a) 3. z = r + e·x Proof π = (a, z) — publicly verifiable

Security

Provably secure in the ROM. In the standard model, Fiat-Shamir can be insecure for some protocols (Goldwasser-Kalai counterexample). In practice: universally deployed.

Schnorr Signatures

Applying Fiat-Shamir to the Schnorr ID protocol yields the Schnorr signature scheme — the basis of EdDSA (Ed25519) and BIP-340 (Bitcoin Taproot).

SECTION II

ZK-SNARKs

Succinct Non-interactive ARguments of Knowledge

ZK-SNARKs Overview

A ZK-SNARK is a proof system where the proof is succinct (small and fast to verify), non-interactive, and an argument of knowledge (extractable under computational assumptions).

~200 B
Proof Size (Groth16)
~3 ms
Verification Time
O(1)
Verifier complexity
The SNARK pipeline: Every SNARK follows a common compilation chain.
Computation
Program / circuit
Arithmetization
R1CS or AIR
Polynomial IOP
QAP / PLONK
Commitment
KZG / FRI / IPA
Proof
π = (A, B, C)

Assumptions typically required: knowledge-of-exponent (KEA), q-SDH (Strong Diffie-Hellman), and the Generic Group Model (GGM). Relies on elliptic curve pairings (BN254, BLS12-381).

Arithmetic Circuits & R1CS

The first step in building a SNARK is expressing the computation as an arithmetic circuit over a finite field F_p, then converting it to a Rank-1 Constraint System (R1CS).

Arithmetic Circuit

x y 1 × + out = x·y + 1

R1CS Encoding

Each multiplication gate becomes a constraint:

  (a_i · s) * (b_i · s) = (c_i · s)

  Variables: s = [1, x, y, v1, out]

  Gate 1 (multiply):
    a = [0, 1, 0, 0, 0]  (x)
    b = [0, 0, 1, 0, 0]  (y)
    c = [0, 0, 0, 1, 0]  (v1 = x*y)

  Gate 2 (add-as-constraint):
    a = [1, 0, 0, 1, 0]  (1 + v1)
    b = [1, 0, 0, 0, 0]  (1)
    c = [0, 0, 0, 0, 1]  (out)
Constraint count matters: SNARK prover time scales roughly linearly with the number of R1CS constraints. A SHA-256 hash requires ~25,000 constraints; an ECDSA verification ~300,000. Circuit optimization is critical.

QAP: Polynomial Encoding

The Quadratic Arithmetic Program converts R1CS constraints into a polynomial identity check. Instead of verifying m constraints individually, the verifier checks one polynomial equation.

R1CS → QAP Transformation

For m constraints over n variables, interpolate each column of the a, b, c matrices into polynomials using Lagrange interpolation at points {r₁, ..., r_m}:

  A(x) = Σ s_i · a_i(x)     // left input polynomial
  B(x) = Σ s_i · b_i(x)     // right input polynomial
  C(x) = Σ s_i · c_i(x)     // output polynomial

  QAP Satisfaction: A(x) · B(x) - C(x) = H(x) · Z(x)

  where Z(x) = (x - r_1)(x - r_2)...(x - r_m)  (vanishing polynomial)
  and H(x) = quotient polynomial (exists iff constraints satisfied)

Why Polynomials?

Schwartz-Zippel lemma: two distinct degree-d polynomials agree on at most d points. Checking at a random point τ gives soundness error d/|F| — negligible over large fields.

Succinctness

Instead of checking m constraints, verify one evaluation: A(τ)·B(τ) - C(τ) = H(τ)·Z(τ). The evaluation point τ is hidden in the CRS — this is where trusted setup enters.

Trusted Setup & Toxic Waste

Pairing-based SNARKs require a structured reference string (SRS) containing encrypted evaluations of secret powers τ. If anyone learns τ, they can forge proofs.

Participant 1 τ_1 ← random Participant 2 τ_2 ← random ... Participant N τ_n ← random SRS [τ^i]_1, [τ^i]_2 τ = τ_1 · τ_2 · ... · τ_n — secure if at least one participant is honest Each participant must destroy their τ_i — the "toxic waste" Zcash Sprout (6 participants) → Zcash Sapling (87) → Perpetual Powers of Tau (thousands)

Powers of Tau Ceremony

SRS = {[τ0]₁, [τ1]₁, ..., [τd]₁, [τ0]₂, [τ1]₂, ...} where [x]₁ = x·G₁ (group elements). Each participant contributes randomness multiplicatively. 1-of-N honest assumption.

The Problem

If τ is known, an adversary can construct H(τ) to satisfy A(τ)·B(τ) - C(τ) = H(τ)·Z(τ) for any false statement. The entire system collapses. This motivates transparent alternatives (STARKs, Bulletproofs).

Groth16: The Gold Standard SNARK

Groth16 (Eurocrypt 2016) achieves the smallest proof size and fastest verification of any known pairing-based SNARK. Used in Zcash Sapling, Filecoin, and most EVM ZK circuits.

3
Group elements in proof

π = (A ∈ G₁, B ∈ G₂, C ∈ G₁)
~192 bytes on BN254, ~288 bytes on BLS12-381

3
Pairings for verification

Verify: e(A, B) = e(α, β) · e(L, γ) · e(C, δ)
Constant-time regardless of circuit size

Groth16 Prover Computation

  Setup:  Circuit-specific SRS from Powers of Tau
  Prove:  1. Compute QAP polynomials A(x), B(x), C(x), H(x)
          2. Multi-scalar multiplication (MSM) on G₁ and G₂
             A = [α + A(τ) + r·δ]₁
             B = [β + B(τ) + s·δ]₂
             C = [H(τ)·Z(τ)/δ + witness terms + ...]₁
          3. Dominant cost: two MSMs of size |witness|
Limitation: Groth16 requires a circuit-specific trusted setup. Each new circuit needs a new ceremony. This motivates universal SNARKs like PLONK.
SECTION III

ZK-STARKs

Scalable Transparent ARguments of Knowledge

ZK-STARKs Overview

Introduced by Ben-Sasson et al. (2018). STARKs replace elliptic curve pairings with hash functions and Reed-Solomon codes, achieving transparency (no trusted setup) and plausible post-quantum security.

Transparent Setup

No secret parameters. The CRS is just a hash function description. Anyone can verify the setup. No toxic waste to destroy.

Trust-minimized

Post-Quantum

Security relies only on collision-resistant hashing. No discrete log or pairing assumptions. Survives quantum computers (assuming hash security).

Quantum-safe

Scalable Prover

Prover runs in quasi-linear time O(n · log n). Verifier runs in O(log² n). Both are polylogarithmic in the computation size.

Efficient

The trade-off: STARK proofs are significantly larger than SNARK proofs — typically 50-200 KB vs ~200 bytes for Groth16. This makes STARKs less suited for on-chain verification where calldata is expensive, but ideal for off-chain validity proofs.

SNARKs vs STARKs

PropertyZK-SNARKs (Groth16)ZK-STARKs
Proof Size~200 B~50-200 KB
Verification Time~3 ms (constant)~10-50 ms (log²n)
Prover TimeO(n log n) — MSM-heavyO(n log n) — hash-heavy
Trusted SetupRequired (circuit-specific)None (transparent)
Post-QuantumNo (pairing-based)Yes (hash-based)
Crypto AssumptionsKEA, q-SDH, pairingsCollision-resistant hash
ArithmetizationR1CS → QAPAIR (Algebraic Intermediate Rep.)
Commitment SchemeKZG (pairing-based)FRI (hash-based)
Notable UsersZcash, Filecoin, Tornado CashStarkNet, StarkEx, Polygon Miden
Convergence trend: Modern systems blur the line. PLONK uses KZG (pairing) but is universal. Plonky2 combines PLONK arithmetization with FRI commitments. Plonky3 pushes further toward STARK-like transparency with SNARK-like flexibility.

FRI: Fast Reed-Solomon IOP

FRI (Fast Reed-Solomon Interactive Oracle Proof of Proximity) is the polynomial commitment scheme underlying STARKs. It proves that a function is close to a low-degree polynomial using only hash queries.

FRI Protocol — Iterative Degree Reduction

f₀(x) degree < d split f₁(x) degree < d/2 split f₂(x) degree < d/4 ... f_k = constant degree 0 Each round: f_i(x) = g(x²) + α_i · h(x²), where f_i(x) = g(x²) + x·h(x²) Verifier challenge α_i folds the polynomial, halving its degree After log(d) rounds, the polynomial is constant — verifier checks consistency via Merkle proofs

Complexity

Prover: O(n log n) hash operations
Verifier: O(log² n) hash queries
Proof size: O(log² n) field elements + Merkle paths

Soundness

FRI achieves soundness error (d/|D|)r where d is the claimed degree, |D| is the domain size, and r is the number of query rounds. Typically 30-80 queries for 128-bit security.

PLONK: Universal & Updatable

PLONK (Gabizon, Williamson, Ciobotaru, 2019) introduces a universal SRS — one trusted setup works for any circuit up to a given size. The SRS is also updatable — new participants can strengthen it.

Gate Constraints

PLONK uses a custom gate format instead of R1CS:

  q_L·a + q_R·b + q_O·c
  + q_M·(a·b) + q_C = 0

  where q_* are selector polynomials
  and a, b, c are wire values

Supports addition and multiplication in a single gate. Custom gates (e.g., Poseidon hash) dramatically reduce constraint count.

Copy Constraints (Permutation)

PLONK connects gates via a permutation argument. Wire values are constrained to be equal across gates using a grand product polynomial:

  Z(x) = Π (f_i + β·σ(i) + γ)
          / (f_i + β·i + γ)

  Check Z(ω^0) = 1 and Z(ω^n) = 1
  (grand product is identity permutation)
PLONK variants: TurboPLONK (custom gates), UltraPLONK (lookup arguments via Plookup), Plonky2 (PLONK + FRI, no trusted setup), HyperPLONK (multilinear extension over hypercube). The PLONK framework has become the dominant paradigm for modern proof systems.

Bulletproofs

Bulletproofs (Bunz et al., 2018) are short non-interactive zero-knowledge proofs that require no trusted setup. Proof size is O(log n) group elements. Optimal for range proofs and small circuits.

~672 B
64-bit range proof

vs. ~4 KB for Sigma protocol range proof

O(n)
Verification time

Linear in circuit size — not succinct for large circuits

0
Trusted setup

Uses Pedersen commitments + discrete log assumption only

Inner Product Argument (IPA) — Core Technique

Bulletproofs reduce proving an inner product relation <a, b> = c for vectors of length n to a proof of size O(log n) via recursive halving:

  1. Split vectors: a = (a_L, a_R), b = (b_L, b_R)
  2. Compute cross-terms: L = <a_L, b_R>, R = <a_R, b_L>
  3. Verifier sends challenge x
  4. Fold: a' = a_L·x + a_R·x⁻¹,  b' = b_L·x⁻¹ + b_R·x
  5. Recurse on half-size vectors until n = 1

Used in: Monero (confidential transactions), Mimblewimble/Grin, Halo (without trusted setup). Bulletproofs+ reduces proof size by ~16%.

SECTION IV

Applications

Blockchain · Identity · Private Computation

Blockchain Applications

ZK proofs address two fundamental blockchain problems: privacy (hiding transaction details) and scalability (compressing computation off-chain).

Zcash

First production deployment of ZK-SNARKs. Shielded transactions hide sender, receiver, and amount. Sprout (2016, Groth16) → Sapling (2018, optimized) → Orchard (2022, Halo 2, no trusted setup).

Privacy Groth16 → Halo 2

zkSync / zkRollups

Layer-2 scaling: batch thousands of transactions, generate one proof, verify on Ethereum. zkSync Era uses custom SNARK. Polygon zkEVM proves EVM execution. Reduces gas costs ~100x.

Scalability EVM-compatible

StarkNet

STARK-based L2 on Ethereum. No trusted setup. Uses Cairo language compiled to AIR. SHARP (Shared Prover) amortizes proving costs across applications. Post-quantum ready.

STARKs Transparent

ZK-Rollup economics: A single Groth16 proof costs ~300K gas to verify on Ethereum. If it attests to 10,000 transactions, the amortized cost is ~30 gas per transaction vs ~21,000 for a native transfer. 700x compression.

Identity & Credential Proofs

ZK proofs enable selective disclosure: prove properties about your identity without revealing the identity itself.

Age Verification

Prove "I am over 18" without revealing your birthdate, name, or any other ID field. The ZK circuit checks: current_date - birth_date ≥ 18 years against a signed government credential.

Signed ID Private witness ZK ≥ 18

Verifiable Credentials

W3C Verifiable Credentials + ZK: prove you hold a valid diploma from a specific university without revealing your name, GPA, or student ID. BBS+ signatures enable efficient selective disclosure. Semaphore protocol enables anonymous group membership proofs.

ZK Identity Stack

Issuer
Signs credential
Holder
Stores privately
ZK Circuit
Proves property
Verifier
Checks proof only

Private Computation & zkML

ZK proofs extend beyond simple identity: they enable verifiable computation where a server proves it executed a program correctly without revealing inputs.

Verifiable Computation

A weak client delegates computation f(x) to a powerful server. The server returns y = f(x) along with a ZK proof π that y is correct. The client verifies π in O(log |f|) time — far cheaper than recomputing.

Applications: Cloud computing, database queries, trustless oracles

zkML (Zero-Knowledge Machine Learning)

Prove that a neural network inference was computed correctly on a specific model without revealing model weights or input data.

Use cases:

• Prove an AI model produced a specific output
• Verify model fairness without exposing training data
• On-chain AI inference attestation

zkML challenges: Neural network circuits are enormous. A modest CNN has millions of constraints. EZKL compiles ONNX models to ZK circuits. ZKML benchmark (2024): proving a MobileNet inference takes ~30 seconds with Halo2, producing a ~5 KB proof.

Recursive Composition

A proof that verifies another proof. Recursive SNARKs enable incrementally verifiable computation (IVC): each step proves "the previous proof was valid AND I did one more step correctly."

Step 1 Prove f(x₀)=x₁ π₁ Step 2 Verify π₁ inside circuit + Prove f(x₁)=x₂ π₂ ... Step N Verify π_{N-1} inside circuit + Prove f(x_{N-1})=x_N π_N Single proof attests N steps Constant-size proof regardless of N — infinite compression Key challenge: the verifier circuit must be efficient to embed inside the prover

Halo / Halo 2

First recursive proof without trusted setup (Bowe, Grigg, Hopwood, 2019). Uses IPA (Bulletproof-style) commitment on Pasta curves. Deployed in Zcash Orchard. Amortizes verification via accumulation.

Nova

Kothapalli, Setty, Tzialla (2022). Uses folding instead of full SNARK verification. Folds two R1CS instances into one without proving. Orders of magnitude faster than recursive SNARKs. Dominant IVC scheme.

Applications

ZK-rollup state compression, blockchain light clients, verifiable delay functions, incrementally verifiable MapReduce, proof aggregation for batch settlement.

Performance Comparison

Benchmarks for proving a SHA-256 preimage (~25K constraints). Times on modern hardware (AMD Ryzen 9 / Apple M2). Real-world performance varies significantly with circuit size and optimization.

SystemProof SizeProve TimeVerify TimeSetupAssumption
Groth16192 B~1.5 s~3 msCircuit-specificPairings
PLONK~600 B~3 s~5 msUniversalPairings (KZG)
Halo 2~5 KB~4 s~15 msNoneDLOG
STARK~100 KB~2 s~20 msNoneHash (PQ-safe)
Bulletproofs~1.5 KB~10 s~1.5 sNoneDLOG
Plonky2~45 KB~0.5 s~3 msNoneHash (PQ-safe)
Nova (folding)~10 KB*~20 ms/step~50 ms*NoneDLOG

*Nova proof requires a final SNARK compression step for succinctness. Per-step cost is amortized.

Choosing a proof system: Groth16 for minimal on-chain cost. PLONK for flexibility without per-circuit ceremonies. STARKs for transparency and post-quantum. Nova for incremental computation. No single system dominates all axes.

ZK Proof Construction

A simplified Schnorr-style ZK proof of discrete log knowledge, showing the Fiat-Shamir transformation. This is real cryptographic structure, not abstraction.

Pseudocode: NIZK Proof of DLog Knowledge

def prove_dlog(G, H, x, q):
    """Prove knowledge of x such that H = x*G (elliptic curve)"""
    # 1. Commit: pick random nonce
    r = random_scalar(q)          # r ← Z_q
    A = r * G                      # commitment A = r·G

    # 2. Challenge: Fiat-Shamir hash
    e = H_to_scalar(G, H, A)      # e = Hash(G || H || A) mod q

    # 3. Response
    z = (r + e * x) % q           # z = r + e·x mod q

    return Proof(A, z)             # π = (A, z)

def verify_dlog(G, H, proof, q):
    """Verify proof that prover knows x with H = x*G"""
    A, z = proof.A, proof.z

    # Recompute challenge
    e = H_to_scalar(G, H, A)      # e = Hash(G || H || A) mod q

    # Verification equation: z·G == A + e·H
    lhs = z * G                    # z·G
    rhs = A + e * H                # A + e·H = r·G + e·x·G
    return lhs == rhs              # True iff prover knows x
Correctness: z·G = (r + e·x)·G = r·G + e·x·G = A + e·H. The simulator picks z, e randomly, computes A = z·G - e·H — indistinguishable from a real proof. This is the foundation on which Ed25519 and Taproot signatures are built.

Arithmetic Circuit Definition

How a modern ZK framework (e.g., Circom, Halo2, Noir) defines constraints. This example proves knowledge of two numbers whose product equals a public output.

Circom (R1CS)

pragma circom 2.1.0;

template Multiply() {
    signal input a;   // private
    signal input b;   // private
    signal output c;  // public

    // R1CS constraint: a * b === c
    c <== a * b;
}

// Range proof (a is n bits)
template RangeProof(n) {
    signal input a;
    signal bits[n];
    var sum = 0;
    for (var i = 0; i < n; i++) {
        bits[i] <-- (a >> i) & 1;
        bits[i] * (1 - bits[i]) === 0;
        sum += bits[i] * (1 << i);
    }
    sum === a;
}

Noir (ACIR)

// Aztec's Noir language
fn main(
    a: Field,      // private
    b: Field,      // private
    c: pub Field   // public
) {
    // Constraint: a * b == c
    assert(a * b == c);
}

// SHA-256 membership proof
fn verify_membership(
    leaf: Field,
    path: [Field; 32],
    root: pub Field
) {
    let computed = merkle_root(
        leaf, path
    );
    assert(computed == root);
}

Compilation: Circom → R1CS → Groth16/PLONK proof. Noir → ACIR → Barretenberg backend. Both produce a binary proof file and a verification key.

Current Research Directions

The ZK proof landscape is evolving rapidly. Key research threads in 2025-2026 focus on efficiency, expressiveness, and new paradigms.

Folding Schemes

Nova, SuperNova, HyperNova, ProtoStar. Replace expensive recursive SNARK verification with cheap folding of relaxed R1CS instances. Nova folds in ~10ms vs ~seconds for recursive Groth16. Sangria extends folding to PLONK.

IVC Dominant paradigm

Lookup Arguments

Plookup, Caulk, Baloo, Lasso. Prove that values appear in a lookup table without expanding into binary constraints. Critical for efficient hash functions (Poseidon, Keccak) and VM execution.

Expressiveness 10-100x gains

CCS & Customizable Constraint Systems

Generalization of R1CS, PLONK, and AIR into a single framework. Enables folding schemes to work across different arithmetizations. HyperNova folds CCS instances directly.

Unification

Hardware Acceleration

MSM and NTT are the bottlenecks. GPU provers (Icicle, cuZK) achieve 10-50x speedup. FPGA designs target real-time proving. ASICs for ZK (Cysic, Ingonyama) target 100x+ improvement over CPU.

Performance GPU/FPGA/ASIC

Emerging frontiers: Proof aggregation (combining proofs from different systems), MPC-in-the-head (Ligero, Brakedown — VOLE-based), lattice-based SNARKs (post-quantum SNARKs without hash overhead), and formal verification of ZK circuit correctness.

Summary

Foundations — Zero-knowledge proofs satisfy completeness, soundness, and zero-knowledge. Sigma protocols provide the three-move (commit, challenge, response) interactive framework. Fiat-Shamir heuristic converts interactive proofs to non-interactive via hashing.

SNARKs — Arithmetic circuits compiled to R1CS, encoded as QAP polynomials, committed via KZG pairings. Groth16 achieves 192-byte proofs with 3ms verification. Requires circuit-specific trusted setup (toxic waste, Powers of Tau ceremonies).

STARKs & alternatives — Hash-based, transparent, post-quantum. FRI protocol for polynomial commitment. Larger proofs (~100KB) but no trust assumptions. PLONK provides universal setup. Bulletproofs offer logarithmic proof size without setup.

Applications — Blockchain privacy (Zcash) and scalability (zkRollups, StarkNet). Identity (selective disclosure, age proofs). Verifiable computation and zkML. Recursive composition enables infinite proof compression.

Frontier — Folding schemes (Nova, HyperNova) transform IVC. Lookup arguments accelerate complex operations. Hardware acceleration (GPU/FPGA/ASIC) targets real-time proving. The field converges toward unified, efficient, transparent proof systems.

Modern Cryptography Series · Module 11