SP1安全审计全解析:Veridise、Cantina和KALOS三大机构验证报告深度解读

【免费下载链接】sp1 【免费下载链接】sp1 项目地址: https://gitcode.com/gh_mirrors/sp/sp1

SP1作为目前最快、功能最完整的zkVM(零知识虚拟机)之一,其安全性备受关注。本文将深度解读Veridise、Cantina和KALOS三大专业安全机构对SP1项目的审计报告,带您全面了解项目的安全状况、关键漏洞及修复方案,为开发者和用户提供权威的安全参考。

SP1 zkVM安全审计
SP1作为高性能zkVM,其安全审计涵盖了从核心电路到递归验证的全栈安全检查

一、审计概览:三大机构的专业验证

SP1项目在开发过程中始终将安全性放在首位,先后邀请了Veridise、Cantina和KALOS三家知名安全审计机构进行全面评估。这些审计覆盖了项目的核心模块、递归虚拟机、密码学实现等关键领域,确保zkVM的安全性和可靠性。

1.1 审计范围与时间线

  • KALOS审计:针对Recursion VM模块,审计周期为2024/04/15 - 2024/05/31(6工程师周),涉及核心电路约束、内存模型和指令集验证。审计对象包括recursion/core/src目录下的CPU、内存、Poseidon2哈希等关键组件。

  • V4版本专项审计:由rkm0959完成,审计周期为2024年11月25日至12月13日(3工程师周),重点验证v4.0.0版本的安全修复,包括全局交互系统、验证密钥(VK)哈希完整性等关键模块。

1.2 风险等级定义

审计报告将漏洞按严重程度分为Critical(严重)、High(高风险)、Medium(中风险)、Low(低风险) 和Informational(信息性)五个等级,其中Critical和High级别的漏洞会直接影响系统安全性,需优先修复。

二、KALOS审计:Recursion VM核心漏洞解析

KALOS审计团队在Recursion VM中发现了多个影响系统安全性的关键漏洞,涉及内存模型、指令约束和哈希实现等核心领域。

2.1 [Critical] Poseidon2哈希电路的双重漏洞

漏洞描述
Poseidon2Chip实现中存在两处严重安全缺陷:

  1. 内存写任意地址dst_input在24轮哈希计算周期中未被约束为常量,攻击者可通过篡改地址将哈希结果写入任意内存位置。
  2. 哈希计算欠约束is_external_layer的范围计算错误(正确范围应为[2, rounds_p_beginning)[rounds_p_end, 2 + rounds_p + rounds_f)),导致哈希函数的soundness被破坏。

修复方案

  • 约束clk, dst_input, left_input, right_input在24轮周期中保持不变,确保内存写入地址固定。
  • 修正is_external_layer的计算逻辑,并通过PR #747和PR #821实现完整修复。

2.2 [High] 内存初始化重复问题

漏洞描述
MemoryGlobalChip允许对同一内存地址进行多次初始化,导致内存状态不一致。例如,攻击者可对同一地址初始化两个不同值,后续读取时可能获取错误的历史数据,破坏内存论证的完整性。

修复方案
通过PR #934添加地址唯一性约束,确保每个内存地址仅能初始化一次,并限制MemoryGlobalChip为单例模式。

2.3 [Critical] LOAD指令寄存器约束缺失

漏洞描述
LOAD指令仅约束内存值在读取后不变,但未验证寄存器值是否与内存值一致,攻击者可构造任意寄存器值,绕过内存数据依赖。

修复代码

// 修复前
builder.when(local.selectors.is_load).assert_block_eq(
    *memory_cols.memory.prev_value(),
    *memory_cols.memory.value(),
);

// 修复后(添加寄存器与内存值的约束)
builder.when(local.selectors.is_load).assert_block_eq(
    *local.a.value(), 
    *memory_cols.memory.value()
);

三、V4版本审计:关键安全增强

SP1 v4.0.0版本针对前期审计发现的问题进行了系统性修复,同时引入新的安全机制。

3.1 [High] 全局交互哈希碰撞风险

漏洞描述
全局交互系统未将InteractionKind(内存/系统调用)纳入哈希计算,导致不同类型的交互可能产生相同的摘要,攻击者可通过伪造交互类型绕过验证。

修复方案
在全局交互消息中加入kind字段,并将其作为哈希输入,确保内存和系统调用交互的唯一性:

// 全局交互消息结构(新增kind字段)
vec![
    local.message[0].into(),
    ...,
    local.kind.into(), // 区分内存/系统调用类型
]

3.2 [High] 验证密钥(VK)哈希完整性问题

漏洞描述
VK哈希未包含initial_global_cumulative_sum(初始全局累积和),导致攻击者可篡改预计算的全局交互状态,影响证明验证的正确性。

修复方案
initial_global_cumulative_sum纳入VK哈希计算,确保预计算状态不可篡改:

// VK哈希输入(新增初始全局累积和)
inputs.extend(self.initial_global_cumulative_sum.0.x.0);
inputs.extend(self.initial_global_cumulative_sum.0.y.0);

四、审计结论与最佳实践

4.1 漏洞修复状态

截至最新版本,KALOS和V4审计中发现的所有Critical和High级别漏洞均已修复,主要通过以下PR实现:

  • PR #747:修复Poseidon2哈希电路
  • PR #934:修复内存初始化漏洞
  • PR #946:完善FriFoldChip约束

4.2 开发者安全建议

  1. 使用官方验证工具链:通过crates/cli/src/commands/install_toolchain.rs安装经过审计的工具链,避免自定义编译带来的风险。
  2. 关注安全公告:定期查看项目根目录下的SECURITY.MD文件,及时了解最新安全更新。
  3. 验证证明完整性:在部署基于SP1的应用时,通过verifier/src/groth16/verify.rs模块验证证明的有效性。

SP1项目通过严格的第三方审计和持续的安全迭代,已建立起较为完善的安全防护体系。开发者可放心基于SP1构建高性能zk应用,同时需关注后续审计更新,确保应用安全。

【免费下载链接】sp1 【免费下载链接】sp1 项目地址: https://gitcode.com/gh_mirrors/sp/sp1

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐