
阿努比斯
阅读时间:8分钟
密码学基础
Anubis 的安全性建立在成熟的现代密码学原语之上。本章将深入探讨支撑 Anubis 隐私功能的核心算法。
4.1 零知识证明系统:PLONK
Anubis 选择 PLONK 作为其核心证明系统而不是 Groth16 或 STARKs,是基于一系列经过深思熟虑的权衡。
4.1.1 为什么选择 PLONK?
- 通用信任设置:尽管 Groth16 算法拥有极小的证明和快速验证的优势,但其致命缺陷在于每个电路都需要单独的信任设置。对于支持任意智能合约的 Anubis 而言,这意味着每次开发者部署新合约时都需要进行全网仪式,这在工程实践中是不切实际的。PLONK 支持通用参考字符串 (SRS),只需一次全网仪式(Tau 的永恒幂)即可支持任何电路逻辑。该仪式由以太坊社区主导,超过 10 万名参与者贡献随机数。只要有一位参与者诚实地销毁其随机数,该设置就是安全的。因此,只要仪式中至少有一位参与者诚实,系统就是安全的。
- 性能平衡方面,与STARK(其证明大小大、验证成本高)相比,PLONK具有恒定的证明大小(约400字节)和较低的验证gas成本,使其非常适合链上环境。
- PLONK 的可定制门支持自定义约束门。Anubis 利用此功能设计了一个专用于 Pedersen 哈希和椭圆曲线加法的“Turbo PLONK”门,将证明生成速度提高了 3-5 倍。

图 3-3 Anubis PLONK 核心验证系统工作流程示意图
4.1.2 电路设计和算术运算
Anubis 将交易逻辑转换为算术电路。以转账电路为例:
公众意见
- merkle_root:当前 Note 树的根哈希值。
- nullifier_old:要消耗的 Note 的空终止符。
- commitment_new:新生成的票据的承诺。
- contract_address:用于交互的合约(例如 DEX)。
- asset_type:资产类型。
- 金额:交易金额。
证人/私人意见
- note_old:旧票据的完整信息(金额、随机数)。
- merkle_path:树中旧 Note 的 Merkle 路径。
- spend_key:用户的私钥。
- recipient_pubkey:收件人的公钥。
- 随机性:新承诺的随机化因子。
约束条件
- 存在性证明:验证将 merkle_path 添加到 note_old 可以计算 merkle_root。
- 所有权证明 验证 note_old 的公钥是否可以从 spend_key 推导出来。
- 无效化符一致性验证 nullifier_hash = Hash(note_old, spend_key)。
- 承诺完整性验证 commitment_new = Pedersen(note_new)。
- 价值保护验证

- 机制:在构建交易时,发送方计算共享密钥 $S$ 的哈希值,并提取其第一个字节(1 字节)作为 view_tag,并将其附加到交易元数据中。
- 效果:接收方只需比对区块链上的 view_tag 即可。由于该标签仅为 1 字节(256 种可能性),因此只有大约 1/256 的交易能够成功匹配。这意味着在执行代价高昂的椭圆曲线乘法运算之前,99.6% 的无关交易已被过滤掉。
- 隐私性:由于 view_tag 是一个截断的哈希值,因此会引入歧义,防止观察者仅凭标签就逆向工程出接收者的身份。
- 机制:用户客户端生成一个包含其隐私特征的加密查询结构(类似于隐私保护的布隆过滤器或基于 FHE 的线索检测器),并将其提交给完整节点。
- 处理过程:完整节点在候选交易集上执行同态操作或盲匹配,而不解密用户的查询条件或了解交易的所有权。
- 结果:节点返回一个非常小的“潜在相关”交易子集。在此过程中,节点无法确定哪些交易真正属于用户,从而可以抵御元数据分析攻击。
- 机制:客户端不需要同步完整的节点数据,而是采用了类似于以太坊轻客户端的模型。
- 仅同步:区块头并从完整节点请求特定交易的默克尔证明。
- 验证:客户端使用其本地私钥对这些过滤后的交易执行完整的 ECDH 解密和零知识证明验证,以确保资金所有权。
- 消费键(
最高级别的权力,可以支配资金,但绝不与他人分享。 - 完整视图图例(
它可以解密所有历史交易详情(金额、发送人、备注),这些详情通常会提供给合规审计人员。 - 收款查看键:此功能仅允许您查看付款记录,适合商家进行账户核对。
- 外发视图键:此功能仅允许查看费用记录,适用于企业费用管理。
这些约束被打包成一个简洁的证明 $\pi$,并使用 KZG 承诺方案进行验证。
4.2 Pedersen承诺和同态加密
佩德森的承诺是掩盖交易金额的关键。
公式:
,
就是金额,
这是一个随机盲法因素。
和
是椭圆曲线上的生成元。
,
就是金额,



。

2.发送方生成临时私钥




。
汇款人将资产转移到该地址







