RISC Zeroは、
zk-STARKs(Zero-Knowledge Scalable Transparent Argument of Knowledge)とRISC-Vマイクロアーキテクチャに基づいたゼロ知識の検証可能な汎用コンピューティングプラットフォームです。
ゼロ知識証明とは、ある当事者・証明したい人(Prover・以下:プロバー)が確かめたい人(Verifier・以下:ベリファイア)に、詳細を一切明かすことなく、何かが真実であることを納得させる手法です。RISC Zeroの場合、プロバーは特定のコードを正しく実行したことをベリファイアに示すことができますが、その際、コードの出力だけをベリファイアに公開し、入力や実行中の状態は一切明かしません。
ゼロ知識性があるため、個人情報などのプロバーの特定情報が漏れることはない。
このコードは、zkVMと呼ばれる特別な仮想マシン上で実行されます。
RISC Zero zkVMは小さなRISC-Vコンピュータをエミュレートしており、RISC-V向けのコンパイラツールチェーンが存在する限り、任意のプログラミング言語で書かれたコードを実行できます。現在、Rust、C、およびC++のSDKサポートが存在します。
処理の概要
証明対象となるコードは、実装された言語からメソッドにコンパイルされます。メソッドは、メソッドのコードを実行する特別なエントリーポイントを持つRISC-V ELFファイルとして表現されます。また、メソッドごとにそのイメージID(ELFファイルの特殊な暗号ハッシュ)が計算され、検証に必要となります。
Executable and Linkable Format (ELF) は実行ファイルおよびオブジェクトファイルのためのファイルフォーマットである。コンテナフォーマットの一種。
次に、ホストプログラムが実行され、zkVM内でメソッドを証明します。zkVM内で動作する論理的なRISC-Vマシンをゲストと呼び、zkVMを実行するプロバーをホストと呼びます。メソッドの実行中、ゲストとホストは通信できますが、ホストはゲストの実行を変更することはできません。そうすると、生成される証明が無効になります。実行中に、ゲストコードは計算の公式な出力を表すジャーナルと呼ばれる特別な追記専用ログに書き込むことができます。
メソッドが正しく終了すると、正しい実行の証明としてレシートが生成されます。このレシートは、実行中に書き込まれたジャーナルと、シールと呼ばれる不透明な暗号データの2つの部分で構成されます。
ベリファイアは、このレシートを検証し、ログを調べることができます。ジャーナルやシールが改ざんされていた場合、レシートは検証に失敗します。また、ジャーナルの出力が正しい実行のものでない限り、有効なレシートを生成することは暗号的に不可能です。要するに、レシートは正しい実行のゼロ知識証明として機能します。
プロトコルがゼロ知識であるため、ベリファイアは、ジャーナルに書き込まれたデータやコードの正しい実行から推測されること以外には、ホストとゲストの間でやり取りされる詳細な実行やデータについて何も推測することができません。