证明组合:为 ZK 开发者解锁递归和模块化

  • RISC ZERO
  • 发布于 2024-02-08 14:14
  • 阅读 5

RISC Zero 发布了 zkVM 的 v0.20 版本,引入了 "proof composition" 新特性,允许在 zkVM 程序中验证 proofs,实现递归证明,从而扩展了 ZK 的应用范围,比如隐私保护、证明聚合、模块化 guest 程序等。开发者可以通过调用 env::verify() 函数在应用中使用该特性。

返回 证明组合:为 ZK 开发者解锁递归和模块化

上周,我们发布了 RISC Zero zkVM 的 v0.20 版本,其中包括一个新功能:证明组合

证明组合使得在 zkVM 程序内部验证证明 成为可能。此功能为你可以证明的内容开启了无限的可能性。使用证明组合,你可以创建一个证明,证明先前已证明的任何内容。如果 Alice 为她的 ETH 账户和她的 BTC 账户生成了资产证明,她可以将它们组合起来以生成合并资产的证明。实现最大程度的链间互操作性的途径已经到来:用户可以生成关于任何链上活动的证明,他们可以将任意数量的证明聚合为单个简洁的证明,并且他们可以在任何链上验证结果。

使用 RISC Zero,你可以编写原生 Rust,并导入 Rust 包来快速开发你的应用程序。最流行的 1000 个 Rust 包中有超过 700 个与我们的 zkVM 兼容,并且我们运行夜间兼容性测试 来进行监控。使用 zk DSL 既缓慢又繁琐,导致更高的开发成本和更长的周期,而且应用程序不是模块化的。现在,你可以灵活地将来自各种 zkVM 程序的证明组合成更复杂的应用程序,并以 Rust 作为基础。

notion image

我们的使命是让 ZK 为生产做好准备,并触手可及地提供给每一位 Web3 开发者。使开发者能够灵活地利用 Rust 生态系统是我们为简化 zk 应用程序开发做出的第一个重大贡献。现在,你也可以灵活地利用 RISC Zero 生态系统。

准备好开始构建了吗?访问 RISC Zero 的文档

什么是证明组合?

RISC Zero 的证明组合功能允许任何开发者访问一种名为 递归证明 的强大技术。递归证明是 ZK 领域的黄金标准,也是在生产环境中难以实现的事情之一,它允许在新的证明中验证现有的证明,从而实现规模、表达性和成本降低方面的阶跃式增长。

迄今为止,递归证明的实现非常困难,并且在面向用户的的功能和通用性方面受到限制。虽然一些团队已经实现了递归,但它被锁定在他们自己的技术内部,无法用于通用用途。

RISC Zero 的证明被打包到一个名为 receipt 的对象中。组合允许用户在 zkVM 程序 中验证 收据。结果是 给定收据已验证的证明。然后,你可以无限重复此过程,以构建更多满足不同要求的更复杂的应用程序。

证明组合能实现什么?

此功能为各种新的应用程序打开了大门,这些应用程序可以快速轻松地开发,而无需任何密码学方面的先验知识。

隐私保护 - 通过将程序拆分为多个部分,由持有敏感数据的各方私下证明,从而保护隐私和数据所有权。

  • 例如,生成一个证明,证明密文是对某个值到有效公钥的正确加密。

  • 例如,通过连接每个私有持有的分片上查询的收据,生成数据库查询的证明。

证明聚合 - 将多个证明聚合为一个,以实现高效的批量验证。

  • 例如,生成一个交易块的证明,其中每个交易本身都由收据验证。

模块化 guest 程序 - 为拆分为许多不同操作或模块的工作流创建一个单一收据,从而提高 证明者 效率和可维护性。

  • 例如,为图像处理管道的结果生成一个单一收据,其中不同的过滤器位于它们自己的 guest 中。

对隐私的影响

隐私是零知识证明的基石,但能够自定义隐私选项具有挑战性。开发者和用户需要根据他们的需求自定义选项。通过组合,用户可以生成关于其私有数据的证明,然后将这些证明进行组合。这使用户可以最大限度地灵活地处理其私有数据。

如何使用它?

如果你已经开始构建 zkVM 应用程序并想使用组合,你所需要做的就是在你的应用程序中运行 env::verify() 函数。有关文档,请参阅 risc0-zkvm guest 模块,并查看 此示例 以获取实际演示。

如果你只是刚开始,请查看 zkVM 快速入门页面

它的底层是如何工作的?

当调用 env::verify() 时,不会立即验证 收据。相反,它会将“假设”附加到 收据。如果 收据 包含一个或多个假设,则必须先解决这些假设,然后才能通过 收据 验证。

术语“假设”在普通英语中的用法类似。考虑以下句子:“假设这个形状是正方形,那么它就是一个矩形”。如果我们不知道这个形状是正方形,我们就无法判断它是否是矩形。我们将具有未解决假设的 收据 称为“条件收据”。

收据 上,假设由 receipt claim 的哈希值表示。Receipt claim 包含 zkVM 执行的所有公共细节,最值得注意的是包含 journalimage ID。有了这些,我们可以表示计算机可验证的任何语句。我们可以编写一个程序来验证给定的形状是否为正方形,并生成一个 收据 来证明这一点。我们可以将该 收据 中的 声明 作为输入传递给一个程序,该程序通过假设给定的形状是正方形来验证给定的形状是否为矩形。我们现在有一个条件 收据,说明给定的形状是一个矩形。

如果存在一个证明该假设有效的 收据,那么 证明者 可以使用 RISC Zero 递归电路从条件 收据 中删除该假设。这是通过让递归电路:

  • 验证假设的 收据,证明假设为真,并且

  • 验证条件 收据

如果语句 B 为真,并且假设 B,语句 A 为真,那么显然 A 为真。使用相同的逻辑,递归电路通过删除假设将条件 收据 转换为无条件 收据。现在,任何 验证者 都会接受此 收据

递归电路实际上并不是什么新鲜事物。它是我们用于通过 continuations 解锁无限长度执行的相同系统。它也非常高效,在 NVIDIA GPU 或 Apple 的 Metal 加速器上花费不到 2 秒。通过使用假设系统将 收据 验证卸载到我们优化的 证明者,使用组合几乎没有开销。它还与 Bonsai 的高度并行 证明 引擎集成,以进一步推动 ZK 中可能的计算规模。

开始

  • 原文链接: risczero.com/blog/proof-...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
RISC ZERO
RISC ZERO
https://risczero.com/