RISC Zero项目简介

1. 引言

RISC Zero为致力于为为全球开发者创建利用ZK技术构建软件所需的基础设施和工具的初创公司。

ZK技术将重塑数字互动的方式。从历史上看,确认软件应用程序正确执行的唯一方法是通过冗余计算。ZK引入了一个新选项:可验证计算(verifiable computation)。

现在可将程序的输出与其self-certifying receipt结合,允许持怀疑态度的第三方验证执行的正确性——而且该verifier不需要重复原始计算,甚至不需要查看程序的输入!

可验证计算改变了我们所依赖的计算基础设施的弹性和经济性。它创造了许多喜闻乐见的新兴用例,如:

  • zk coprocessors:支持链上应用将其逻辑复杂的部分移到链下,以降低gas开销。
  • 区块链基础设施,包括在与Optimism合作。

当前RISC Zero技术栈有:

  • Bonsai:proving服务,为软件开发栈,支持链上(即通过智能合约)和链下应用向RISC Zero zkVM请求和接收proofs。
  • RISC Zero zkVM:为可证明任意代码正确执行的高性能工具。
  • RISC Zero Proof System:为RISC Zero zkVM底层的密码学技术。

2. Bonsai

Bonsai发布于2023年,为支持链上和链下应用向RISC Zero zkVM请求和接收proofs的proving服务。

Bonsai为:

  • 通用ZK证明服务,支持任意链、任意协议、任意应用使用ZK proofs的优势。其高度并行、可编程,并性能优良。
  • 支持将ZK proofs直接集成到任意智能合约中,而不需要定制电路。
  • 支持将ZK直接集成到任意EVM链的dApps
  • 具备支持任意其它生态的潜力。

RISC Zero zkVM是Bonsai的基础,其具备广泛的语言兼容性,当前支持Rust,未来将支持可编译为RISC-V的其它语言,如C++、Go等等。

借助:

  • 递归证明
  • 专门定做的电路compiler
  • state continuations
  • 证明算法的持续改进

Bonsai将支持为大量应用生成高性能ZK proofs。

RISC Zero项目简介_第1张图片
其中RISC Zero团队的Bonsai-ETH Relay作为dApp合约与Bonsai proving服务的中间人。为使用Bonsai ETH Relay,dApp开发者需完成:

  • 1)在链上部署一个智能合约,该智能合约调用RISC Zero的relay合约。
  • 2)将对RISC Zero zkVM编译的程序上传到Bonsai proving服务。

3. RISC Zero zkVM

RISC Zero zkVM首次发布于2022年4月,可证明任意代码的正确执行,支持开发者以成熟编程语言(如Rust和C++)来构建ZK应用。其发布意味着ZK软件开发的重大突破:

  • RISC Zero zkVM,使得开发者不需要构建电路,也不需要以定制语言来编写ZK应用。

RISC Zero zkVM支持开发者以Rust来构建,并利用Rust生态系统的成熟度,使得开发者可迅速构建有意义的ZK应用,而无需任何数学或密码学背景。

相关应用有:

  • JSON:证明JSON文件内某元素的内容,而保证其它数据的隐私。
  • Where’s Waldo:证明JPG文件中出现了Waldo,但保持该图像的其它部分的隐私。
  • ZK Checkmate:证明你发现了a mate-in-one,但不泄露该winning move。
  • ZK Proof of Exploit:证明你可利用某以太坊账号,但不暴露该利用。
  • ECDSA signature verification:证明某ECDSA签名有效。

所有这些例子都可利用成熟的软件生态:

  • RISC Zero zkVM支持当前top 1000 Rust crates的70%多。

支持引入Rust crates,将颠覆ZK软件世界的游戏规则:

  • 项目不再需要数月或数年才能开发完成。

RISC Zero在不断改进性能,当前支持CUDA和Metal GPU加速,并借助continuations支持对大型程序的并行证明。

4. RISC Zero Proof System

RISC Zero zkVM执行,会生成一个Receipt,用作特定Session的有效性证明:

pub struct Receipt {
    pub inner: InnerReceipt,
    pub journal: Vec<u8>, //包含该Session的公开输出。
    //journal的内容通过在guest代码中调用`env::commit()`和`env::commit_slice()`来指定。
}
pub struct Session {
    pub segments: Vec<Box<dyn SegmentRef>>, //The constituent Segments of the Session
    pub journal: Vec<u8>, //The data publicly committed by the guest program.
    pub exit_code: ExitCode, //The ExitCode of the session.
    pub hooks: Vec<Box<dyn SessionEvents>>, //The hooks to be called during the proving phase.
}

为确认该Receipt是诚实生成的,可使用Receipt::verify,并将所执行代码的ImageID作为参数,进行验证。

pub fn verify(
    &self,
    image_id: impl Into<Digest>
) -> Result<(), VerificationError>

此外,receipt对该程序的执行做了一些claims,具体见ReceiptMetadata

pub struct ReceiptMetadata {
    pub pre: SystemState, //The SystemState of a segment just before execution has begun.
    pub post: SystemState, //The SystemState of a segment just after execution has completed.
    pub exit_code: ExitCode, //The exit code for a segment
    pub input: Digest, //A Digest of the input, from the viewpoint of the guest.
    pub output: Digest, //A Digest of the journal, from the viewpoint of the guest.
}

Receipt主要有2种形式:

  • 可表示为一组SegmentReciepts,每个SegmentReceipt证明单个Segment。所有SegmentReceipts证明整个Session。
  • 可表示为单个SuccinctReceipt,以证明整个session的有效性。借助递归证明,任意数量的SegmentReceipts都可压缩为单个SuccinctReceipt。
pub struct SegmentReceipts(pub Vec<SegmentReceipt>);
pub struct SegmentReceipt {
    pub seal: Vec<u32>,
    pub index: u32,
    pub hashfn: String,
}

pub struct SuccinctReceipt {
    pub seal: Vec<u32>,
    pub control_id: Digest,
    pub meta: ReceiptMetadata,
}

密码学上,每个SegmentReceipt和SuccinctReceipt都是ZK-STARK.

参考资料

[1] RISC Zero简介
[2] RISC Zero Proof System
[3] Bonsai on Ethereum
[4] A Blockchain Developer’s Guide to the zkVM

RISC Zero系列博客

  • RISC0:Towards a Unified Compilation Framework for Zero Knowledge
  • Risc zero ZKVM:zk-STARKs + RISC-V
  • 2023年 ZK Hack以及ZK Summit 亮点记
  • RISC Zero zkVM 白皮书
  • Risc0:使用Continunations来证明任意EVM交易
  • Zeth:首个Type 0 zkEVM

你可能感兴趣的:(zkVM,zkVM)