risc0/risc0
GitHub: risc0/risc0
RISC Zero 是基于 zk-STARKs 和 RISC-V 微架构的零知识可验证通用计算平台,允许开发者证明任意代码的正确执行而无需泄露输入数据。
Stars: 2170 | Forks: 724
[][crates-url]
[][licence-url]
[][actions-url]
[][discord-url]
[][twitter-url]
RISC Zero 是一个基于 [zk-STARKs][zk-proof] 和 [RISC-V] 微架构的零知识可验证通用计算平台。
[零知识证明][zk-proof] 允许一方(证明者)在不泄露所有细节的情况下说服另一方(验证者)某事是真实的。在 RISC Zero 的场景中,证明者可以证明他们正确执行了某段代码(双方均已知晓),而仅向验证者展示代码的输出结果,不透露任何输入内容或执行过程中的任何状态。
代码运行在一个称为 _zkVM_ 的特殊虚拟机中。RISC Zero zkVM 模拟了一台小型 [RISC-V] 计算机,允许其运行以任何语言编写的任意代码,只要存在针对 RISC-V 的编译器工具链即可。目前,SDK 支持 Rust、C 和 C++。
## 协议概述与术语
首先,需要被证明的代码必须从其实现语言编译为一个 _method_。一个 method 由一个带有特殊入口点的 RISC-V ELF 文件表示,该入口点用于运行该 method 的代码。此外,可以为给定的 method 计算其 _image ID_,这是 ELF 文件的一种特殊类型的加密哈希,在验证时是必需的。
接下来,宿主程序在 zkVM 内部运行并证明该方法。在 zkVM 内部运行的逻辑 RISC-V 机器被称为 _guest_,而运行 zkVM 的证明者被称为 _host_。在方法执行期间,guest 和 host 可以相互通信,但 host 不能以任何方式修改 guest 的执行,否则生成的证明将无效。在执行期间,guest 代码可以写入一个称为 _journal_ 的特殊追加日志中,该日志代表计算的官方输出。
假设方法正确终止,将会生成一个 _receipt_,用于提供正确执行的证明。该 receipt 由两部分组成:执行期间写入的 journal 和一段称为 _seal_ 的不透明加密数据。
然后,验证者可以验证该 receipt 并检查日志。如果对 journal 或 seal 进行了任何篡改,receipt 将无法通过验证。此外,除非 journal 的输出与某个有效执行的方法(其 image ID 与 receipt 匹配)的完全正确输出一致,否则在加密层面上是无法生成有效 receipt 的。总之,receipt 充当了正确执行的零知识证明。
由于该协议是零知识的,验证者无法推断出有关执行细节或 host 与 guest 之间传递的任何数据的任何信息(除了写入 journal 的数据以及代码的正确执行所暗示的信息之外)。
## 安全性
此代码实现了一个[三层递归证明系统][zksummit10-talk],基于经过充分研究的 zk-STARK 协议和 Groth16 协议。有关底层密码学假设的概述,请参阅我们的[安全模型][security-model]页面。在默认参数下,该系统实现了完美的零知识性以及 98 位推测安全性。我们的 STARK 协议在《RISC-V 完整性的可扩展、透明论证》[Scalable, Transparent Arguments of RISC-V Integrity][proof-system-in-detail] 中有所描述,并且在 `soundness.rs` 文件中包含了一个可靠性/安全性计算器。
要运行该计算器,请在运行证明时使用 `RUST_LOG=risc0_zkp=debug`。
## 快速入门
要启动您自己的项目,您可以使用我们的 `cargo risczero` 工具来编写初始样板代码并设置标准的目录结构。
首先,如果您尚未安装 Rust,请[安装 Rust][install-rust],然后安装 RISC Zero 工具链安装程序 `rzup`。我们将使用 `rzup` 来安装 `cargo-risczero`。
要安装 `rzup`,请运行以下命令并按照说明操作:
```
curl -L https://risczero.com/install | bash
```
接下来,我们可以通过运行 `rzup install` 来安装 RISC Zero 工具链:
```
rzup install
```
您可以通过运行以下命令来验证安装是否成功:
```
cargo risczero --version
```
安装完成后,您可以创建一个新项目(在此示例中命名为 `my_project`):
```
cargo risczero new my_project
```
有关 `cargo risczero` 的更多详细信息和选项,请参阅[其 README][cargo-risczero-readme]。
有关如何使用 RISC Zero、RISC Zero 项目的典型结构,以及对 RISC Zero 新手开发者有用的其他资源的更多指导,请参阅我们的[快速入门页面][quickstart]。
## 文档
zkVM SDK 和其他 Rust crate 的文档可以在 [docs.rs/risc0-zkvm](https://docs.rs/risc0-zkvm) 找到。
所有其他文档均可在 [dev.risczero.com](https://dev.risczero.com) 找到。
您可以使用 `cargo doc` 在本地构建并查看 Rust 文档。
有关依赖项,请参阅 [CONTRIBUTING.md](./CONTRIBUTING.md)。
文档网站的源代码可以在 [website 目录](./website)中找到。
## 从源码构建
从源码构建需要一些额外的工具和步骤。
有关完整说明,请参阅 [CONTRIBUTING.md](./CONTRIBUTING.md)。
## Rust 二进制文件
| crate | [crates.io] |
| -------------- | --------------------------------------------------------------------------------------------------- |
| cargo-risczero | [](https://crates.io/crates/cargo-risczero) |
| risc0-r0vm | [](https://crates.io/crates/risc0-r0vm) |
| risc0-tools | [](https://crates.io/crates/risc0-tools) |
## Rust 库
| crate | [crates.io] | [docs.rs](https://docs.rs) |
| --------------------------- | ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| bonsai-sdk | [](https://crates.io/crates/bonsai-sdk) | [](https://docs.rs/bonsai-sdk) |
| risc0-binfmt | [](https://crates.io/crates/risc0-binfmt) | [](https://docs.rs/risc0-binfmt) |
| risc0-build | [](https://crates.io/crates/risc0-build) | [](https://docs.rs/risc0-build) |
| risc0-build-kernel | [](https://crates.io/crates/risc0-build-kernel) | [](https://docs.rs/risc0-build-kernel) |
| risc0-circuit-recursion | [](https://crates.io/crates/risc0-circuit-recursion) | [](https://docs.rs/risc0-circuit-recursion) |
| risc0-circuit-recursion-sys | [](https://crates.io/crates/risc0-circuit-recursion-sys) | [](https://docs.rs/risc0-circuit-recursion-sys) |
| risc0-circuit-rv32im | [](https://crates.io/crates/risc0-circuit-rv32im) | [](https://docs.rs/risc0-circuit-rv32im) |
| risc0-circuit-rv32im-sys | [](https://crates.io/crates/risc0-circuit-rv32im-sys) | [](https://docs.rs/risc0-circuit-rv32im-sys) |
| risc0-core | [](https://crates.io/crates/risc0-core) | [](https://docs.rs/risc0-core) |
| risc0-groth16 | [](https://crates.io/crates/risc0-groth16) | [](https://docs.rs/risc0-groth16) |
| risc0-sys | [](https://crates.io/crates/risc0-sys) | [](https://docs.rs/risc0-sys) |
| risc0-zkp | [](https://crates.io/crates/risc0-zkp) | [](https://docs.rs/risc0-zkp) |
| risc0-zkvm | [](https://crates.io/crates/risc0-zkvm) | [](https://docs.rs/risc0-zkvm) |
| risc0-zkvm-platform | [](https://crates.io/crates/risc0-zkvm-platform) | [](https://docs.rs/risc0-zkvm-platform) |
## Feature flags
上述列出的一个或多个 crate 中包含以下 feature flags:
| Feature | Target(s) | Implies | 描述 | Crates |
| ---------------- | ----------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------- |
| client | all except rv32im | std | 启用客户端 API。 | risc0-zkvm |
| cuda | | prove, std | 为证明者启用 CUDA GPU 加速。需要安装 CUDA 工具包。 | risc0-circuit-recursion, risc0-circuit-rv32im, risc0-zkp, risc0-zkvm |
| disable-dev-mode | all except rv32im | | 禁用开发者模式,以防证明和验证被伪造。用于防止在生产系统中错置 `RISC0_DEV_MODE` 而破坏安全性。 | risc0-zkvm |
| metal | macos | prove, std | 已弃用 - 在 Apple Silicon 上默认已启用 Metal GPU 加速。 | risc0-circuit-recursion, risc0-circuit-rv32im, risc0-zkp, risc0-zkvm |
| prove | all except rv32im | std | 启用证明者,与 zkvm guest 内部不兼容。 | risc0-circuit-recursion, risc0-circuit-rv32im, risc0-zkp, risc0-zkvm |
| std | all | | 支持 Rust 标准库。 | risc0-circuit-recursion, risc0-circuit-rv32im, risc0-zkp, risc0-zkvm |
## 许可证
本项目采用以下任一双许可证:
* [Apache License, Version 2.0](LICENSE-APACHE)
* [MIT License](LICENSE-MIT)
标签:RISC-V, Rust, Vectored Exception Handling, zk-STARK, zkVM, 可视化界面, 密码学, 手动系统调用, 网络流量审计, 零知识证明