Zero-Knowledge Proofs

Proving a statement is true while revealing nothing else — the three defining properties, the Schnorr protocol as the worked case, and what SNARKs and STARKs actually buy.

A zero-knowledge proof lets a prover convince a verifier that a statement is true while revealing nothing beyond its truth — not the witness, not a hint toward it. Introduced by Goldwasser, Micali and Rackoff in 1985, the idea sat mostly in theory for twenty-five years, then became practical infrastructure: private transactions, blockchain rollups, anonymous credentials, and proofs that a computation was performed correctly without re-running it.

The three properties #

Property Meaning
Completeness if the statement is true, an honest prover convinces an honest verifier
Soundness if it is false, no cheating prover convinces the verifier (except with negligible probability)
Zero-knowledge the verifier learns nothing beyond truth

Schnorr's protocol, concretely #

The canonical example. The prover knows a discrete log xx with P=xGP = xG (on an elliptic curve) and wants to prove it without revealing xx:

Check the algebra: sG=(r+cx)G=rG+c(xG)=R+cPsG = (r + cx)G = rG + c(xG) = R + cP ✓

Soundness: a prover who could answer two different challenges for the same RR would yield s1−s2=(c1−c2)xs_1 - s_2 = (c_1 - c_2)x, revealing xx — so anyone who can reliably answer must actually know it. Zero-knowledge: pick ss and cc at random, set R=sG−cPR = sG - cP, and you have a perfectly valid-looking transcript produced with no knowledge of xx — which is exactly the simulator.

Fiat–Shamir: removing the verifier #

Replace the verifier's random challenge with c=H(R ∥ statement ∥ context)c = H(R \,\|\, \text{statement} \,\|\, \text{context}). The prover generates the challenge itself, but cannot control it, so the proof becomes non-interactive — a single message, publishable, verifiable by anyone, forever. This transform is what turns interactive proofs into signatures and into blockchain-usable artifacts.

SNARKs and STARKs #

Modern systems prove statements far larger than "I know a discrete log" — typically "I correctly executed this program", with the computation compiled into an arithmetic circuit.

zk-SNARKzk-STARK
Proof size~200 bytes, constanttens–hundreds of KB
Verificationmilliseconds, constantfast, polylogarithmic
Trusted setuprequired (Groth16); universal (PLONK)none — transparent
Assumptionpairings — quantum-brokenhashes only — plausibly PQ-safe

Succinct is the key adjective: verification cost is independent of the size of the computation proved. Verifying that a million transactions executed correctly costs about the same as verifying one — which is precisely what makes blockchain rollups work.

Where it is used #

  • Private transactions — Zcash shielded transfers, Monero range proofs.
  • Rollups — zkSync, StarkNet, Scroll post a validity proof so an L1 verifies an L2 batch without re-execution.
  • Anonymous credentials — prove "over 18" or "citizen of X" without revealing identity or date of birth; the basis of privacy-preserving digital identity work.
  • Verifiable computation — prove an outsourced job ran correctly.
  • Proof of solvency — an exchange proves reserves exceed liabilities without publishing the balance sheet.

Sources

  1. paperThe Knowledge Complexity of Interactive Proof Systems (Goldwasser, Micali, Rackoff, 1989)
  2. paperEfficient Identification and Signatures for Smart Cards (Schnorr, 1989)
  3. paperScalable, transparent, and post-quantum secure computational integrity (STARKs, Ben-Sasson et al.)
  4. docsZKProof Community Reference

Searches titles, aliases, headings, summaries, and full text.↑↓ move ↵ open esc close