• RISC Zero项目简介


    1. 引言

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

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

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

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

    当前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团队的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签名有效。

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

    支持引入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.
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

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

    pub fn verify(
        &self,
        image_id: impl Into<Digest>
    ) -> Result<(), VerificationError>
    
    • 1
    • 2
    • 3
    • 4

    此外,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.
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    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,
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    密码学上,每个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系列博客

  • 相关阅读:
    c++ SQLite 特别好用的库使用实例-创建数据库(1)
    Kotlin小节(二)
    清华“洗衣机系”学霸,如何在 GitHub 拿下 50000+Star?
    Git 简介及使用
    postman json复杂数据的模拟
    Java扩展Nginx之二:编译nginx-clojure源码
    Java 类型信息详解和反射机制
    【Vue】Vue的部分语法规则
    【LeetCode热题100】--226.翻转二叉树
    Java工程师只要掌握这些知识点,就能给面试官一个满意的答案,挑战高薪
  • 原文地址:https://blog.csdn.net/mutourend/article/details/134029608