Starknet 隐私池审计发现中等风险:系统停滞与审计盲区
OpenZeppelin 完成了对 Starknet 隐私池(提交 c5e2fb5)的审计,该协议基于 UTXO 模型,为 Starknet 的 STRK20 标准提供隐私功能。系统通过通道、票据和零知识证明实现私密代币转移。共发现 11 个问题,包括 2 个中等和 5 个低严重性问题,两个中等问题已在审计后修复。 第一个中等问题是无效审计员公钥:合约仅检查公钥非零,但未验证其是否为有效曲线点。若存储无效公钥,所有依赖 ECDH 加密的操作(如用户注册和提款)将回滚,导致协议瘫痪,直到治理介入修复。第二个中等问题出现在审计员密钥轮换时:先前加密的数据仍由旧密钥保护,新审计员无法解密轮换前创建的通道数据,造成持续性审计盲区。 低严重性问题包括:签名验证发生在昂贵的编译操作之后、与收取手续费的代币不兼容、无效公钥触发通用 panic 而非明确错误、pack 函数缺少 120 位约束、以及 ECDH 加密中临时密钥重复使用可能破坏通道隐私。报告还强调了信任假设:用户依赖链下证明服务、治理可无延迟升级、隐私依赖于客户端的随机数生成。审计特别指出 __execute__ 绝不应在链上调用,因为私钥会出现在 calldata 中。总体而言,虽未发现严重或高危问题,但中等发现揭示了关键的运行连续性和审计可见性风险,已在部署前修复。
关键事实
- 中等:无效的审计员公钥导致注册和提款失败;已在 PR #720 修复。
- 中等:审计员密钥轮换后无法解密旧通道数据;已在 PR #703 修复。
- 低:签名验证发生在昂贵编译操作之后。
- 低:收取手续费或变基代币破坏名义代币记账。
- 低:ECDH 加密中临时密钥重复使用破坏通道隐私。