本文是 RISC Zero 的高级协议工程师 Rami Khalil 参加的炉边访谈的总结,讨论了使用 RISC Zero zkVM 构建应用程序的设计空间,包括 zkVM 的原理、开发者体验、安全性保证、去中心化证明网络 Boundless,以及 zkVM 如何赋能新的应用场景,还分享了开发者的建议和 Veridise 的安全审计经验,和RISC Zero的未来发展方向。

在这次炉边谈话中,我们邀请了 RISC Zero 的高级协议工程师 Rami Khalil,讨论使用 RISC Zero zkVM 构建应用程序的设计空间。
Rami 探讨了由于 zkVM 的出现而成为可能的应用程序类型,解决了关键的安全和隐私相关问题,并解释了去中心化证明如何与 RISC Zero 的 Boundless 协同工作。他还分享了有关开发人员构建基于 zkVM 的应用程序的建议。
最后,Jon 分享了 Veridise 在审计 zkVM 应用程序方面的经验教训,以及 Rami 展望了 RISC Zero 的未来。
请参阅下面的完整时间戳和文本摘要。
对话重点
以下是涵盖主题的细分:
- 00:17 — 什么是 zkVM,特别是 RISC Zero 的 zkVM?
- 03:04 — 开发体验如何,以及有什么好处?
- 06:01 — zkVM 提供了哪些保证,开发人员无需担心?
- 08:04 — 你说的“underconstrained input(未充分约束的输入)”是什么意思?
- 10:24 — 你能用 RISC Zero 构建隐私应用程序吗?
- 11:11 — 在使用证明网络时,你能够保持隐私吗?
- 13:08 — 由于 zkVM 的出现,现在有哪些新的应用程序成为可能?
- 17:22 — Boundless 证明网络是为谁设计的,以及去中心化证明将如何工作?
- 20:42 — 集成 RISC Zero 如何影响协议的安全性?
- 24:17 — 你如何确保 zkVM 的安全?
- 26:03 — 你们是否使用了最好的密码学、约束和证明系统?
- 29:18 — 你可以根据你拥有的机器数量来利用并行性吗?
- 30:17 — 你希望看到使用 RISC Zero 构建什么?
- 30:47 — 在 zkVM 内部使用 FHE 的价值是什么?
- 32:28 — 对于构建基于 zkVM 的应用程序的开发人员,你有什么建议?
- 33:12 — 在什么情况下,ZK 证明不会使应用程序受益?
- 34:45 — Jon 给开发人员的安全提示
- 40:02 — 有人分享过 Steel 的有趣用例吗?
- 46:37 — 除了 Boundless,RISC Zero 还在构建什么?
- 49:17 — 除了 Keccak 之外,还有什么即将推出的应用程序?
炉边谈话摘要
以下是炉边谈话内容的文本摘要。对话涵盖了 zkVM 的基本概念、RISC Zero 技术的具体细节、应用程序开发、安全注意事项和未来发展。
什么是 zkVM?
Rami 解释说,zkVM 本质上是零知识证明的实践实现。他将零知识证明比作签名的泛化。在签名中,私钥生成消息上的签名,公钥可以验证该签名。利用零知识证明,“私有部分”可以是任何输入,“签名算法”可以是任何程序,“签名”是零知识证明以及程序的输出。此证明提供了信心,即只有具有正确输入的人才能使用该程序生成该特定输出。
开发者体验和好处
Rami 强调说,RISC Zero zkVM 是第一个通用 zkVM。一个关键的创新是支持编译为标准 RISC-V 指令集架构的任何程序。这为开发人员提供了一个巨大的解锁,因为它允许他们使用大多数常规编程语言(主要是 Rust)编写程序,而无需学习像 Circom 这样的领域特定语言 (DSL)。
使用 C++ 中的手写 R1CS 电路构建和调试可能需要数月的任务,现在可以使用 RISC Zero zkVM 在一个周末内实现。
这种方法支持熟悉的编程模式,如 循环和条件,这些模式在虚拟机中自然执行。应用程序格式很直观,除了传统的 Rust 开发之外,几乎不需要额外的知识。大多数 Rust crates 都可以直接使用,前提是它们不依赖于像硬编码汇编或与 RISC-V 不兼容的系统特定调用之类的功能。这大大降低了准入门槛,并加速了 ZK 应用程序的开发。
zkVM 应用程序和 zkVM 的安全性
虽然 RISC Zero zkVM 本身提供了一个关键的 ZK 保证,这意味着验证者不会了解程序的执行跟踪,但开发人员仍然有责任设计安全的应用程序。Rami 讨论了潜在的陷阱,强调了两个主要领域:
- Under-constrained inputs(未充分约束的输入)/ 缺少验证: 当程序接受来自不受信任来源的输入而没有适当的验证时,就会发生这种情况。程序可能会对输入做出假设,如果恶意方提供伪造或未经身份验证的输入,则生成的证明无法保证开发人员想要的内容。例如,在使用
revm
crate 的简单 zkEVM 实现中,如果存储值未经身份验证(例如,通过针对状态 trie 的 Merkle 包含证明),则攻击者可以证明针对伪造状态的执行。为防止这种情况,必须在 zkVM 中验证关键输入数据,或者使其成为公共输出的一部分,以便验证者可以评估其正确性。
- 隐私泄露: 虽然 zkVM 提供了对执行跟踪的 ZK 保证,但如果不仔细设计,程序的 输出 仍然可能泄露私人信息。对于需要使用私有输入来保护隐私的应用程序,证明生成最好由受信任方(例如用户自己的机器)完成。虽然存在像 Boundless 或 Bonsai 这样的证明网络,但在使用私有输入时使用它们需要仔细考虑,以避免暴露敏感数据。同样重要的是要确保,即使私有输入没有直接流向公共输出,也无法通过拼凑来自其他公共数据的事实来推断有关它们的信息。
使用 zkVM 时的基本信任假设是 zkVM 本身的安全性和正确实现。Rami 解释说,RISC Zero 通过严格的审计和形式验证工作来解决这个问题,以确保 zkVM 是确定性的并且符合 RISC-V 规范。他们还投入资源来跟上最新的 ZK 研究、约束系统和证明系统,并有一个团队量化新发展对其证明基础设施的潜在影响。
证明网络:Boundless
Rami 将 Boundless 介绍为 RISC Zero 的去中心化证明网络。它充当一个市场,连接需要生成证明的“寻求者”和能够满足这些请求的“证明者”。Boundless 可以在支持其智能合约的任何链上运行。它的核心目的是通过将计算卸载到网络来使区块空间“充足而不是稀缺”,从而有效地提供“更多执行”,而无需改变底层链的安全共识(尽管它引入了加密假设)。该系统使用拍卖机制,证明者在其中出价,旨在为寻求者实现高效的价格发现。RISC Zero 计划在未来扩展 Boundless 以支持其他 zkVM。
由 zkVM 实现的应用程序
RISC Zero zkVM 的通用性和可扩展性使以前难以实现或不可能实现的应用程序成为可能。
- Layer 2 的 ZK 错误证明: Rami 对 Layer 2 系统特别感兴趣,并强调了 Kailua,RISC Zero 用于 rollups 的 ZK 错误证明系统。与以前容易受到富裕攻击者攻击的交互式错误证明系统不同,Kailua 使错误证明成为非交互式的。它只需要一个诚实方的单笔诚实交易即可保证安全。Kailua 通过将整个区块执行和推导过程投入到 zkVM 中来实现这一点,依靠它来计算和证明即使是非常长的执行(“数万亿个周期”)。
- 安全桥接和轻客户端: Jon 和 Rami 讨论了 zkVM 如何增强桥接安全性,特别是对于像比特币和以太坊这样的跨链场景。虽然某些信任假设对于共识和同步仍然是必要的,但 zkVM 可以降低恶意方试图歪曲链状态的最坏情况的成本和影响。证明执行的非常短的摘要的能力有助于为报告的状态提供强大的完整性保证,从而促进创建更安全的链上轻客户端。
- 可验证的视图调用 (Steel): Rami 提到了 Steel,这是一个 RISC Zero 库,允许开发人员复制和证明以太坊视图调用的结果,以便在链下验证中复用。Steel 是一个开发人员可以构建在其上以与以太坊交互并证明诸如区块数据一致性 之类的东西而无需自己实现复杂验证的库。作为其强大功能的一个示例,一个客户端使用 Steel 生成了一个证明,该证明将花费链上 100 亿 gas(数百万美元)。RISC Zero 正在向 Steel 添加功能,以允许验证链上发生的收据和事件。
- 将 zkVM 与 FHE 结合使用: Rami 提出了将全同态加密 (FHE) 与 zkVM 结合使用的潜力,尽管目前成本很高。FHE 通过允许对加密数据进行计算来提供隐私。但是,FHE 本身并不能保证计算运行正确。通过在 zkVM 中运行 FHE 计算,zkVM 提供认证(正确执行的证明),而 FHE 确保数据在计算期间保持私密,从而实现证明任务的安全委托。输出最初将被加密,然后用户将在本地证明他们知道如何在 zkVM 回执中解密输出。
Rami 对正在考虑构建基于 zkVM 应用程序的开发人员的建议
Rami 为探索基于 zkVM 的应用程序的开发人员分享了一个关键建议:首先,询问是否真正需要零知识。 在提交到基于 ZK 的方法之前,请仔细评估它是否是解决问题的正确工具。在某些情况下,诸如多方计算 (MPC) 之类的替代方法可能提供所需的保证。
Jon 为构建 zkVM 应用程序的开发人员提供的安全建议:
Jon 根据 Veridise 审计 zkVM 应用程序的经验分享了以下建议:
- 验证输入: 确保你的程序依赖的任何数据,尤其是来自不受信任来源的数据,都已在链上或 zkVM 本身中得到正确验证。密切注意从输入到输出的信息流,以避免 under-constrained inputs(未充分约束的输入)。
- 小心隐私: 如果使用私有输入,请设计程序和输出以避免泄露敏感信息。请注意,有关私有输入的信息可以从其他公共数据或输出中推断出来。
- 了解链上交互: 当在链上验证证明时,请记住,证明通常只应导致采取一次操作,以防止重放攻击。不要依赖证明本身的加密唯一性作为 nullifier,因为输入的细微变化,甚至是证明系统中的固有随机化,都可能为相同的逻辑执行结果生成不同的证明哈希。从逻辑上设计证明和链上验证。
- 侧信道意识: zkVM 的效率重点(包括通过预编译进行硬件加速)可能意味着并非所有操作都保证恒定时间执行。通用程序的非直线性质还允许基于执行路径的定时信道,这可能会因 ZK 证明中的长时间计算而加剧。Rami 指出,目前,RISC Zero 证明者优先考虑速度,而不是通过添加延迟来缓解定时侧信道。
RISC Zero 的下一步是什么?
Rami 分享说,RISC Zero 目前非常专注于 Boundless 的发布。(编者注:Boundless 是在拍摄炉边谈话后最近发布的)。他们还为 zkVM 本身制定了强大的性能路线图。这包括:
- 与 Binius 团队达成独家协议,将 Binius 集成到 zkVM 中,这有望实现用于证明的高性能 ASIC(专用集成电路)的创建。内部测试表明,有潜力实现 30 倍的改进。
- 继续开发用于加密操作的 预编译,例如用于配对的 BN254 和用于 KZG 相关任务的 BLS381。例如,Keccak 预编译已经上线。
- zkVM 电路的第二个版本即将推出,预计将在大多数程序中提供 2-3 倍的性能提升。这在采访后也已经发布。
对话以 Jon 和 Rami 感谢彼此的深刻讨论结束,他们承认了 zkVM 技术的复杂性和令人兴奋的未来。
关于 RISC Zero 和 Boundless:
RISC Zero 是一家提供 zkVM(零知识虚拟机)的公司,使开发人员能够为普通软件执行生成 ZK 证明,以实现安全和可验证的计算。Boundless 是 RISC Zero 的最新产品 — 一种通用协议,可将零知识 (ZK) 功能带到每个区块链。
了解更多:
想要了解更多关于 Veridise 的信息吗?
Twitter | LinkedIn | Github | Request Audit