zk-VMとは何ですか?

中級6/3/2024, 1:43:55 PM
ZKは、暗号化の普及への架け橋です。Web2でもWeb3でも、ゼロ知識証明(ZKP)を含むものはすべて計り知れない価値を生み出します。Litaチームは、ZKとzkVMの基本を紹介し、zkVM内のプロセスの概要を説明し、最後にzkVMを評価するための一連の標準を提案する、基礎科学の記事を執筆しました。

原題「A Zero Knowledge Paradigm: Part 1 - What is a zk-VM?」

1.ゼロ知識証明:入門書

ゼロ知識証明(ZKP)とは?

ゼロ知識証明 (ZKP) の予備知識がない場合、 Wired のこのビデオ では、わかりやすい例とデモンストレーションを使用して、5 つの難易度レベルで概念をインタラクティブに説明しています。強くお勧めします。

簡単に言うと、ZKPは、一方の当事者(証明者)が、それが何であるか、または追加情報を明らかにすることなく、別の当事者(検証者)に何かを知っていることを証明することを可能にします。より具体的には、ZKPは、データや入力を明らかにすることなく、データの一部に関する知識、または計算結果に関する知識を証明します。ゼロ知識証明を作成するプロセスには、計算の結果を、コードの実行が成功したことを証明し、後で検証できる無意味な情報に変換する一連の数学的モデルが含まれます。

場合によっては、代数的変換と暗号を複数回繰り返した後に構築される証明を検証するのにかかる作業は、計算を実行するのにかかる作業よりも少なくて済みます。このセキュリティとスケーラビリティのユニークな組み合わせが、ゼロ知識暗号を非常に強力なツールにしている理由です。

zkSNARKs: 知識のゼロ知識簡潔な非対話的議論

  • 初期(信頼できる、または信頼できない)セットアッププロセスに依存して、検証用のパラメータを確立します
  • 証明者と検証者の間に少なくとも1つの相互作用が必要
  • プルーフサイズが小さく、検証が容易
  • NARK ベースのプルーフは、zkSync、Scroll、Linea などのロールアップで使用されます

zkSTARKs: ゼロ知識スケーラブルで透明性のある知識の議論

  • 信頼できるセットアップは不要
  • 公的に検証可能なランダム性を利用してトラストレスな検証可能なシステムを構築することで、高い透明性を提供します。
  • 基礎となる証人(データ)のサイズが大きい場合でも、証明を高速に生成して検証できるため、非常にスケーラブルです
  • 証明者と検証者間の相互作用は不要
  • その代償として、STARKはより大きな証明を生成するため、SNARKよりも検証が難しくなる可能性があります
  • 証明は、一部のzkSNARK証明よりも検証が困難ですが、他の証明ほど難しくはありません
  • STARKは、Starknetだけでなく、Lita、Risc Zero、Succinct LabsなどのzkVMでも使用されています

(注:Succinct のブリッジは SNARK を使用しますが、SP1 は STARK ベースのプロトコルです)

すべてのSTARKはSNARKですが、すべてのSNARKがSTARKであるわけではないことは注目に値します。

SNARKとSTARKの一般的な理解を深めるには、AxiomYan Zhang氏とYi Sun氏が執筆した@krzhang/privacy-in-cryptocurrencies-zero-knowledge-and-zk-snarks-1-2-68ce1838fd9c>記事シリーズと、Ventali Tan氏のgithubにあるこの記事集を読むことをお勧めします。

2. zkVMとは何ですか?

仮想マシン (VM) は、プログラムを実行するプログラムです。文脈上、zkVMは、ゼロ知識証明を生成するためのシステム、または任意のプログラムまたは計算のZKPを生成するためのユニバーサル回路またはツールとして実装される仮想コンピューターです。

zkVMは、ZKの設計とコーディングのための複雑な数学と暗号化を学ぶ必要性を排除し、開発者が好みの言語で記述されたプログラムを実行してZKPを生成することを可能にし、ゼロ知識での統合と対話をはるかに簡単にします。大まかに言うと、zkVMへのほとんどの参照には、仮想マシン自体だけでなく、プログラムを実行する仮想マシンに追加されたコンパイラツールチェーンと証明システムが暗黙的に含まれます。以下に、zkVMの主なコンポーネントとその機能をまとめます。

zkVMの主要コンポーネント

各コンポーネントの設計と実装は、証明(SNARKまたはSTARK)の選択とzkVMの命令セットアーキテクチャ(ISA)によって制御されます。従来、ISAはCPUの能力(データ型、レジスタ、メモリなど)と、CPUがプログラムを実行するときに実行する一連のアクションを指定します。コンテキストでは、ISA は VM によって解釈および実行可能なマシン コードを決定します。ISAを選択することで、zkVMのアクセシビリティと使いやすさ、および証明生成プロセスの速度と効率に根本的な違いが生じる可能性があり、zkVMの構築を支えます。

以下は、参考までに zkVM とそのコンポーネントの例です。


zkVMとそのコンポーネント

今のところは、各コンポーネント間の相互作用に大まかなレベルで焦点を当て、代数的および暗号化プロセスと、zkVMの設計上のトレードオフを理解するためのフレームワークを提供します。

3. 抽象化されたzkVMプロセスフロー

次の図は、zkVMの抽象化および一般化されたプロセスフローチャートであり、zkVMのコンポーネント間を移動するプログラムの形式(入力/出力)間で分割および分類されています。今後の記事で各プロセスについて詳しく説明します。


zkVM の一般的なフロー

zkVMのプロセスフローは、一般的に以下の通りです。

  • コンパイラー・ステージ
  1. コンパイラはまず、従来の言語(C、C++、Rust、Solidity)で書かれたプログラムをマシンコードにコンパイルします。マシン・コードのフォーマットは、ISA の選択によって決定されます。
  • VM ステージ
  1. VMはマシン・コードを実行し、基礎となるプログラムの一連のステップである実行トレースを生成します。この形式は、算術化の選択と多項式制約のセットによって事前に決定されます。一般的な算術化スキームには、Groth16 の R1CS、halo2PLONKish 算術化plonky2plonky3 の AIR などがあります。
  • プルーバーステージ
  1. 証明者はトレースを受け取り、それを一連の制約に束縛された多項式の集合として表現し、基本的に事実を数学的にマッピングすることによって計算を代数に変換します。

  2. 証明者は、多項式コミットメントスキーム(PCS)を使用してこれらの多項式にコミットします。コミットメントスキームは、証明者がXへのコミットメントと呼ばれるデータXのフィンガープリントを作成し、後でXへのコミットメントを使用してXを明らかにすることなくXに関する事実を証明できるようにするプロトコルです。PCSは指紋です。計算の制約の「前処理された」簡潔なバージョン。これにより、証明者は、次の手順で検証者によって提案された乱数値を使用して、多項式で表される計算に関する事実を証明できます。

  3. 証明者は、多項式インタラクティブ Oracle Proof (PIOP) を実行して、コミットされた多項式が指定された制約を満たす実行トレースを表すことを示します。PIOPは、証明者が多項式にコミットメントを送信し、検証者がランダムなフィールド値で応答し、証明者がこれらのランダム値で多項式の評価を提供する一連のラウンドで構成されるインタラクティブな証明プロトコルであり、確率的に検証者を説得するためにランダム値を使用して多項式方程式を「解く」のに似ています。

  4. フィアット・シャミールのヒューリスティックを適用する。証明者はPIOPを非対話モードで実行し、検証者の動作は疑似ランダムチャレンジポイントの送信に限定されます。暗号化では、フィアット・シャミア・ヒューリスティックは、インタラクティブな知識証明を検証用のデジタル署名に変換します。このステップでは、証明を暗号化し、ゼロ知識にします。

  5. 証明者は、検証者に送った多項式コミットメントに関して、主張された多項式評価が正しいことを検証者に納得させる必要があります。これを行うために、証明者は、多項式コミットメントスキーム(フィンガープリント)によって提供される「評価」または「開始」証明を生成します。

  • 検証者ステージ
  1. 検証者は、制約またはコミットメントのいずれかを使用して、証明システムの検証プロトコルに従って証明をチェックします。検証者は、証明の妥当性に応じて、結果を受け入れるか拒否するかを決定します。

要約すると、zkVMの証明は、与えられたプログラム、与えられた結果、与えられた初期条件に対して、与えられた初期条件から実行されたときにプログラムが与えられた結果を生成する原因となる何らかの入力があることを証明します。このステートメントをプロセスフローと組み合わせると、zkVMの次の説明にたどり着くことができます。

zkVM証明は、特定のVMプログラムと特定の出力に対して、特定のプログラムがVM上で実行されたときに特定の出力を生成する何らかの入力があることを証明します。

4. zkVMの評価

zkVMを評価する基準は何ですか?言い換えれば、あるzkVMが他のzkVMよりも優れていると言うのはどのような場合でしょうか?正直なところ、答えはユースケースによって異なります。

Litaの市場調査によると、ほとんどの商用ユースケースでは、速度、効率、簡潔さのうち、アプリケーションに応じて、速度またはコアタイムの効率のいずれかが最も重要な特性です。一部のアプリケーションは価格に敏感であり、低エネルギー消費と証明における資本の使用が少ないように最適化する必要があります。これらの場合、コアタイムの効率は、おそらく最適化すべき最も重要な指標です。他のアプリケーション、特に金融や取引関連のアプリケーションは、遅延の影響を受けやすく、速度を最適化する必要があります。

公表されているパフォーマンスの比較のほとんどは、速度のみに焦点を当てていますが、これは重要ですが、パフォーマンスの全体的な測定ではありません。また、zkVM の信頼性を測定する重要なプロパティもいくつかあります。そのほとんどは、市場をリードする既存企業であっても、生産準備が整った基準に達していません。

zkVMは、次の基準で評価し、2つのサブセットに分けて評価することを提案します。


zk-VMを評価するための主な基準

ベースライン: zkVM の信頼性を測定します

  • 正確性
  • 安全
  • 信頼の前提条件

パフォーマンス:zkVMの機能を測定

  • 効率
  • 速度
  • 簡潔さ

4.1 ベースライン: 正確性、セキュリティ、および信頼性の仮定

ミッションクリティカルなアプリケーションのためにzkVMを評価する場合、正確性とセキュリティをベースラインとして考慮する必要があります。その正確性に確信を持てる十分な理由と、十分に強力な主張されたセキュリティが必要です。また、信頼の前提は、アプリケーションに対して十分に弱いものでなければなりません。

これらのプロパティがないと、zkVMは指定されたとおりに実行できず、ユーザーがハッキングやエクスプロイトにさらされる可能性があるため、アプリケーションにとって役に立たないどころか悪化する可能性があります。

i. 正確性

  • VM は、意図したとおりに計算を実行する必要があります
  • 証明システムは、要求されたセキュリティ特性を満たす必要があります

正確性は、次の 3 つのプロパティで構成されます。

  • 健全性:証明システムは真実であり、したがって、証明するものはすべて真実です。検証者は虚偽の陳述の証拠を拒否します。計算の結果は、入力が実際に結果を生成する場合にのみ受け入れます。
  • 完全性:証明システムは完全であり、すべての真のステートメントを証明できます。証明者が計算結果を証明できると主張する場合、検証者が受け入れる証明を生成できなければなりません。
  • ゼロ知識:証明を持っていても、結果自体を知っているよりも、計算の入力について何も明らかになりません

健全さがなくても完全性を持つことができます。証明システムが虚偽を含むすべてを証明するのであれば、それは明らかに完全ですが、健全ではありません。逆に、完全性がなくても健全性を持つことができます。証明システムがプログラムの存在を証明しても、計算を証明できない場合、それは明らかに健全ですが(結局のところ、それはいかなる虚偽も証明しません)、完全ではありません。

ii. セキュリティ

  • 健全性、完全性、およびゼロ知識の許容範囲に関連しています

実際には、3 つの正確性プロパティはすべて 0 以外の許容誤差を持ちます。これは、すべての証明が正しさの統計的確率であり、絶対的な確実性ではないことを意味します。許容誤差とは、1 つのプロパティが失敗する最大許容確率を指します。もちろん、ゼロトレランスが理想的ですが、実際には、zkVMはこれらすべてのプロパティでゼロトレランスを達成しているわけではありません。完全な健全性と完全性は簡潔さと相容れないようであり、完全なゼロ知識を達成するための既知の方法はありません。セキュリティを測定する一般的な方法は、セキュリティのビット数で測定する方法であり、1 / (2^n) の許容誤差は n ビットのセキュリティと呼ばれます。セキュリティは多ければ多いほど良いです。

zkVMが完全に正しい場合、それは必ずしも信頼できることを意味するわけではありません。正確性は、zkVMが主張された許容範囲までセキュリティプロパティを満たしていることを意味するだけです。これは、主張されている公差が市場に出回るほど低いことを意味するものではありません。また、zkVMが十分に安全であっても、それが正しいことを意味するものではありません。保証とは、実際に達成された公差ではなく、主張された公差を指します。zkVMが完全に正確で、十分に安全である場合にのみ、zkVMは主張された許容範囲まで信頼できると言えます。

iii. 信頼の前提

  • zkVMが確実に機能するという結論に達するための証明者と検証者の誠実さに関する仮定

zkVM に信頼の前提がある場合、これは通常、信頼されたセットアップ プロセスの形式を取ります。ZKプルーフシステムのセットアッププロセスは、プルーフシステムを使用して最初のプルーフが生成される前に、「セットアップデータ」と呼ばれる情報を生成するために1回実行されます。信頼できるセットアッププロセスでは、1 人または複数の個人がセットアップ データに組み込まれるランダム性を生成し、それらの個人の少なくとも 1 人がセットアップ データに組み込んだランダム性を削除したと仮定する必要があります。

実際には、2 つの一般的な信頼の前提モデルがあります。

正直な多数決の仮定では、あるN人の個人のうち、N/2人以上が、ブロックチェーンで一般的に使用されるシステムとの特定の相互作用において完全性を示したとされています

「N 人中 1 人」の信頼の仮定は、N 人の個人のうち、少なくとも 1 人が、MPC ベースのツールやアプリケーションで一般的に使用されるシステムとの特定の相互作用において整合性を示したことを示します。

一般的には、他の条件がすべて同じであれば、信頼の前提のない zkVM は、信頼の前提を必要とする zkVM よりも安全であると考えられています。

4.2 zkVMのトリレンマ:zkVMの速度、効率、簡潔さのバランス


zkVMのトリレンマ:スピード、効率、簡潔さ

速度、効率、簡潔さは、すべてスライディングスケールのプロパティです。これらすべての要因が、zkVM のエンド ユーザー コストに寄与します。評価でどのように重み付けするかは、アプリケーションによって異なります。多くの場合、最速のソリューションは、最も効率的でも簡潔でもありません。最も簡潔な解決策は、最速でも最も効率的でもありません。などなど。関係を説明する前に、まず各プロパティを定義しましょう

i. スピード

  • 証明者が証明をどれだけ早く生成できるか
  • 計算の開始から終了までの経過時間である実時間で測定されます

速度は、定量的に評価できるように、特定のテストプログラム、入力、およびシステムに対して定義および測定する必要があります。このメトリクスは、配達確認の迅速な可用性が不可欠であるが、オーバーヘッドが高く、配達確認サイズが大きくなる、レイテンシーの影響を受けやすいアプリケーションにとって重要です

ii. 効率性

  • 証明者が消費する資源、少ないほど好ましい
  • プログラムコードによって費やされたコンピュータ時間であるユーザー時間で概算できます

証明者は、コアタイムとスペースの2種類のリソースを消費します。したがって、効率はコアタイム効率とスペース効率に細分化できます。

Core-Time Efficiency: すべてのコアで証明機が動作する平均時間に、証明機を実行しているコアの数を掛けた値。シングルコア証明機の場合、コアタイムの消費と速度は同じものです。マルチコアシステム上でマルチコアモードで動作するマルチコア対応の証明者の場合、コア時間の消費と速度は同じものではありません。プログラムが 5 つのコアまたはスレッドを 5 秒間フルに利用した場合、25 秒のユーザー時間と 5 秒の実時間になります。

スペース効率:RAMなど、使用されるストレージ容量を指します

ユーザー時間は、計算の実行によって消費されるエネルギーのプロキシとして興味深いものです。すべてのコアがほぼ常に完全に使用されている状況では、CPU のエネルギー消費は比較的一定に保たれます。この状況では、CPU バウンドの、主にユーザー モードのコード実行に費やされるユーザー時間は、そのコード実行によって消費されるワット時 (つまり、エネルギー) の数にほぼ直線的に比例する必要があります。

エネルギー消費、つまりコンピューティング リソースの使用に関する節約は、証明のためのエネルギー料金 (またはクラウド コンピューティング料金) がかなりの運用コストになるほどの規模を持つ実証操作の観点から興味深いものです。これらの理由から、ユーザー時間は興味深い指標です。証明コストが低いため、サービスプロバイダーはコストに敏感な顧客に低い証明価格を転嫁できます。

どちらの種類の効率も、証明プロセスのエネルギー消費と、証明プロセスで使用される資本の量に関連しており、これは証明の財務コストに関連しています。測定効率の定義を運用するには、1つ以上のテストプログラム、それらの各プログラムへの1つ以上のテスト入力、および1つ以上のテストシステムに対して定義を行う必要があります。

iii. 簡潔さ

  • 生成される証明のサイズと検証の複雑さ

簡潔さは、3つの異なる指標の複合であり、証明検証の複雑さはさらに細分化されています。

  • 配達確認サイズ:配達確認の物理的なサイズで、通常はキロバイト単位で測定されます
  • 証明検証時間: 証明の検証に必要な期間。
  • プルーフ検証スペース:プルーフ検証中のメモリ使用量

通常、検証はシングルコア操作であるため、このコンテキストでは速度とコア時間の効率は一般的に同等です。速度と効率と同様に、簡潔さの定義を運用するには、テストプログラム、テスト入力、およびテストシステムのセットを指定する必要があります。

各パフォーマンス プロパティを定義したら、1 つのプロパティを他のプロパティよりも最適化した場合のわずかな効果を示します。

  • スピード:プルーフの生成が速いほどプルーフサイズは大きくなりますが、プルーフの検証は遅くなります。証明を生成するためにより多くのリソースが消費され、効率が低下します
  • 簡潔さ:証明者は証明を圧縮するのにより多くの時間を必要とします。しかし、証明の検証は高速です。証明が簡潔であればあるほど、計算のオーバーヘッドは大きくなります
  • 効率性:リソース使用量を最小限に抑えると、証明の生成速度と証明の簡潔さが低下します

一般に、ある品質に最適化するということは、別の品質に最適化しないことを意味するため、ケースバイケースで最適解を選択するには、多次元分析が必要です。

評価でこれらのプロパティに重みを付ける良い方法は、各プロパティの許容レベルを定義し、どのプロパティが最も重要であるかを判断することです。最も重要なプロパティは、他のすべてのプロパティで十分なレベルを維持することを条件として、最適化する必要があります。

以下に、各プロパティとその主な考慮事項をまとめます。


zkVMの評価プロパティ

5. 次のステップ

上記の表で、シリーズの最初の記事を締めくくります。次の記事では、上記のフローチャートに基づいて、zkVMの一般的な算術および暗号化プロセスについて説明します。

これが役に立った場合は、当社の Webサイトgitbook にアクセスして、Litaで構築しているものの詳細を確認してください。

また、 XDiscord でフォローして最新情報を入手し、シリーズの残りの部分を見逃さないようにしてください

免責事項:

  1. この記事は[lita]からの転載です。 原題「ゼロ知識パラダイム:パート1 - zk-VMとは?」を転送します。すべての著作権は原作者[リタチーム]に帰属します。この転載に異議がある場合は、 Gate Learn チームに連絡していただければ、迅速に対応いたします。
  2. 免責事項:この記事で表明された見解や意見は、著者のものであり、投資アドバイスを構成するものではありません。
  3. 記事の他言語への翻訳は、Gate Learnチームによって行われます。特に明記されていない限り、翻訳された記事を複製、配布、盗用することは禁止されています。

zk-VMとは何ですか?

中級6/3/2024, 1:43:55 PM
ZKは、暗号化の普及への架け橋です。Web2でもWeb3でも、ゼロ知識証明(ZKP)を含むものはすべて計り知れない価値を生み出します。Litaチームは、ZKとzkVMの基本を紹介し、zkVM内のプロセスの概要を説明し、最後にzkVMを評価するための一連の標準を提案する、基礎科学の記事を執筆しました。

原題「A Zero Knowledge Paradigm: Part 1 - What is a zk-VM?」

1.ゼロ知識証明:入門書

ゼロ知識証明(ZKP)とは?

ゼロ知識証明 (ZKP) の予備知識がない場合、 Wired のこのビデオ では、わかりやすい例とデモンストレーションを使用して、5 つの難易度レベルで概念をインタラクティブに説明しています。強くお勧めします。

簡単に言うと、ZKPは、一方の当事者(証明者)が、それが何であるか、または追加情報を明らかにすることなく、別の当事者(検証者)に何かを知っていることを証明することを可能にします。より具体的には、ZKPは、データや入力を明らかにすることなく、データの一部に関する知識、または計算結果に関する知識を証明します。ゼロ知識証明を作成するプロセスには、計算の結果を、コードの実行が成功したことを証明し、後で検証できる無意味な情報に変換する一連の数学的モデルが含まれます。

場合によっては、代数的変換と暗号を複数回繰り返した後に構築される証明を検証するのにかかる作業は、計算を実行するのにかかる作業よりも少なくて済みます。このセキュリティとスケーラビリティのユニークな組み合わせが、ゼロ知識暗号を非常に強力なツールにしている理由です。

zkSNARKs: 知識のゼロ知識簡潔な非対話的議論

  • 初期(信頼できる、または信頼できない)セットアッププロセスに依存して、検証用のパラメータを確立します
  • 証明者と検証者の間に少なくとも1つの相互作用が必要
  • プルーフサイズが小さく、検証が容易
  • NARK ベースのプルーフは、zkSync、Scroll、Linea などのロールアップで使用されます

zkSTARKs: ゼロ知識スケーラブルで透明性のある知識の議論

  • 信頼できるセットアップは不要
  • 公的に検証可能なランダム性を利用してトラストレスな検証可能なシステムを構築することで、高い透明性を提供します。
  • 基礎となる証人(データ)のサイズが大きい場合でも、証明を高速に生成して検証できるため、非常にスケーラブルです
  • 証明者と検証者間の相互作用は不要
  • その代償として、STARKはより大きな証明を生成するため、SNARKよりも検証が難しくなる可能性があります
  • 証明は、一部のzkSNARK証明よりも検証が困難ですが、他の証明ほど難しくはありません
  • STARKは、Starknetだけでなく、Lita、Risc Zero、Succinct LabsなどのzkVMでも使用されています

(注:Succinct のブリッジは SNARK を使用しますが、SP1 は STARK ベースのプロトコルです)

すべてのSTARKはSNARKですが、すべてのSNARKがSTARKであるわけではないことは注目に値します。

SNARKとSTARKの一般的な理解を深めるには、AxiomYan Zhang氏とYi Sun氏が執筆した@krzhang/privacy-in-cryptocurrencies-zero-knowledge-and-zk-snarks-1-2-68ce1838fd9c>記事シリーズと、Ventali Tan氏のgithubにあるこの記事集を読むことをお勧めします。

2. zkVMとは何ですか?

仮想マシン (VM) は、プログラムを実行するプログラムです。文脈上、zkVMは、ゼロ知識証明を生成するためのシステム、または任意のプログラムまたは計算のZKPを生成するためのユニバーサル回路またはツールとして実装される仮想コンピューターです。

zkVMは、ZKの設計とコーディングのための複雑な数学と暗号化を学ぶ必要性を排除し、開発者が好みの言語で記述されたプログラムを実行してZKPを生成することを可能にし、ゼロ知識での統合と対話をはるかに簡単にします。大まかに言うと、zkVMへのほとんどの参照には、仮想マシン自体だけでなく、プログラムを実行する仮想マシンに追加されたコンパイラツールチェーンと証明システムが暗黙的に含まれます。以下に、zkVMの主なコンポーネントとその機能をまとめます。

zkVMの主要コンポーネント

各コンポーネントの設計と実装は、証明(SNARKまたはSTARK)の選択とzkVMの命令セットアーキテクチャ(ISA)によって制御されます。従来、ISAはCPUの能力(データ型、レジスタ、メモリなど)と、CPUがプログラムを実行するときに実行する一連のアクションを指定します。コンテキストでは、ISA は VM によって解釈および実行可能なマシン コードを決定します。ISAを選択することで、zkVMのアクセシビリティと使いやすさ、および証明生成プロセスの速度と効率に根本的な違いが生じる可能性があり、zkVMの構築を支えます。

以下は、参考までに zkVM とそのコンポーネントの例です。


zkVMとそのコンポーネント

今のところは、各コンポーネント間の相互作用に大まかなレベルで焦点を当て、代数的および暗号化プロセスと、zkVMの設計上のトレードオフを理解するためのフレームワークを提供します。

3. 抽象化されたzkVMプロセスフロー

次の図は、zkVMの抽象化および一般化されたプロセスフローチャートであり、zkVMのコンポーネント間を移動するプログラムの形式(入力/出力)間で分割および分類されています。今後の記事で各プロセスについて詳しく説明します。


zkVM の一般的なフロー

zkVMのプロセスフローは、一般的に以下の通りです。

  • コンパイラー・ステージ
  1. コンパイラはまず、従来の言語(C、C++、Rust、Solidity)で書かれたプログラムをマシンコードにコンパイルします。マシン・コードのフォーマットは、ISA の選択によって決定されます。
  • VM ステージ
  1. VMはマシン・コードを実行し、基礎となるプログラムの一連のステップである実行トレースを生成します。この形式は、算術化の選択と多項式制約のセットによって事前に決定されます。一般的な算術化スキームには、Groth16 の R1CS、halo2PLONKish 算術化plonky2plonky3 の AIR などがあります。
  • プルーバーステージ
  1. 証明者はトレースを受け取り、それを一連の制約に束縛された多項式の集合として表現し、基本的に事実を数学的にマッピングすることによって計算を代数に変換します。

  2. 証明者は、多項式コミットメントスキーム(PCS)を使用してこれらの多項式にコミットします。コミットメントスキームは、証明者がXへのコミットメントと呼ばれるデータXのフィンガープリントを作成し、後でXへのコミットメントを使用してXを明らかにすることなくXに関する事実を証明できるようにするプロトコルです。PCSは指紋です。計算の制約の「前処理された」簡潔なバージョン。これにより、証明者は、次の手順で検証者によって提案された乱数値を使用して、多項式で表される計算に関する事実を証明できます。

  3. 証明者は、多項式インタラクティブ Oracle Proof (PIOP) を実行して、コミットされた多項式が指定された制約を満たす実行トレースを表すことを示します。PIOPは、証明者が多項式にコミットメントを送信し、検証者がランダムなフィールド値で応答し、証明者がこれらのランダム値で多項式の評価を提供する一連のラウンドで構成されるインタラクティブな証明プロトコルであり、確率的に検証者を説得するためにランダム値を使用して多項式方程式を「解く」のに似ています。

  4. フィアット・シャミールのヒューリスティックを適用する。証明者はPIOPを非対話モードで実行し、検証者の動作は疑似ランダムチャレンジポイントの送信に限定されます。暗号化では、フィアット・シャミア・ヒューリスティックは、インタラクティブな知識証明を検証用のデジタル署名に変換します。このステップでは、証明を暗号化し、ゼロ知識にします。

  5. 証明者は、検証者に送った多項式コミットメントに関して、主張された多項式評価が正しいことを検証者に納得させる必要があります。これを行うために、証明者は、多項式コミットメントスキーム(フィンガープリント)によって提供される「評価」または「開始」証明を生成します。

  • 検証者ステージ
  1. 検証者は、制約またはコミットメントのいずれかを使用して、証明システムの検証プロトコルに従って証明をチェックします。検証者は、証明の妥当性に応じて、結果を受け入れるか拒否するかを決定します。

要約すると、zkVMの証明は、与えられたプログラム、与えられた結果、与えられた初期条件に対して、与えられた初期条件から実行されたときにプログラムが与えられた結果を生成する原因となる何らかの入力があることを証明します。このステートメントをプロセスフローと組み合わせると、zkVMの次の説明にたどり着くことができます。

zkVM証明は、特定のVMプログラムと特定の出力に対して、特定のプログラムがVM上で実行されたときに特定の出力を生成する何らかの入力があることを証明します。

4. zkVMの評価

zkVMを評価する基準は何ですか?言い換えれば、あるzkVMが他のzkVMよりも優れていると言うのはどのような場合でしょうか?正直なところ、答えはユースケースによって異なります。

Litaの市場調査によると、ほとんどの商用ユースケースでは、速度、効率、簡潔さのうち、アプリケーションに応じて、速度またはコアタイムの効率のいずれかが最も重要な特性です。一部のアプリケーションは価格に敏感であり、低エネルギー消費と証明における資本の使用が少ないように最適化する必要があります。これらの場合、コアタイムの効率は、おそらく最適化すべき最も重要な指標です。他のアプリケーション、特に金融や取引関連のアプリケーションは、遅延の影響を受けやすく、速度を最適化する必要があります。

公表されているパフォーマンスの比較のほとんどは、速度のみに焦点を当てていますが、これは重要ですが、パフォーマンスの全体的な測定ではありません。また、zkVM の信頼性を測定する重要なプロパティもいくつかあります。そのほとんどは、市場をリードする既存企業であっても、生産準備が整った基準に達していません。

zkVMは、次の基準で評価し、2つのサブセットに分けて評価することを提案します。


zk-VMを評価するための主な基準

ベースライン: zkVM の信頼性を測定します

  • 正確性
  • 安全
  • 信頼の前提条件

パフォーマンス:zkVMの機能を測定

  • 効率
  • 速度
  • 簡潔さ

4.1 ベースライン: 正確性、セキュリティ、および信頼性の仮定

ミッションクリティカルなアプリケーションのためにzkVMを評価する場合、正確性とセキュリティをベースラインとして考慮する必要があります。その正確性に確信を持てる十分な理由と、十分に強力な主張されたセキュリティが必要です。また、信頼の前提は、アプリケーションに対して十分に弱いものでなければなりません。

これらのプロパティがないと、zkVMは指定されたとおりに実行できず、ユーザーがハッキングやエクスプロイトにさらされる可能性があるため、アプリケーションにとって役に立たないどころか悪化する可能性があります。

i. 正確性

  • VM は、意図したとおりに計算を実行する必要があります
  • 証明システムは、要求されたセキュリティ特性を満たす必要があります

正確性は、次の 3 つのプロパティで構成されます。

  • 健全性:証明システムは真実であり、したがって、証明するものはすべて真実です。検証者は虚偽の陳述の証拠を拒否します。計算の結果は、入力が実際に結果を生成する場合にのみ受け入れます。
  • 完全性:証明システムは完全であり、すべての真のステートメントを証明できます。証明者が計算結果を証明できると主張する場合、検証者が受け入れる証明を生成できなければなりません。
  • ゼロ知識:証明を持っていても、結果自体を知っているよりも、計算の入力について何も明らかになりません

健全さがなくても完全性を持つことができます。証明システムが虚偽を含むすべてを証明するのであれば、それは明らかに完全ですが、健全ではありません。逆に、完全性がなくても健全性を持つことができます。証明システムがプログラムの存在を証明しても、計算を証明できない場合、それは明らかに健全ですが(結局のところ、それはいかなる虚偽も証明しません)、完全ではありません。

ii. セキュリティ

  • 健全性、完全性、およびゼロ知識の許容範囲に関連しています

実際には、3 つの正確性プロパティはすべて 0 以外の許容誤差を持ちます。これは、すべての証明が正しさの統計的確率であり、絶対的な確実性ではないことを意味します。許容誤差とは、1 つのプロパティが失敗する最大許容確率を指します。もちろん、ゼロトレランスが理想的ですが、実際には、zkVMはこれらすべてのプロパティでゼロトレランスを達成しているわけではありません。完全な健全性と完全性は簡潔さと相容れないようであり、完全なゼロ知識を達成するための既知の方法はありません。セキュリティを測定する一般的な方法は、セキュリティのビット数で測定する方法であり、1 / (2^n) の許容誤差は n ビットのセキュリティと呼ばれます。セキュリティは多ければ多いほど良いです。

zkVMが完全に正しい場合、それは必ずしも信頼できることを意味するわけではありません。正確性は、zkVMが主張された許容範囲までセキュリティプロパティを満たしていることを意味するだけです。これは、主張されている公差が市場に出回るほど低いことを意味するものではありません。また、zkVMが十分に安全であっても、それが正しいことを意味するものではありません。保証とは、実際に達成された公差ではなく、主張された公差を指します。zkVMが完全に正確で、十分に安全である場合にのみ、zkVMは主張された許容範囲まで信頼できると言えます。

iii. 信頼の前提

  • zkVMが確実に機能するという結論に達するための証明者と検証者の誠実さに関する仮定

zkVM に信頼の前提がある場合、これは通常、信頼されたセットアップ プロセスの形式を取ります。ZKプルーフシステムのセットアッププロセスは、プルーフシステムを使用して最初のプルーフが生成される前に、「セットアップデータ」と呼ばれる情報を生成するために1回実行されます。信頼できるセットアッププロセスでは、1 人または複数の個人がセットアップ データに組み込まれるランダム性を生成し、それらの個人の少なくとも 1 人がセットアップ データに組み込んだランダム性を削除したと仮定する必要があります。

実際には、2 つの一般的な信頼の前提モデルがあります。

正直な多数決の仮定では、あるN人の個人のうち、N/2人以上が、ブロックチェーンで一般的に使用されるシステムとの特定の相互作用において完全性を示したとされています

「N 人中 1 人」の信頼の仮定は、N 人の個人のうち、少なくとも 1 人が、MPC ベースのツールやアプリケーションで一般的に使用されるシステムとの特定の相互作用において整合性を示したことを示します。

一般的には、他の条件がすべて同じであれば、信頼の前提のない zkVM は、信頼の前提を必要とする zkVM よりも安全であると考えられています。

4.2 zkVMのトリレンマ:zkVMの速度、効率、簡潔さのバランス


zkVMのトリレンマ:スピード、効率、簡潔さ

速度、効率、簡潔さは、すべてスライディングスケールのプロパティです。これらすべての要因が、zkVM のエンド ユーザー コストに寄与します。評価でどのように重み付けするかは、アプリケーションによって異なります。多くの場合、最速のソリューションは、最も効率的でも簡潔でもありません。最も簡潔な解決策は、最速でも最も効率的でもありません。などなど。関係を説明する前に、まず各プロパティを定義しましょう

i. スピード

  • 証明者が証明をどれだけ早く生成できるか
  • 計算の開始から終了までの経過時間である実時間で測定されます

速度は、定量的に評価できるように、特定のテストプログラム、入力、およびシステムに対して定義および測定する必要があります。このメトリクスは、配達確認の迅速な可用性が不可欠であるが、オーバーヘッドが高く、配達確認サイズが大きくなる、レイテンシーの影響を受けやすいアプリケーションにとって重要です

ii. 効率性

  • 証明者が消費する資源、少ないほど好ましい
  • プログラムコードによって費やされたコンピュータ時間であるユーザー時間で概算できます

証明者は、コアタイムとスペースの2種類のリソースを消費します。したがって、効率はコアタイム効率とスペース効率に細分化できます。

Core-Time Efficiency: すべてのコアで証明機が動作する平均時間に、証明機を実行しているコアの数を掛けた値。シングルコア証明機の場合、コアタイムの消費と速度は同じものです。マルチコアシステム上でマルチコアモードで動作するマルチコア対応の証明者の場合、コア時間の消費と速度は同じものではありません。プログラムが 5 つのコアまたはスレッドを 5 秒間フルに利用した場合、25 秒のユーザー時間と 5 秒の実時間になります。

スペース効率:RAMなど、使用されるストレージ容量を指します

ユーザー時間は、計算の実行によって消費されるエネルギーのプロキシとして興味深いものです。すべてのコアがほぼ常に完全に使用されている状況では、CPU のエネルギー消費は比較的一定に保たれます。この状況では、CPU バウンドの、主にユーザー モードのコード実行に費やされるユーザー時間は、そのコード実行によって消費されるワット時 (つまり、エネルギー) の数にほぼ直線的に比例する必要があります。

エネルギー消費、つまりコンピューティング リソースの使用に関する節約は、証明のためのエネルギー料金 (またはクラウド コンピューティング料金) がかなりの運用コストになるほどの規模を持つ実証操作の観点から興味深いものです。これらの理由から、ユーザー時間は興味深い指標です。証明コストが低いため、サービスプロバイダーはコストに敏感な顧客に低い証明価格を転嫁できます。

どちらの種類の効率も、証明プロセスのエネルギー消費と、証明プロセスで使用される資本の量に関連しており、これは証明の財務コストに関連しています。測定効率の定義を運用するには、1つ以上のテストプログラム、それらの各プログラムへの1つ以上のテスト入力、および1つ以上のテストシステムに対して定義を行う必要があります。

iii. 簡潔さ

  • 生成される証明のサイズと検証の複雑さ

簡潔さは、3つの異なる指標の複合であり、証明検証の複雑さはさらに細分化されています。

  • 配達確認サイズ:配達確認の物理的なサイズで、通常はキロバイト単位で測定されます
  • 証明検証時間: 証明の検証に必要な期間。
  • プルーフ検証スペース:プルーフ検証中のメモリ使用量

通常、検証はシングルコア操作であるため、このコンテキストでは速度とコア時間の効率は一般的に同等です。速度と効率と同様に、簡潔さの定義を運用するには、テストプログラム、テスト入力、およびテストシステムのセットを指定する必要があります。

各パフォーマンス プロパティを定義したら、1 つのプロパティを他のプロパティよりも最適化した場合のわずかな効果を示します。

  • スピード:プルーフの生成が速いほどプルーフサイズは大きくなりますが、プルーフの検証は遅くなります。証明を生成するためにより多くのリソースが消費され、効率が低下します
  • 簡潔さ:証明者は証明を圧縮するのにより多くの時間を必要とします。しかし、証明の検証は高速です。証明が簡潔であればあるほど、計算のオーバーヘッドは大きくなります
  • 効率性:リソース使用量を最小限に抑えると、証明の生成速度と証明の簡潔さが低下します

一般に、ある品質に最適化するということは、別の品質に最適化しないことを意味するため、ケースバイケースで最適解を選択するには、多次元分析が必要です。

評価でこれらのプロパティに重みを付ける良い方法は、各プロパティの許容レベルを定義し、どのプロパティが最も重要であるかを判断することです。最も重要なプロパティは、他のすべてのプロパティで十分なレベルを維持することを条件として、最適化する必要があります。

以下に、各プロパティとその主な考慮事項をまとめます。


zkVMの評価プロパティ

5. 次のステップ

上記の表で、シリーズの最初の記事を締めくくります。次の記事では、上記のフローチャートに基づいて、zkVMの一般的な算術および暗号化プロセスについて説明します。

これが役に立った場合は、当社の Webサイトgitbook にアクセスして、Litaで構築しているものの詳細を確認してください。

また、 XDiscord でフォローして最新情報を入手し、シリーズの残りの部分を見逃さないようにしてください

免責事項:

  1. この記事は[lita]からの転載です。 原題「ゼロ知識パラダイム:パート1 - zk-VMとは?」を転送します。すべての著作権は原作者[リタチーム]に帰属します。この転載に異議がある場合は、 Gate Learn チームに連絡していただければ、迅速に対応いたします。
  2. 免責事項:この記事で表明された見解や意見は、著者のものであり、投資アドバイスを構成するものではありません。
  3. 記事の他言語への翻訳は、Gate Learnチームによって行われます。特に明記されていない限り、翻訳された記事を複製、配布、盗用することは禁止されています。
今すぐ始める
登録して、
$100
のボーナスを獲得しよう!