3.3 零知识证明 (Zero-Knowledge Proofs, ZKP)


3.3 零知识证明 (Zero-Knowledge Proofs, ZKP)

本节摘要:能证明"我知道"而不展示"是什么"吗?零知识证明让这成为可能。本节讲清楚 ZKP 原理(交互协议+承诺)、现代 zk-SNARK/zk-STARK、可信设置、工程落地。读完你能判断项目该不该用 ZKP、用哪种。

一、ZKP 的核心问题

零知识证明(ZKP):证明者让验证者相信"我知道见证 w 使关系 R(x,w) 成立",但不泄露 w。

三个性质:

  • 完备性(Completeness):若证明者真知道 w,验证者接受(高概率)。
  • 正确性(Soundness):若证明者不知道 w,验证者拒绝(高概率)。
  • 零知识(Zero-Knowledge):验证者只学到"x 存在见证",不学 w 是什么。

应用场景:

  • 身份认证:证明"我满 18 岁"不暴露具体年龄/生日。
  • 隐私交易:证明"我有足够余额"不暴露余额(Zcash)。
  • 合规证明:证明"交易符合反洗钱"不暴露交易细节。
  • 区块链扩容:证明"链下交易有效"链上只验证证明(zk-Rollup)。
  • 凭证验证:证明"我有某权限"不暴露权限内容。

二、ZKP 的基本原理

ZKP 用交互协议+承诺实现:

交互式 ZKP(如 Schnorr 协议):

  1. 证明者承诺——发 A = g^r(r 随机)。
  2. 验证者挑战——发随机 c。
  3. 证明者响应——发 z = r + c·x(x 是见证)。
  4. 验证者检查 g^z = A·y^c(y = g^x 公开)。

零知识来自:验证者学到 (A, c, z),但能自己模拟同样分布的 (A, c, z)——所以没学到新信息。

非交互式 ZKP(Fiat-Shamir 启发式):

  • 把验证者挑战换成哈希——c = H(A, x)。
  • 证明者一次发 (A, z),验证者用哈希算 c 检查。
  • 无需交互,适合区块链等场景。

现代 ZKP(zk-SNARK)都是非交互式。

三、现代 ZKP:zk-SNARK

zk-SNARK(Zero-Knowledge Succinct Non-interactive ARgument of Knowledge):简洁非交互零知识证明。

特点:

  • 简洁(Succinct):证明大小常数(几百字节),验证快(ms 级),不管见证多大。
  • 非交互(Non-interactive):一次发证明,无需多轮。
  • 知识证明(Argument of Knowledge):证明者不仅证明 x 有见证,还证明"知道"见证。

代表方案:

  • Groth16:证明最小(~200 字节),验证最快,但需可信设置(每个电路单独设置)。
  • PLONK:通用可信设置(一次设置多电路用),证明稍大,灵活。
  • Marlin:通用设置,证明大小中等。
  • Sonic:早期通用设置方案。

可信设置(Trusted Setup):zk-SNARK 的关键——生成证明密钥和验证密钥时,产生"有毒废料"(trapdoor),任何持有者能伪造证明。设置仪式(多方参与,任一方销毁废料即安全)解决。Groth16 每电路单独设置,PLONK 通用设置一次。

四、现代 ZKP:zk-STARK

zk-STARK(Zero-Knowledge Scalable Transparent ARgument of Knowledge):可扩展透明零知识证明。

特点:

  • 透明(Transparent):无需可信设置——用公开随机性(哈希),无有毒废料。
  • 可扩展(Scalable):证明生成快(比 SNARK 某些场景快),但证明大(几十 KB 到 MB)。
  • 抗量子:基于哈希函数,不依赖椭圆曲线,抗量子攻击(SNARK 依赖椭圆曲线,量子可破)。
  • 验证较慢:证明大,验证比 SNARK 慢。

代表:StarkWare 的 StarkEx、Polygon Miden。

SNARK vs STARK 选择

  • 链上验证成本敏感(gas 贵)→ SNARK(证明小验证快)。
  • 抗量子/无信任设置要求 → STARK。
  • 复杂电路 → STARK(扩展性好)。

五、ZKP 的工作流程

现代 ZKP 流程:

1. 电路编写:把要证明的关系写成"电路"——一组约束(如 R1CS、Plonkish、AIR)。

  • 例:证明"知道 x 使 x² = y"——电路约束 x·x = y。
  • 电路用领域特定语言(DSL)写——Circom、Noir、Leo、Cairo。

2. 设置

  • SNARK:可信设置生成证明/验证密钥(Groth16 每电路,PLONK 通用)。
  • STARK:无设置,用公开参数。

3. 证明生成

  • 证明者用见证 w 和公开输入 x,运行证明算法,生成证明 π。
  • 证明生成慢(ms 到秒级,取决于电路复杂度)。

4. 验证

  • 验证者用验证密钥、公开输入 x、证明 π,运行验证算法。
  • 验证快(ms 级),证明小(SNARK 几百字节)。

六、ZKP 的性能

1. 证明生成:慢——电路越复杂越慢。复杂电路(如 ML 推理)可能秒到分钟级。
2. 证明大小:SNARK 几百字节,STARK 几十 KB-MB。
3. 验证:快——SNARK ms 级,STARK 稍慢但仍快。
4. 电路编写:要把问题转成电路,非线性/分支/循环要专门处理,工程门槛高。
5. 可信设置:SNARK 的负担——要组织仪式、保管废料。

七、ZKP 的工程落地

1. DSL 和框架

  • Circom:写电路,配 SnarkJS 验证(Groth16/PLONK)。
  • Noir:Aztec,高级语言,隐私智能合约。
  • Leo:Aleo,隐私区块链编程。
  • Cairo:StarkWare,STARK 友好。
  • zkSync/ZkEVM:以太坊 zk-Rollup,用 ZKP 扩容。

2. 应用案例

  • Zcash:隐私加密货币,用 Groth16 证明交易有效不暴露地址/金额。
  • zk-Rollup:以太坊扩容——链下批量交易,链上验证 ZKP,扩容 100x。
  • 隐私身份:Polygon ID、zkPass——证明属性不暴露身份。
  • 合规证明:证明交易符合 KYC/AML 不暴露交易。
  • 游戏:Dark Forest——zk RTS 游戏,证明移动合法不暴露位置。

3. 部署要点

  • 选方案:链上验证贵用 SNARK,抗量子/无信任用 STARK。
  • 电路优化:减少约束、批处理、递归证明(证明的证明)。
  • 可信设置:用通用设置(PLONK)减少仪式。
  • 证明生成加速:用 GPU/专用硬件(如 Ingonyama、Ulvetanna)。
  • 电路审计:ZKP 电路 bug 难发现,要专业审计。

八、ZKP 在 PETs 中的定位

1. 验证场景:ZKP 适合"证明而不展示"——身份、合规、权限验证。

2. 区块链核心:ZKP 是隐私区块链(Zcash)和扩容(zk-Rollup)的核心技术。

3. 和 HE/MPC 互补:HE/MPC 保护计算,ZKP 验证计算正确——MPC 可用 ZKP 证恶意安全,HE 可用 ZKP 验证计算正确。

4. 不是银弹:ZKP 证明生成慢、电路编写难、可信设置负担——适合验证而非计算场景。

⚠️ 常见误读:以为"ZKP 是加密"。ZKP 不加密——它证明"知道"而不展示"是什么"。验证者学到"存在",不学内容。

💡 关键直觉:ZKP 证明者让验证者相信"知道见证"不泄露见证,三性质完备/正确/零知识。交互式(Schnorr Σ-协议)→非交互(Fiat-Shamir)→现代 zk-SNARK(简洁非交互,Groth16/PLONK,可信设置)和 zk-STARK(透明抗量子,证明大)。流程是电路编写→设置→证明→验证。证明生成慢、电路编写难、可信设置负担。应用在 Zcash/zk-Rollup/隐私身份/合规证明。是验证场景和区块链核心,和 HE/MPC 互补,不是银弹。

核心回顾

  • ZKP 核心:证明者让验证者相信"知道见证 w 使 R(x,w) 成立"不泄露 w,完备/正确/零知识三性质。
  • 应用:身份认证、隐私交易(Zcash)、合规证明、区块链扩容(zk-Rollup)、凭证验证。
  • 原理:交互协议(Schnorr,承诺/挑战/响应)+零知识(验证者可模拟)。
  • 非交互:Fiat-Shamir 启发式,挑战用哈希,一次发证明。
  • zk-SNARK:简洁(证明几百字节,验证 ms)、非交互、知识证明。Groth16(最小,每电路可信设置)、PLONK(通用设置)、Marlin。
  • 可信设置:生成密钥产生有毒废料,持有者能伪造证明,仪式多方参与解决。
  • zk-STARK:透明(无设置,公开随机)、抗量子(哈希)、扩展(证明大几十 KB-MB)。
  • 流程:电路编写(Circom/Noir/Leo/Cairo)→设置→证明生成(慢)→验证(快)。
  • 性能:证明生成慢(ms-分钟)、证明大小(SNARK 小/STARK 大)、验证快、电路编写门槛高。
  • 框架:Circom+SnarkJS、Noir、Leo、Cairo、zkSync/ZkEVM。
  • 案例:Zcash、zk-Rollup、Polygon ID、Dark Forest。
  • 定位:验证场景、区块链核心、和 HE/MPC 互补、不是银弹。

作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U