STARKを用いてRISC-Vの実行履歴証明を行うフレームワークRISC Zeroの紹介

お知らせ
Table of Contents

はじめに

この記事では、RISC Zero1という、知識証明フレームワークについて紹介します。

RISC Zeroとは

RISC ZeroはRust製のSTARK2証明フレームワークです。Rustで書かれたプログラムをRISC-Vのアーキテクチャ向けのバイナリにコンパイルすることができます。そのコンパイルされたプログラムをzkVMという仮想マシン上で動かすと、メモリとレジスタの内容がCPU命令によって遷移していく巨大なテーブルを作成することができます。
そのテーブルの遷移の整合性を確認することで、STARKによるプログラム実行知識証明を行うことができます。

これを説明した以下画像は3から持ってきたものです。
file

ゲスト環境(実行を証明したい対象のプログラム、RISC-Vバイナリ)と、ホスト環境(実行を証明するときに外部からヒント(プライベートインプット)を与え、証明を受け取るためのプログラム)に分かれています。チュートリアルは 公式サイト4にあるとおりです。

これを説明した以下画像は 5から持ってきたものです。
file

また、STARKの検証回路自体を一つのプログラムとみなして、そのプログラムを検証コストの低いGroth16などのSNARKで証明することが可能です6。そのようにすれば、結果的にRISC-Vのコードの実行証明をEVMなどオンチェーン上で検証することができます。

他フレームワークとの違い

Cairo

Cairoはそのアーキテクチャ仕様の制約から、検証者が自分自身で公開インプットとプログラムを用意することができず、証明者から提供される公開インプットを信頼する必要があります7

すなわち、Cairoでは公開インプットがファイルとしてプログラム本体とは分かれて出力され、そのファイルを入力として検証することができるものの、その公開インプット自体は人間が読める形式にはなっていません。公開インプットを人間が読める形式から変換されたものであると確信するためには、以下のいずれかが必要です。

  1. メモリ上に展開される情報である公開インプットをパースするプログラムによって、検証者がプログラム全体を実行せずに独立して公開インプットの整合性を確認できるようにする
  2. 検証者がプログラム全体を実行して、公開インプットの整合性を確認できるようにする

1については現状不可能ですが、8のCairo VM側の仕様変更で実装される予定とのことです。

2については現在実行可能な唯一の方法ですが、これはSTARKの検証者がプログラム全体を実行する必要があることになり本末転倒です。「手元で再計算を行うことを前提として、スマートコントラクト上で同じことを実行・検証しているのを事後的に確認したい」という需要があれば、役に立つ可能性もあります(ユースケースはよくわかりませんが)。

RISC Zero

RISC Zeroでは、ゲストプログラムとしてコンパイルされたものが公開インプットの全てであり、そのプログラムが正常に動作する入力が与えられたかどうかは、証明者から提供される入力を信頼せずに決定できます。証明(receipt)にはゲストプログラムがzkVM内部でコミットした情報も記録されており、プログラム全体を実行しなくても検証者は最終的に出力される値の整合性を調べることが可能です。

SP1

SP19もRISC Zeroと同様にRISC-VアーキテクチャにコンパイルしたRustのコードをzkVM上で動かしてSTARKの実行履歴を作る仕組みのようです。RISC Zeroよりも証明の実行速度を高速化したものとのことです。

RISC Zeroの応用とその限界

STARKは知識証明の一種ですが、そもそも知識証明が必要とされる場面は多くありません。なぜならば、知識を証明したいならば、証明者は単にその知識を検証者に伝えるだけで十分であることがほとんどだからです。ゼロ知識証明であれば応用範囲は広いですが、SNARKの方ではより検証速度が速いGroth16のようなアルゴリズムが知られています。STARKでは証明者側が多大な計算量を負担することで検証者側がそのコストを負担しなくてすみますが、そのような制約が役に立つ場面は一般的なシステムにおいてはあまりないのが実情です。

STARKを機能として応用できる場面は大きく分けて2つ想定できます。

  1. 暗号通貨のフルノードの高速同期
  2. 暗号通貨のサイドチェーンや、他チェーンとのブリッジをトラストレスに行うための証明

1についてはCairoよりもRISC Zeroの方が適していそうです。理由としては、フルノードの高速同期を行うために必須なCairoのヒント機能がCairo v0にしかなく、Cairo v0はCairo v1に置き換えられてサポート対象外になる予定であるためです。ただ、いずれも巨大なデータを読み込んでパースするのには時間がかかるため、現状ZeroSync10の目指しているフルノードの完全検証+高速同期を行うことは難しい可能性があります。

2についてはCairo, RISC Zeroいずれも利用可能なのですが、そもそもトラストレスなサイドチェーンを作るにあたって、チェーンのフォークが起きる可能性などを考慮すると、単純にzkSNARK, zkSTARKのようなゼロ知識証明を導入したところでスケーリング問題が解決しない可能性が高いと考えられます。これはデータ可用性問題(data availability problem)1112の問題として知られています。

すべてのサイドチェーンは外部の状態変更を伴い、かつその状態変更の結果の候補のすべてを事前に予測することができません。さらに、状態Aから派生しうるB,Cの状態が相互に矛盾しているということがありえます。いずれかの状態からコインをメインのチェーンに戻した後、他の状態からコインをメインのチェーンに戻そうとする構成が可能であれば、それらの矛盾を検証する必要があります。
そして、その矛盾が検証できるためには、メインのチェーンにおいて外部の状態を知ることが必要であると思われるのですが、例えば外部の状態のコミットメントをメインのチェーンにおいて許可してしまうと、メインのチェーンではコミットメントが真正なものか検証できないというジレンマが発生してしまいます。

ただ、現在は BitVMのような完全トラストレスではない1-of-n型のトラストにより制約を緩和した手法が出てきているので、同様に1-of-n型のトラストによってサイドチェーンを構成できる可能性はあるかと思います。

参考文献


  1. RISC Zero https://www.risczero.com/ 

  2. FRIプロトコルを用いたSTARKアルゴリズムの紹介 https://tech.hashport.io/3924/ 

  3. Guest Code 101 https://dev.risczero.com/api/zkvm/guest-code-101 

  4. Building zkVM Hello World https://dev.risczero.com/api/zkvm/tutorials/hello-world 

  5. zk Solutions High-level Overview. Case study: BONSAI — off-chain zkVM Compute Network https://medium.com/@tsimashenka/zk-solutions-high-level-overview-case-study-bonsai-off-chain-zkvm-compute-network-4f34a51df4a1 

  6. Doubling Down on Open Source at RISC Zero https://www.risczero.com/blog/open-source 

  7. 知識証明プロトコルSTARKの証明・検証ライブラリを試してみる https://tech.hashport.io/4281/ 

  8. Public inputs improvement to Cairo Verifier https://github.com/lambdaclass/lambdaworks/issues/727 

  9. Documentation for SP1 users and developers. https://succinctlabs.github.io/sp1/ 

  10. ZeroSync https://zerosync.org/ 

  11. SNARKs and the future of blockchains https://medium.com/@RubenSomsen/snarks-and-the-future-of-blockchains-55b82012452b 

  12. "SNARKS do not help with scalability at all, because they do not solve the so-called “data availability problem”. There is no way to use the SNARK to recover the sequence of events that led to its creation. There is also no way to audit the SNARK, to make sure that it is working correctly, without also having all of the original data on hand. Thus, SNARKS do not help with scalability, are probably only useful as an enhancement to SPV-level security." https://www.truthcoin.info/blog/thunder/ 

タイトルとURLをコピーしました