6.1 Zero-Knowledge Proofs for KYC (zk-KYC)

zk-KYC 允许用户向协议证明:“我是合法的、非受制裁的真人用户”,而无需透露“我是谁”。

6.1.1 Circuit Design for Identity Verification

我们的 ZK 电路(基于 Circom 或 Halo2 编写)旨在证明一个特定的算术陈述。

1. 凭证发行 (Credential Issuance - Off-chain)

首先,用户在本地设备向受信任的第三方发行商(Issuer,如 Synaps 或 Binance)出示实体证件。发行商验证通过后,对用户的去中心化标识符 (DID) 进行数字签名,生成凭证 $C$。

C=SignIssuer(DIDuser,Attributes)C = \text{Sign}_{Issuer}(DID_{user}, \text{Attributes})

2. 电路逻辑 (The Circuit Statement)

当用户想要与 OmniPact 交互(例如充值大额资金)时,必须生成一个 Proof $\pi$。

零知识电路 $C_{kyc}$ 包含以下约束:

  • 输入 (Inputs):

    • Private Inputs (私有输入): 用户的私钥 ,凭证 ,凭证的 Merkle Path。

    • Public Inputs (公共输入): 发行商公钥 ,合规列表的 Merkle Root ,制裁名单的 Merkle Root

  • 逻辑约束 (Constraints):

    1. 签名验证: 证明 $C$ 确实是由 $PK_{Issuer}$ 签发的有效凭证。

      $$\text{VerifySig}(PK_{Issuer}, C) == \text{true}$$

    2. 所有权证明: 证明用户拥有与凭证 绑定的私钥

    3. 成员资格证明 (Membership): 证明该凭证存在于有效用户树 中。

    4. 非成员资格证明 (Non-Membership): 证明该用户不在 OFAC 制裁名单树 中。

    5. 属性断言: (可选)证明 Attributes.Age >= 18Attributes.Country != "North Korea",但不暴露具体数值。

3. 输出 (Output)

电路输出证明 $\pi$。智能合约验证 $\text{Verify}(\pi, PublicInputs)$。若为真,则允许交易。整个过程链上不存储任何用户姓名或证件号。

6.1.2 Nullifier Implementation for Anonymity

在保护隐私的同时,我们必须防止 “双花身份” (Identity Double-Spending),即同一个合规用户在被封禁后,换个马甲重新进入,或者同一个用户领取多次“新人奖励”。为此,我们引入了 Nullifier (无效符) 机制。

1. 确定性且不可逆的标识符

Nullifier 是一个哈希值,它对于同一个用户在同一个 Scope(作用域)下是唯一的,但无法逆向推导出用户身份。

Nullifier 计算公式:

Nullifier=PoseidonHash(skuser,Scope,Salt)Nullifier = \text{PoseidonHash}(sk_{user}, \text{Scope}, \text{Salt})
  • : 用户的秘密私钥(这也是 ZK 电路的私有输入)。

  • Scope: 作用域参数。

    • 如果是 全局封禁列表,Scope 为 PROTOCOL_ID

    • 如果是 单次投票活动,Scope 为 ELECTION_ID

  • PoseidonHash: 一种对 ZK 电路友好的哈希算法。

2. 运作机制 (Mechanism)

  1. 生成: 每次用户提交 zk-KYC 证明时,电路会作为副产品计算出 并作为 Public Output 公开。

  2. 记录: 智能合约维护一个 mapping(bytes32 => bool) usedNullifiers

  3. 防重放:

    • 如果目的是“每人限领一次”,合约检查 usedNullifiers[Nullifier] 是否为 true。若是,则拒绝。

    • 如果目的是“黑名单追踪”,当某个 Nullifier 被 OmniPact 治理委员会标记为恶意(Malicious)时,该 Nullifier 将被永久加入 Blacklist

  4. 匿名性: 由于 只有用户自己知道,外部观察者看到的是一串随机乱码。即便用户在不同的 DApp 中使用 OmniPact 协议,只要 Scope 不同,生成的 Nullifier 也完全不同,从而防止了跨应用的关联性攻击 (Linkability Attack)。


本节展示了 OmniPact 如何利用密码学前沿技术(Poseidon Hash, Merkle Proofs),在“绝对隐私”和“监管合规”这两个看似对立的需求之间,找到了完美的数学平衡点。