本次测试涉及几款主流的开源 zkVM(零知识虚拟机),它们在性能和安全性方面表现各异。以下是各zkVM的简要介绍:
SP1:作为一款高性能的开源 zkVM,SP1 能够验证任意 Rust(或任何 LLVM 编译语言)程序的执行。其利用 Plonky3 支持递归证明,并且兼容多种加密算法,尤其是基于 ECC 的算法,如 Groth16。
RISC0:基于 RISC-V 架构的 zkVM,能够证明任意 Rust 代码的正确性,提供98位的安全级别,采用 STARK 技术。其与 LLVM 和 WASM 兼容,支持 C 和 Rust 等多种编程语言。
Nexus:这款模块化、可扩展的 zkVM 采用 Rust 编写,具有高度并行性和优化的验证者架构。Nexus 强调性能和安全性,采用 Nova 折叠方案,特别适合递归证明,同时还支持 C++。
ZkMIPS:基于 Plonky2 和 MIPS 微架构的可验证计算基础设施,旨在推动以太坊作为全球结算层,能够运行任意 Rust 代码。它是此列表中唯一使用 MIPS 操作码集的 zkVM。
ZkWASM:遵循并支持标准的未修改WASM字节码规范,允许 Rust 代码编译为 WASM 字节码,因此理论上能够在 zkWASM 机器上运行任何 Rust 代码,具备广泛的语言支持。
Valida:基于 STARK 的虚拟机,采用 RISC 启发的指令集,旨在简化传统编程语言的目标。正在开发后端编译器,将 LLVM IR 编译为 Valida ISA,以验证用 Rust、Go、C++ 等语言编写的程序。
测试项目及方法
第一阶段:算术运算(Hept 100)
该阶段测试 zkVM 在处理基本算术运算(如加法、减法、乘法等)方面的能力。我们设计了以七边形数为基础的测试,以评估 zkVM 同时处理多个运算的能力。
第二阶段:内存消耗(Vec 10000)
在此阶段,我们评估各 zkVM 在重负载情况下的内存管理能力,以识别内存瓶颈。测试涉及多种数据结构,包括列表、哈希映射和双端队列等。每个 zkVM 需接受以下操作的测试:
测试环境配置
测试结果概览
算术运算(Hept 100)结果:
内存消耗(Vec10000)结果:
经过对各 zkVM 的测试与分析,RISC0 被评为首选,它在证明生成时间、大小以及内存占用方面表现出色。RISC0 强大的零知识证明能力和对多种编程语言的支持,使其在隐私、性能和灵活性方面均有良好表现。
Valida 在证明生成速度和大小方面也表现不俗,证明大小为 280 KB,生成时间小于1秒。然而,由于 Valida 对 Rust 的支持有限,其在复杂内存交互测试中存在困难,目前不建议与 Rust 代码一起使用。
SP1 尽管在算术运算中表现优异,但由于缺乏必要的 ZK 功能,其实际应用价值受限。
Nexus 显示了稳定的证明大小和可管理的内存使用情况,但在内存密集型任务中的表现不佳,导致其失去成为顶级竞争者的资格。
zkMIPS 提供了可靠的证明时间,但其内存问题严重影响了整体性能。
zkWASM 在证明大小和生成时间上表现最差,虽然支持 WASM 字节码,但其高达57 GB的内存消耗不可接受。