Circomspect:零知识证明电路的安全审计利器

Trail of Bits开源Circomspect静态分析工具,可检测Circom语言编写的零知识证明电路中的安全漏洞,曾成功识别Tornado.cash混币器关键漏洞,帮助开发者构建更安全的ZK应用。

Circom的价值验证

2019年10月,安全研究人员在以太坊隐私混币器Tornado.cash中发现致命漏洞。该系统采用零知识证明(ZKP)技术实现资金匿名存取,但因ZKP电路缺陷,攻击者可伪造存款证明任意提取资金。开发团队通过紧急转移资金并修改两个字符(将=替换为<==)完成修复。

Circom工作原理

作为领域专用语言(DSL),Circom通过以下方式构建ZKP系统:

  1. 约束定义:开发者描述计算过程及输入输出信号约束
  2. 编译器生成:自动创建证明者(Prover)和验证者(Verifier)
  3. 双重验证机制
    • <--操作符仅执行赋值
    • ===操作符添加验证约束
    • <==合并上述功能(关键安全特性)

Tornado.cash漏洞解析

漏洞根源在于MIMC哈希函数实现时错误使用赋值操作符=(等效于<--),导致验证阶段未约束输出信号。Circomspect可检测此类"未约束信号"问题,其分析流程包括:

  • 抽象语法树转换
  • 静态单赋值形式转换
  • 数据流分析

Circomspect核心功能

  1. 检测能力

    • 未约束信号
    • 未使用变量
    • 变量声明遮蔽
    • 可疑赋值操作(自动建议<==替换)
  2. 实战案例: 分析circom-pairing库时发现:

    1
    2
    3
    4
    
    function find_Fp_inverse() {
        // 检测到冗余计算链:y→newv→v→y
        // 这些变量不影响最终输出
    }
    

ZKP工具链进化

Trail of Bits持续完善ZKP安全工具矩阵:

  • Amarna:Cairo语言静态分析器
  • Circomspect:支持以下安装方式:
    1
    2
    
    cargo install circomspect
    # 或从GitHub仓库获取
    

特别提示:所有ZKP开发者都应警惕验证约束缺失问题,这是智能合约审计中最常见的高危漏洞类型。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计