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 with (on an elliptic curve) and wants to prove it without revealing :
sequenceDiagram
participant P as Prover (knows x)
participant V as Verifier
P->>V: commitment R = rG, r random
V->>P: challenge c (random)
P->>V: response s = r + c·x
Note over V: accept iff sG == R + cP
Check the algebra: ✓
Soundness: a prover who could answer two different challenges for the same would yield , revealing — so anyone who can reliably answer must actually know it. Zero-knowledge: pick and at random, set , and you have a perfectly valid-looking transcript produced with no knowledge of — which is exactly the simulator.
Fiat–Shamir: removing the verifier #
Replace the verifier's random challenge with . 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-SNARK | zk-STARK | |
|---|---|---|
| Proof size | ~200 bytes, constant | tens–hundreds of KB |
| Verification | milliseconds, constant | fast, polylogarithmic |
| Trusted setup | required (Groth16); universal (PLONK) | none — transparent |
| Assumption | pairings — quantum-broken | hashes 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
- paperThe Knowledge Complexity of Interactive Proof Systems (Goldwasser, Micali, Rackoff, 1989)
- paperEfficient Identification and Signatures for Smart Cards (Schnorr, 1989)
- paperScalable, transparent, and post-quantum secure computational integrity (STARKs, Ben-Sasson et al.)
- docsZKProof Community Reference