Skip to content

Phase 88 — 零知识证明引擎设计

版本: v4.2.0 创建日期: 2026-03-10 状态: ✅ 已实现 (v4.2.0)


一、模块概述

Phase 88 实现零知识证明(ZKP)引擎,支持电路编译、Groth16证明生成与验证、身份证明及选择性披露。用户可在不暴露隐私数据的前提下,向第三方证明特定属性(如年龄、资质、资产范围),为去中心化身份和隐私交易提供密码学基础。

1.1 核心目标

  1. 电路编译: 将高层约束描述编译为算术电路(R1CS),支持自定义电路模板
  2. Groth16证明: 基于Groth16方案的零知识证明生成与验证,亚秒级证明生成
  3. 身份证明: 结合DID体系,生成可验证的身份属性证明
  4. 选择性披露: 用户可选择性披露部分属性,最小化信息暴露

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, BULLETPROOFS
  • CIRCUIT_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.jsZKP核心引擎(电路编译、证明生成/验证、身份证明、选择性披露)
src/main/crypto/zkp-ipc.jsIPC接口层(6个handler)
src/renderer/stores/zkpEngine.tsPinia 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() — 注入零知识证明上下文

基于 MIT 许可发布