Phase 88 — 零知识证明引擎设计
版本: v4.2.0 创建日期: 2026-03-10 状态: ✅ 已实现 (v4.2.0)
一、模块概述
Phase 88 实现零知识证明(ZKP)引擎,支持电路编译、Groth16证明生成与验证、身份证明及选择性披露。用户可在不暴露隐私数据的前提下,向第三方证明特定属性(如年龄、资质、资产范围),为去中心化身份和隐私交易提供密码学基础。
1.1 核心目标
- 电路编译: 将高层约束描述编译为算术电路(R1CS),支持自定义电路模板
- Groth16证明: 基于Groth16方案的零知识证明生成与验证,亚秒级证明生成
- 身份证明: 结合DID体系,生成可验证的身份属性证明
- 选择性披露: 用户可选择性披露部分属性,最小化信息暴露
1.2 技术架构
┌──────────────────────────────────────────────────────┐
│ ZKP Engine (Phase 88) │
│ │
│ ┌─────────────────────┐ ┌────────────────────────┐ │
│ │ CircuitCompiler │ │ ProofEngine │ │
│ │ R1CS电路编译 │ │ Groth16生成/验证 │ │
│ │ 模板管理+优化 │ │ 批量验证+缓存 │ │
│ └─────────────────────┘ └────────────────────────┘ │
│ ┌─────────────────────┐ ┌────────────────────────┐ │
│ │ IdentityProver │ │ SelectiveDisclosure │ │
│ │ DID属性证明 │ │ 属性选择+Merkle树 │ │
│ │ 凭证绑定 │ │ 最小披露策略 │ │
│ └─────────────────────┘ └────────────────────────┘ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ ZKP IPC Layer (6 handlers) │ │
│ └──────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────┘二、核心模块设计
2.1 ZKPEngine (crypto/zkp-engine.js)
零知识证明核心引擎。
常量:
PROOF_SCHEME: GROTH16, PLONK, BULLETPROOFSCIRCUIT_STATUS: DRAFT, COMPILED, VERIFIED, FAILED
核心方法:
initialize()— 初始化引擎,加载已编译电路和信任设置compileCircuit({ name, constraints, inputs, outputs })— 编译算术电路(R1CS格式),返回电路ID和约束数generateProof({ circuitId, witness, scheme })— 基于witness生成Groth16零知识证明verifyProof({ circuitId, proof, publicInputs })— 验证零知识证明有效性createIdentityProof({ did, attributes, circuitId })— 为DID身份创建属性证明(如年龄>18)selectiveDisclose({ credentialId, disclosedFields, recipientDid })— 选择性披露凭证中的部分字段getStats()— 获取引擎统计(电路数、证明数、验证成功率、平均证明时间)buildZKPContext()— 构建ZKP上下文(Context Engineering注入)
三、核心文件
| 文件路径 | 说明 |
|---|---|
src/main/crypto/zkp-engine.js | ZKP核心引擎(电路编译、证明生成/验证、身份证明、选择性披露) |
src/main/crypto/zkp-ipc.js | IPC接口层(6个handler) |
src/renderer/stores/zkpEngine.ts | Pinia Store — 电路列表、证明记录、统计 |
src/renderer/pages/ZKPEnginePage.vue | 前端页面 — 电路管理/证明生成/验证/统计 |
四、数据库设计
sql
-- Phase 88: ZKP Circuits
CREATE TABLE IF NOT EXISTS zkp_circuits (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
constraints TEXT,
input_schema TEXT,
output_schema TEXT,
r1cs_data BLOB,
status TEXT DEFAULT 'draft',
constraint_count INTEGER DEFAULT 0,
proving_key_hash TEXT,
verification_key_hash TEXT,
created_at INTEGER,
updated_at INTEGER
);
-- Phase 88: ZKP Proofs
CREATE TABLE IF NOT EXISTS zkp_proofs (
id TEXT PRIMARY KEY,
circuit_id TEXT NOT NULL,
scheme TEXT DEFAULT 'groth16',
proof_data BLOB,
public_inputs TEXT,
prover_did TEXT,
verifier_did TEXT,
verified INTEGER DEFAULT 0,
verification_time_ms REAL,
generation_time_ms REAL,
created_at INTEGER,
FOREIGN KEY (circuit_id) REFERENCES zkp_circuits(id)
);五、IPC接口设计
ZKP IPC (6 handlers)
| 通道 | 说明 |
|---|---|
zkp:compile-circuit | 编译算术电路 |
zkp:generate-proof | 生成零知识证明 |
zkp:verify-proof | 验证零知识证明 |
zkp:create-identity-proof | 创建DID身份证明 |
zkp:selective-disclose | 选择性披露属性 |
zkp:get-stats | 获取引擎统计信息 |
六、前端集成
Pinia Store
zkpEngine.ts— 电路列表、证明记录、验证状态、统计数据
Vue Page
ZKPEnginePage.vue— 电路编译/证明生成/验证/身份证明/选择性披露/统计面板
Route
/zkp-engine— 零知识证明引擎
七、配置选项
javascript
zkpEngine: {
enabled: false,
defaultScheme: 'groth16',
maxCircuitConstraints: 100000,
proofCacheTTLMs: 3600000,
trustedSetupPath: null,
batchVerificationEnabled: true,
},八、测试覆盖
- 测试文件:
src/main/crypto/__tests__/zkp-engine.test.js - 测试数量: 19 tests
- 覆盖范围:
- 电路编译(正常/异常约束/模板复用)
- Groth16证明生成(有效witness/无效witness/超时处理)
- 证明验证(有效证明/篡改证明/过期证明)
- 身份证明(DID属性绑定/多属性证明)
- 选择性披露(单字段/多字段/空字段校验)
- 统计信息(电路计数/验证成功率/平均时间)
九、Context Engineering
- step 5.1:
setZKPContext()— 注入零知识证明上下文
