risc0/risc0

GitHub: risc0/risc0

RISC Zero 是基于 zk-STARKs 和 RISC-V 微架构的零知识可验证通用计算平台,允许开发者证明任意代码的正确执行而无需泄露输入数据。

Stars: 2170 | Forks: 724

RISC Zero Company Logo

[![Crates.io](https://img.shields.io/badge/crates.io-v2.0-orange)][crates-url] [![Dual licensed: Apache-2.0 OR MIT](https://img.shields.io/badge/license-Apache--2.0_OR_MIT-blue)][licence-url] [![Build Status](https://img.shields.io/github/actions/workflow/status/risc0/risc0/main.yml?branch=main)][actions-url] [![Discord chat](https://img.shields.io/discord/953703904086994974.svg?logo=discord&style=flat-square)][discord-url] [![Twitter](https://img.shields.io/twitter/follow/risczero)][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 | [![x](https://img.shields.io/badge/crates.io-v2.1-orange)](https://crates.io/crates/cargo-risczero) | | risc0-r0vm | [![x](https://img.shields.io/badge/crates.io-v2.1-orange)](https://crates.io/crates/risc0-r0vm) | | risc0-tools | [![x](https://img.shields.io/badge/crates.io-v2.0-orange)](https://crates.io/crates/risc0-tools) | ## Rust 库 | crate | [crates.io] | [docs.rs](https://docs.rs) | | --------------------------- | ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | | bonsai-sdk | [![x](https://img.shields.io/badge/crates.io-v1.4-orange)](https://crates.io/crates/bonsai-sdk) | [![](https://img.shields.io/docsrs/bonsai-sdk)](https://docs.rs/bonsai-sdk) | | risc0-binfmt | [![x](https://img.shields.io/badge/crates.io-v2.0-orange)](https://crates.io/crates/risc0-binfmt) | [![](https://img.shields.io/docsrs/risc0-binfmt)](https://docs.rs/risc0-binfmt) | | risc0-build | [![x](https://img.shields.io/badge/crates.io-v2.1-orange)](https://crates.io/crates/risc0-build) | [![](https://img.shields.io/docsrs/risc0-build)](https://docs.rs/risc0-build) | | risc0-build-kernel | [![x](https://img.shields.io/badge/crates.io-v2.0-orange)](https://crates.io/crates/risc0-build-kernel) | [![](https://img.shields.io/docsrs/risc0-build-kernel)](https://docs.rs/risc0-build-kernel) | | risc0-circuit-recursion | [![x](https://img.shields.io/badge/crates.io-v2.0-orange)](https://crates.io/crates/risc0-circuit-recursion) | [![](https://img.shields.io/docsrs/risc0-circuit-recursion)](https://docs.rs/risc0-circuit-recursion) | | risc0-circuit-recursion-sys | [![x](https://img.shields.io/badge/crates.io-v2.0-orange)](https://crates.io/crates/risc0-circuit-recursion-sys) | [![](https://img.shields.io/docsrs/risc0-circuit-recursion-sys)](https://docs.rs/risc0-circuit-recursion-sys) | | risc0-circuit-rv32im | [![x](https://img.shields.io/badge/crates.io-v2.0-orange)](https://crates.io/crates/risc0-circuit-rv32im) | [![](https://img.shields.io/docsrs/risc0-circuit-rv32im)](https://docs.rs/risc0-circuit-rv32im) | | risc0-circuit-rv32im-sys | [![x](https://img.shields.io/badge/crates.io-v2.0-orange)](https://crates.io/crates/risc0-circuit-rv32im-sys) | [![](https://img.shields.io/docsrs/risc0-circuit-rv32im-sys)](https://docs.rs/risc0-circuit-rv32im-sys) | | risc0-core | [![x](https://img.shields.io/badge/crates.io-v2.0-orange)](https://crates.io/crates/risc0-core) | [![](https://img.shields.io/docsrs/risc0-core)](https://docs.rs/risc0-core) | | risc0-groth16 | [![x](https://img.shields.io/badge/crates.io-v2.0-orange)](https://crates.io/crates/risc0-groth16) | [![](https://img.shields.io/docsrs/risc0-groth16)](https://docs.rs/risc0-groth16) | | risc0-sys | [![x](https://img.shields.io/badge/crates.io-v1.4-orange)](https://crates.io/crates/risc0-sys) | [![](https://img.shields.io/docsrs/risc0-sys)](https://docs.rs/risc0-sys) | | risc0-zkp | [![x](https://img.shields.io/badge/crates.io-v2.0-orange)](https://crates.io/crates/risc0-zkp) | [![](https://img.shields.io/docsrs/risc0-zkp)](https://docs.rs/risc0-zkp) | | risc0-zkvm | [![x](https://img.shields.io/badge/crates.io-v2.1-orange)](https://crates.io/crates/risc0-zkvm) | [![](https://img.shields.io/docsrs/risc0-zkvm)](https://docs.rs/risc0-zkvm) | | risc0-zkvm-platform | [![x](https://img.shields.io/badge/crates.io-v2.0-orange)](https://crates.io/crates/risc0-zkvm-platform) | [![](https://img.shields.io/docsrs/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, 可视化界面, 密码学, 手动系统调用, 网络流量审计, 零知识证明