zkVM技術の比較とユースケース|zkEVM、zkWasm、RISC Zero
2024年08月21日
この記事を簡単にまとめると(AI要約)
目次
- 前提
- zkVMの概要
- VM(仮想マシン:Virtual Machine)
- zkVM
- なぜzkVM
- zkVMの種類
- zkEVM
- RISC ZERO
- RISC-Vとは
- RISC ZEROの概要
- zkWASM
- WASMとは
- zkWASMの可能性
- 各zkVMの比較と評価
- ブロックチェーン上でのzkVMの使用例
- SGX DCAPのオンチェーン検証
- zkVMでzkEVMを実装
- まとめ
前提
本レポートでは、ブロックチェーンおよびその他の分野で注目されているzkVM(ゼロ知識仮想マシン)について解説します。zkVMに関連する技術知識を紹介し、異なる仮想マシン(VM)の特徴と用途について理解を深めることを目指します。
zkVMは、ブロックチェーン技術においてセキュリティとプライバシーを維持しながら、計算の効率性とスケーラビリティを飛躍的に向上させる技術として期待されています。その影響はブロックチェーンの枠を超え、ゼロ知識証明を活用したさまざまなアプリケーションの開発を加速させるきっかけとなっています。これにより、zkVMは金融、プライバシー保護、データ管理など、幅広い分野で新しいユースケースを生み出すことが期待されています。
zkEVMについての概要についてあらかじめ知っておきたい方はこちらのレポートも参照ください。
【関連レポート】
zkVMの概要
zkVMはブロックチェーンの分野に限らず、さまざまな用途で注目されていますが、具体的に何を行い、どのような問題を解決しているのでしょうか。本セクションでは、zkVMの概要と、なぜzkVMの開発が盛んに進められているのか、その開発動機について紹介します。
VM(仮想マシン:Virtual Machine)
まず、VM(仮想マシン)とは、コンピューター内で仮想的なインスタンスを作成し、独立した環境でアプリケーションを実行する仕組みです。VMの利点の一つとして、異なるハードウェアを持つホストマシン上でも同じ環境を再現できる高い**「移植性」**があります。この移植性により、仮想マシンは特定のハードウェアやOSに依存せず、一貫した動作を保証することができます。
次に、VMの中身を見ていきます。
上図は、プログラムの関数を実行するときに、VMの内部でどのような処理が行われているかを示しています。まず、プログラムのバイトコードから命令を読み取り、スタックやレジスタを使用して順次実行します。読み取った命令に従い、演算やmemoryやstorageへの読み書きを行います。stackベースのVMでは、基本的にデータをプッシュ(追加)およびポップ(取り出し)して操作します。一方、レジスタベースのVMでは、レジスタと呼ばれる高速な記憶領域を使用してデータを直接操作します。memoryは一時的なデータ保存に使用され、データの読み書きや演算が行われます。storageはプログラムの永続的なデータ保存に使用され、プログラムの状態の保存に使用されます。
すべての操作が完了し、ストレージが変更された場合、その新しい状態はシステム全体の状態として記録されます。VMによっては、この更新された状態をハッシュ化するなどして、システムの整合性やデータの一貫性を保証するための追加処理が行われます。
zkVM
VMの「移植性」が高いという特徴を活かして、異なるハードウェアを持つ各ノードでも同じ状態を一貫して出力することが可能です。これにより、計算結果の一貫性が確保され、さらに共通のゼロ知識証明のproof生成が可能になります。
上図は、zkVMで行われるゼロ知識証明の実装について簡単に説明しています。基本的には、VMの状態(state)が関数の実行によって正しく更新されているかをオペコードごとに確認し、その状態遷移の正当性を証明しています。
上図は、zkVMで行われるゼロ知識証明の実装について簡単に説明しています。基本的には、VMの状態(state)が関数の実行によって正しく更新されているかをオペコードごとに確認し、その状態遷移の正当性を証明しています。
このときに必要な制約が以下の通りです。
- バイトコードへの適切なアクセス: 適切なオペコードがコントラクトから正しくロードされたか
- input dataの正しい入力: 正しいinput dataが入力されているか
- オペコードの適切な実行: stack/memory/storageへの操作が正しく行われたか コーナーケースを考慮しているか エラー処理が行われているか
- stateの更新: storageへの読み書きの結果、stateを正しく更新できているか
このような制約を定めることで、仮想マシンの実行が正しいことをバイトコードレベルで証明することができます。従来はアプリケーションで必要なロジックごとにCircomやNoirといったDSL(Domain Specific Languate)を用いて実装していましたが、zkVMを使用することで、開発者は慣れ親しんだプログラミング言語で記述することができるようになります。その結果、DSLを用いたときに考慮しなければならなかった複雑な実装のルールを気にする必要がなくなります。
本レポートでは、ゼロ知識証明の概念や実際の流れについて解説していません。そのため、「ゼロ知識証明とは何か」や「実装におけるcircuitの役割、制約、実装のルール」を把握したい方は、以下のレポートを参照してください。
【関連レポート】
なぜzkVM
上図では、アプリケーションに必要なロジックに合わせて回路を実装するDSLと、仮想マシンそのものを回路に落とし込んで実装するzkVMとの比較を行っています。
Learning Curve(学習コスト): zkVMはRustやC++など、広く使われているプログラミング言語を用いて開発できます。一方で、DSLを用いた開発では、DSLの文法やデバックツール、高度な暗号技術、証明システム、代数学といった多岐にわたる知識を新たに学ぶ必要があるため、学習コストが高くなる傾向があります。
Generality(汎用性): DSLもzkVMもどのようなロジックに対しても実装が可能です。しかし、DSLはロジックごとに回路を個別に設計する必要があり、実装時に定められた制約を満たすような形でしか表現できないため、汎用性が制限されます。一方で、zkVMは回路の実装をRustやC++などの一般的なプログラミング言語で行えるため、幅広いロジックを比較的簡単に実装することができます。
Performance(パフォーマンス): DSLは特定のロジックごとに回路を実装するため、そのロジックに最適化された無駄のない効率的な回路を実装することができます。一方、zkVMは低レベルの命令自体を回路として実装しているため、場合によってはパフォーマンスが劣ることがあります。
このように比較すると、zkVMは開発者にとって学習コストが低く、ゼロ知識証明の実装ハードルを大きく下げることがわかります。しかし、zkVM自体の実装難易度が高く、さらにパフォーマンスの最適化には多くの時間と労力が必要である点も考慮しなければなりません。特に、zkVMのパフォーマンスがアプリケーションの要件を十分に満たすかどうかは、慎重に検討する必要があります。
zkVMの種類
zkVMは使用されている命令セットアーキテクチャ(ISA, Instruction Set Architecture)の種類によって分類することができます。まず、zkVMで使われる主要なISAを簡単に紹介します。
命令セットアーキテクチャ(ISA, Instruction Set Architecture)
各VMは異なる命令セットを使用します。命令セットは、仮想マシンが理解し、実行できる基本的な命令の集合です。例えば、以下のようなものがあります:
- WASM(WebAssembly): 主にWebブラウザやサーバーサイドで広く使用されるバイトコード形式です。WASM対応のzkVMは、WASMで書かれたプログラムを実行できます。
- RISC-V:オープンな命令セットアーキテクチャで、ハードウェアと密接に連携するアプリケーションで広く使用されています。RISC-V対応のzkVMは、このISAで書かれたプログラムを実行します。
- EVM bytecode:Ethereum Virtual Machine(EVM)のバイトコード形式で、スマートコントラクトの実行に特化しています。EVM対応のzkVMは、Ethereumスマートコントラクトを処理します。
- ZK-optimized instruction set:ゼロ知識証明に最適化された独自の命令セットです。これにより、ゼロ知識証明が効率的に行えるよう設計されたアーキテクチャが構築されています。
ISAが異なると、基本的なハードウェア動作や命令解釈が変わるため、それに適応する形でデータ構造やプログラム環境が設計されます。これにより、ISAごとに異なるデータ構造やプログラム環境が生み出されます。次に、それぞれのISAの特徴について詳しく見ていきましょう。
zkEVM
zkEVMは、スマートコントラクトの実行に特化したゼロ知識仮想マシンです。特に、Ethereumのスマートコントラクトをゼロ知識証明技術を用いて効率的かつ安全に実行できるように設計されています。zkEVMはEthereum仮想マシン(EVM)と互換性があり、既存のスマートコントラクトコードを大幅な変更なしに動作させることが可能です。
スマートコントラクトの状態を保持するためのMerkle Trieなどの構造が使われたり、スタックベースのVMが採用されています。
zkEVMの詳しい説明はこちらのレポートを参照してください。
【関連レポート】
RISC ZERO
RISC ZEROとは、RISC-Vという命令セットアーキテクチャ(ISA)の実行をゼロ知識証明を用いて証明するプロジェクトです。まずは、RISC-Vの概要について説明します。その後、RISC Zeroがどのように構築されているのかを見ていきましょう。
※免責事項:本レポートは、いかなる種類の法的または財政的な助言とみなされるものではありません。