Archipelago

Lec 19zk-SNARKs

讲义完成更新于 2026-09-16

Lec 19 zk-SNARKs

MIT 6.5610 · Lecture 19 · 关键词:SNARK、简洁性、算术电路化(R1CS/QAP)、多项式承诺、Fiat–Shamir、可信设置、zk 说明:以标准处理撰写,要点与本课"zk-SNARKs"一致。


TL;DR

  • zk-SNARK 同时追求零知识、简洁证明与快速验证,适合验证远大于验证成本的计算。
  • 典型流程先把程序算术化,再用多项式承诺和证明系统保证约束被满足。
  • 不同家族在可信设置、证明大小、验证速度、后量子安全与证明者成本之间取舍。

0. 是什么

zk-SNARK = Zero-Knowledge Succinct Non-interactive ARgument of Knowledge:

字母含义
ZK零知识:不泄露见证 ww
Succinct证明极短(常数/对数级)、验证极快(与计算规模无关或对数级)
Non-interactive单条证明,无需来回交互
ARgument计算可靠(对计算受限的作弊者可靠,弱于无条件 soundness 的"proof")
of Knowledge不仅命题真,证明者确实持有见证(可抽取)

目标:对"我知道满足某电路 C(x,w)=1C(x,w)=1 的见证 ww"出具一个任何人都能快速验证、却不泄露 ww、且体积远小于重算 CC 的证明。


1. 流水线:算术电路化 → 多项式 → 承诺

定理

典型 SNARK 三段式

  1. 算术化(arithmetization):把计算 CC 编码为代数约束系统,如 R1CS(一组 ⟨ai,z⟩⋅⟨bi,z⟩=⟨ci,z⟩\langle a_i,z\rangle\cdot\langle b_i,z\rangle=\langle c_i,z\rangle)或进一步转成 QAP(多项式整除关系 A(X)B(X)−C(X)=H(X)Z(X)A(X)B(X)-C(X)=H(X)Z(X))。"计算正确" ⟺ "某多项式恒等成立"。
  2. 交互式 oracle 证明:用 sumcheck(L15)/ PCP 类协议,让验证者通过少数随机点求值检验多项式恒等(Schwartz–Zippel:错误恒等在随机点几乎必露馅)。
  3. 多项式承诺(polynomial commitment):证明者先承诺到多项式(KZG / IPA / FRI / Merkle),之后在挑战点"打开"求值并证明打开正确 —— 这把"oracle 求值"落实为可验证的密码操作,同时压缩证明体积。 :::

2. 去交互与零知识

  • Fiat–Shamir(L11):把验证者的随机挑战换成 H(transcript)H(\text{transcript}),在随机预言机模型下变成非交互证明。
  • 零知识:在承诺/打开中加入随机盲化(blinding),使证明对 ww 不泄露——验证者只看到"恒等成立",看不到具体见证。

3. 设置假设与家族

几类主流方案

  • Groth16:基于配对(pairing)+ 电路相关的可信设置(trusted setup),证明极短(~3 群元素),验证极快;但每个电路需一次 setup。
  • PLONK / Marlin:通用可信设置(一次 setup 多电路复用)。
  • STARK / Bulletproofs:无可信设置(透明),抗量子(STARK 基于哈希),代价是证明更大。 :::

⚠️ 可信设置的"有毒废料":Groth16/PLONK 的 setup 会产生秘密随机数,若泄露可伪造证明,故需多方仪式(MPC ceremony)销毁。透明方案(STARK/Bulletproofs)避开此风险。


4. 工程视角

  • 应用:zk-rollup(链下计算、链上只验小证明,扩容)、隐私支付(Zcash)、隐私身份/合规证明(证明"满足 KYC/年龄"而不暴露数据)、可验证外包计算。
  • 选型:要最短证明/最快验证 → Groth16;要无可信设置/抗量子 → STARK;要通用 setup 平衡 → PLONK。
  • 成本:证明者很重(生成证明慢、内存大),验证很轻——典型"证明贵、验证廉"的非对称,正适合"一次证明、多次/链上验证"场景。
  • 与 GKR(L18)/ sumcheck(L15)关系:它们提供 SNARK 的"信息论核心",再叠加多项式承诺 + Fiat–Shamir 即成完整 zk-SNARK。

5. zk-SNARK 小结

  • zk-SNARK = 零知识 + 简洁 + 非交互 + 知识论证。
  • 流水线:算术化(R1CS/QAP)→ 多项式恒等 + 随机点检验 → 多项式承诺 → Fiat–Shamir 去交互 + 盲化做 ZK。
  • 家族取舍:Groth16(短证明/电路相关 setup)、PLONK(通用 setup)、STARK(透明/抗量子)。
  • 证明贵、验证廉;可信设置需多方仪式销毁毒废料。

SNARK 把验证成本转移给证明者和设置阶段;评估方案时必须同时核算证明生成、可信设置与升级成本。