Archipelago

Lec 11交互式证明与零知识

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

Lec 11 交互式证明与零知识

MIT 6.5610 · Lecture 11 · 关键词:交互式证明、完备性/可靠性、零知识、模拟器、Σ 协议、Schnorr、Fiat–Shamir 说明:以标准处理撰写(GMR 1985),要点与本课"Interactive Proofs & Zero-Knowledge"一致。


TL;DR

  • 交互式证明以完备性和可靠性区分“真命题可证”与“假命题难骗过验证者”。
  • 零知识要求存在模拟器:验证者看到的交互不泄露证明内容之外的信息。
  • Schnorr 协议展示知识证明;Fiat–Shamir 可把公开随机挑战改为哈希挑战以消除交互。

0. 主线

证明者 PP 想让验证者 VV 相信某命题为真,却不泄露任何额外信息——尤其不泄露"为什么真"(如不暴露秘密见证 ww)。这就是零知识(zero-knowledge, ZK)。


1. 交互式证明(Interactive Proof)

PP 与 VV 多轮交互;VV 多项式时间、可掷币。对语言 LL:

定义

完备性(Completeness):x∈Lx\in L 时,诚实 PP 能让 VV 接受(概率 ≥1−negl\ge 1-\mathrm{negl})。 可靠性(Soundness):x∉Lx\notin L 时,任何(作弊)P∗P^* 让 VV 接受的概率 ≤negl\le \mathrm{negl}(或某小常数,可由重复放大)。

🔎 与 NP 证明的区别:NP 是单向、静态证书;交互式证明引入随机性 + 交互,能证明更广的语言(IP = PSPACE),且为零知识打开空间。


2. 零知识:模拟器范式

如何形式化"没泄露额外信息"?

定义

零知识(Simulator paradigm):存在多项式时间模拟器(simulator) SS,不知道见证 ww,却能生成与"真实 PP-VV 交互记录(view)"不可区分的对话。

🔎 直觉:若验证者看到的一切都能由一个不知道秘密的模拟器自行伪造出来(且无法区分),那么这段交互对验证者就是"无信息增量"的——它本可以自己脑补。这是密码学最优雅的定义之一。 区分强度:完美 ZK(分布相同)/ 统计 ZK / 计算 ZK(计算不可区分)。


3. 经典例子

例

图同构 ZK(直觉版) 命题:"G0,G1G_0, G_1 同构",见证 = 同构映射 π\pi。

  1. PP 随机置换得 H=σ(G0)H=\sigma(G_0),发 HH(承诺)。
  2. VV 掷币 b∈{0,1}b\in\{0,1\},要求 PP 给出 HH 到 GbG_b 的同构。
  3. PP 回应(b=0b=0 给 σ\sigma,b=1b=1 给 σ∘π−1\sigma\circ\pi^{-1})。
  • 可靠性:若 G0≇G1G_0\not\cong G_1,作弊者无法同时应对两个挑战,每轮被抓概率 ≥1/2\ge 1/2,重复放大。
  • 零知识:模拟器先猜 bb,构造能回答该 bb 的 HH;猜错就重来。无需知道 π\pi。 :::

4. Σ 协议与 Schnorr 身份认证

**三步式(commit–challenge–response)**结构称 Σ 协议。典范是 Schnorr(证明知道离散对数 xx 使 h=gxh=g^x):

Schnorr 协议

  1. PP 选随机 rr,发承诺 a=gra=g^r。
  2. VV 发随机挑战 cc。
  3. PP 回 z=r+cxz=r+cx。VV 验 gz=?a⋅hcg^z \stackrel?= a\cdot h^c。 :::
  • 特殊可靠性:对同一 aa 的两个不同挑战 (c,z),(c′,z′)(c,z),(c',z') 可抽取出 x=z−z′c−c′x=\frac{z-z'}{c-c'}(知识抽取器)→ 证明者"确实知道" xx(proof of knowledge)。
  • honest-verifier ZK:模拟器先选 z,cz,c,反算 a=gzh−ca=g^z h^{-c},分布正确。

5. Fiat–Shamir:去交互

把交互式 Σ 协议变成非交互(NIZK / 签名):用哈希函数生成挑战 c=H(statement ∥ a).c = H(\text{statement} \,\|\, a).

🔎 在随机预言机模型下,HH 替代了验证者的随机挑战,证明者无法预先操纵 → 可靠性保持。这把 Schnorr 变成 Schnorr 签名(消息也喂进哈希),是 EdDSA 等现代签名的基础,也是 zk-SNARK(L19)去交互的关键工具。


6. 工程视角

  • ZK 应用:隐私身份/凭证(证明"我已成年"而不暴露生日)、隐私区块链(zk-rollup)、可验证计算、防作弊审计。
  • Σ + Fiat–Shamir 是落地最轻量的路径;复杂命题用 zk-SNARK/STARK(L19)。
  • ⚠️ Fiat–Shamir 必须把完整上下文喂进哈希(statement + 所有公开参数),否则会出现"weak Fiat–Shamir"漏洞。

7. 交互式证明与零知识小结

  • 交互式证明 = 完备性 + 可靠性,靠随机+交互超越 NP。
  • 零知识 = 存在不知见证的模拟器能伪造不可区分的对话。
  • Σ 协议(commit-challenge-response):Schnorr 是模板,含知识抽取。
  • Fiat–Shamir(RO 模型)去交互 → NIZK / 签名 / SNARK 基石。

零知识不是“把证明加密”,而是要求整段交互可被模拟;验证者因而没有获得命题之外的新知识。