┌──────────────┐
│ 程序逻辑 │
└──────┬───────┘
│
▼
┌──────────────┐
│ 电路构建 │───► R1CS/QAP:线性约束系统,Circom电路编译后的序列化表示
└──────┬───────┘
│
┌──────▼───────┐
│ 可信设置 │─────► Proving Key (PK)
│ (Trusted Setup)│────► Verification Key (VK)
└──────┬────────┘
│
▼
┌────────────────────┐
│ Witness 生成 │
│ (电路 + 公共/私有输入)│
└─────────┬──────────┘
│
▼
┌────────────────────┐
│ 证明生成 Proof │
│ (Witness + PK) │
└─────────┬──────────┘
│
▼
┌────────────────────┐
│ 验证 Verify │
│ (Proof + Public + VK)│
└─────────┬──────────┘
│
▼
True / False
程序逻辑(Program Logic)
- 做什么:这是你想证明的业务逻辑或计算,比如“我知道一个数的平方等于 25”。
- 抽象理解:写下规则和条件,是整个零知识证明要“证明我遵守规则”的蓝图。
电路构建(Circuit Construction)
- 做什么:把程序逻辑转成电路(Circom 电路),每个操作(加法、乘法、条件判断)变成电路门。
- 抽象理解:把逻辑变成“电路布线图”,方便机器处理。
- 输出:R1CS/QAP(线性约束系统),序列化表示电路逻辑,作为后续证明生成的基础。
可信设置(Trusted Setup)
- 做什么:生成证明和验证所需的密钥材料。
- 随机数(毒废料)生成 PK/VK
- PK 用于生成 proof
- VK 用于验证 proof
- PK = 用秘密数生成的曲线点全套
- VK = PK 的压缩版,只保留验证所需
- 抽象理解:一次性生成的“魔法钥匙模板”,保证 proof 既有效又零知识。
- 安全点:毒废料必须保密,否则可以伪造 proof。
Witness 生成(Witness Generation)