ブロックチェーンにおけるプログラマブルプライバシー:オフチェーン計算とオンチェーン検証
パブリックブロックチェーンは、プライバシーを犠牲にすることで透明性と完全性を提供します。つまり、すべてのトランザクションとコントラクトの状態が全参加者に公開されます。この公開性は、MEV (マイナー抽出可能価値) 攻撃、コピートレーディング、機密性の高いビジネスロジックの漏洩といった問題を引き起こします。プログラマブルプライバシーは、データ自体を明らかにすることなくプライベートデータに対する計算を可能にすることで、これらの問題を解決することを目指しています。これを可能にしているのが、2つの新しい暗号技術パラダイム、完全準同型暗号仮想マシン (FHE-VM) と ゼロ知識 (ZK) コプロセッサです。これらのアプローチは、オフチェーンまたは暗号化された計算とオンチェーン検証を可能にし、トラストレスな正当性を維持しながら機密性を保護します。本レポートでは、FHE-VM と ZK コプロセッサのアーキテクチャを深く掘り下げ、それらのトレードオフを比較し、金融、アイデンティティ、ヘルスケア、データ市場、分散型機械学習にわたるユースケースを探ります。
完全準同型暗号仮想マシン (FHE-VM)
完全準同型暗号 (FHE) は、暗号化されたデータを一度も復号することなく、その上で任意の計算を行うことを可能にします。FHE 仮想マシンは、この機能をブロックチェーンのスマートコントラクトに統合し、暗号化されたコントラクトの状態とロジックを可能にします。FHE 対応のブロックチェーン (EVM 互換の設計ではしばしば fhEVM と呼ばれます) では、すべての入力、コントラクトのストレージ、および出力が実行中ずっと暗号化されたままです。これは、バリデーターが機密性の高い値を一切知ることなくトランザクションを処理し、状態を更新できることを意味し、データ機密性を伴うオンチェーン実行を実現します。
FHE-VM のアーキテクチャと設計
典型的な FHE-VM は、標準的なスマートコントラクトのランタイム (イーサリアム仮想マシンのような) を拡張し、暗号化データ型と操作のネイティブサポートを追加します。例えば、Zama の FHEVM は、暗号化された 整数 (euint8, euint32 など)、暗号化されたブール値 (ebool)、さらには暗号化された配列を第一級の型として導入します。Solidity のようなスマートコントラクト言語は、ライブラリや新しいオペコードを介して拡張され、開発者は算術演算 (add, mul など)、論理演算、比較を暗号文上で直接実行できます。内部では、これらの操作は FHE プリミティブ (例えば TFHE ライブラリを使用) を呼び出し、暗号化されたビットを操作して暗号化された結果を生成します。
暗号化された状態ストレージがサポートされているため、コントラクト変数はブロックチェーンの状態で暗号化されたままです。実行フローは通常次のようになります:
- クライアントサイドでの暗号化: ユーザーはトランザクションを送信する前に、公開 FHE 鍵を使用してローカルで入力を暗号化します。暗号化鍵は公開 (暗号化と評価用) ですが、復号鍵は秘密のままです。一部の設計では、各ユーザーが自身の鍵を管理しますが、他の設計では、単一のグローバル FHE 鍵が使用されます (後述)。
- オンチェーンでの準同型計算: マイナー/バリデーターは、暗号化されたオペコードでコントラクトを実行します。彼らは暗号文に対して同じ決定論的な準同型操作を実行するため、暗号化された新しい状態についてコンセンサスに達することができます。重要なのは、バリデーターは平文データを一切見ないことです。彼らは「意味不明な」暗号文を見るだけですが、それでも一貫して処理できます。
- 復号 (任意): 結果を公開 したりオフチェーンで使用したりする必要がある場合、秘密鍵を持つ承認された当事者が出力の暗号文を復号できます。それ以外の場合、結果は暗号化されたままであり、後続のトランザクションの入力として使用できます (永続的な暗号化状態での連続計算を可能にします)。
主要な設計上の考慮事項は鍵管理です。一つのアプローチはユーザーごとの鍵で、各ユーザーが自身の秘密鍵を保持し、自分に関連する出力のみを復号できます。これはプライバシーを最大化しますが (他の誰もあなたのデータを復号できません)、複雑なマルチキープロトコルなしでは、異なる鍵で暗号化されたデータを準同型操作で混合することはできません。Zama の FHEVM で使用されている別のアプローチは、グローバル FHE 鍵です。単一の公開鍵がすべてのコントラクトデータを暗号化し、分散されたバリデーターのセットが閾値復号鍵のシェアを保持します。公開の暗号化鍵と評価鍵はオンチェーンで公開されるため、誰でもネットワークにデータを暗号化できます。秘密鍵はバリデーター間で分割され、閾値スキームの下で必要に応じて集合的に復号できます。バリデーターの共謀によるプライバシー侵害を防ぐため、Zama は「ノイズフラッディング」を伴う閾値 FHE プロトコル (彼らの Noah’s Ark 研究に基づく) を採用し、部分的な復号を安全にしています。十分な数のバリデーターが協力した場合にのみ、例えば読み取りリクエストに応えるために平文を回復できます。しかし、通常の操作では、単一のノードが平文を見ることは決してありません。デ ータは常にオンチェーンで暗号化されたままです。
アクセス制御も重要な要素です。FHE-VM の実装には、誰が (もしいるなら) 復号をトリガーしたり、特定の暗号化フィールドにアクセスしたりできるかを管理するためのきめ細かい制御が含まれています。例えば、Cypher の fhEVM は暗号文に対するアクセス制御リストをサポートしており、開発者はどのアドレスやコントラクトが特定のデータと対話したり、再暗号化したりできるかを指定できます。一部のフレームワークは再暗号化をサポートしています。これは、平文を公開することなく、暗号化された値をあるユーザーの鍵から別のユーザーの鍵へ転送する機能です。これはデータマーケットプレイスのようなものに便利で、データ所有者は自分の鍵でデータセットを暗号化し、購入時に購入者の鍵に再暗号化することができます。これらすべてがオンチェーンで行われ、公に復号されることはありません。
正当性とプライバシーの確保
すべてのデータが暗号化されている場合、どのようにしてコントラクトロジックの正当性を強制するのか、と疑問に思うかもしれません。チェーンが値を「見ることができない」場合、どのようにして無効な操作を防ぐのでしょうか? FHE 自体は正当性の証明を提供しません。バリデーターは準同型ステップを実行できますが、ユー ザーの暗号化された入力が有効であったか、条件分岐が取られるべきであったかなどを、復号なしでは本質的に判断できません。ゼロ知識証明 (ZKP) は、このギャップを埋めるために FHE を補完することができます。FHE-VM では、通常、ユーザーは必要に応じて特定の平文条件を証明する ZK 証明を提供する必要があります。例えば、Zama の設計では、各暗号化入力に 平文知識の ZK 証明 (ZKPoK) を添付します。これにより、ユーザーが自身の暗号文に対応する平文を知っており、それが期待される基準を満たしていることを、平文自体を明らかにすることなく証明します。このような**「認証済み暗号文」**は、悪意のあるユーザーが不正な形式の暗号化や範囲外の値を送信するのを防ぎます。同様に、決定が必要な操作 (例: 口座残高 ≥ 引き出し額を確認) の場合、ユーザーは暗号化された操作が実行される前に、この条件が平文で真であることを示す ZK 証明を提供できます。このようにして、チェーンは値を復号したり見たりすることはありませんが、暗号化されたトランザクションがルールに従っているという確信を得ることができます。
FHE ロールアップにおける別のアプローチは、ZKP を用いたオフチェーン検証です。Fhenix (FHE を使用する L2 ロールアップ) は、Threshold Service Network と呼ばれる別のネットワークコンポーネントが暗号化された結果を復号または検証できるオプティミスティックモデルを採用しており、不正な計算は不正証明によって異議を申し立てることができます。一般的に、FHE と ZK または不正証明を組み合わせることで、暗号化され た実行が トラストレス であり続けることが保証されます。バリデーターは、承認された場合にのみ集合的に復号するか、各暗号化された状態遷移が平文を見る必要なく有効であったことを証明する証明を検証します。
パフォーマンスに関する考慮事項: FHE 操作は計算負荷が非常に高く、通常の算術演算よりも何桁も遅いです。例えば、イーサリアムでの単純な 64 ビット加算は約 3 ガスかかりますが、Zama の FHEVM で暗号化された 64 ビット整数 (euint64) の加算は約 188,000 ガスかかります。8 ビットの加算でさえ約 94,000 ガスかかることがあります。この莫大なオーバーヘッドは、既存のノードでの単純な実装が非現実的に遅く、高コストになることを意味します。FHE-VM プロジェクトは、最適化された暗号ライブラリ (Zama のバイナリゲートブートストラップ用の TFHE-rs ライブラリなど) やパフォーマンス向上のためのカスタム EVM 修正によってこれに取り組んでいます。例えば、Cypher の修正された Geth クライアントは、新しいオペコードを追加し、C++/アセンブリで準同型命令の実行を最適化してオーバーヘッドを最小限に抑えています。それでも、実用的なスループットを達成するには高速化が必要です。現在進行中の研究には、GPU、FPGA、さらには特殊なフォトニックチップを使用して FHE 計算を高速化することが含まれます。Zama は、2024 年以降、FHE のパフォーマンスが 100 倍向上し、GPU/FPGA の高速化により数千 TPS を目指していると報告しています。専用の FHE コプロセッササーバー (Optalysys の LightLocker Node など) は、バリデーターノードに接続して暗号化操作をハードウェアにオフロードし、ノードあたり毎秒 100 以上の暗号化 ERC-20 転送をサポートできます。ハードウェアとアルゴリズムが改善されるにつれて、FHE と平文計算の間のギャップは狭まり、プライベートコントラクトがより実用的な速度に近づくことが可能になります。
互換性: FHE-VM 設計の重要な目標は、既存の開発ワークフローとの互換性を維持することです。Cypher と Zama の fhEVM 実装では、開発者は最小限の変更で Solidity でコントラクトを書くことができます。ライブラリを使用して暗号化された型と操作を宣言するだけです。イーサリアムのツールチェーン (Remix, Hardhat など) の残りの部分は、基盤となる変更が主にクライアント/ノードレベルであるため、引き続き使用できます。これにより、参入障壁が低くなります。開発者は機密性の高いスマートコントラクトを書くために暗号技術の専門家である必要はありません。例えば、2 つの数値の単純な加算は euint32 c = a + b; と書くことができ、FHEVM が暗号化固有の詳細を裏で処理します。コントラクトは通常のコントラクトと相互運用することもできます。例えば、暗号化されたコントラクトが、必要に応じて復号された結果を標準のコントラクトに出力し、1 つのエコシステム内でプライベート部分とパブリック部分を混在させることができます。
現在の FHE-VM プロジェクト: いくつかのプロジェクトがこの分野を開拓しています。Zama (パリを拠点とする FHE スタートアップ) は、中核となる FHEVM のコンセプトとライブラリ (TFHE-rs と fhevm-solidity ライブラリ) を開発しました。彼らは独自のチェーンを立ち上げるつもりはなく、むしろ他の人にインフラを提供することを目指しています。Inco は、Zama の FHEVM を統合してモジュラーな機密チェーンを作成した L1 ブロックチェーン (Cosmos SDK と Evmos 上に構築) です。彼らのテストネット (Gentry と Paillier という名前) は、暗号化された ERC-20 転送やその他のプライベート DeFi プリミティブを実証しています。Fhenix は、プライバシーのために FHE を使用するイーサリアムのレイヤー 2 オプティミスティックロールアップです。FHE と ZK をすべてのブロックで一緒に行うコストが高いため、ZK ロールアップではなくオプティミスティック (不正証明) アプローチを決定しました。Fhenix は同じ TFHE-rs ライブラリ (いくつかの変更あり) を使用し、分散型の方法で復号を処理するための Threshold Service Network を導入しています。また、Fhenix (現在はリブランド) のような独立したチームや、MPC + FHE ハイブリッドを模索するスタートアップも存在します。さらに、Cypher (by Z1 Labs) は、AI とプライバシーに焦点を当てたレイヤー 3 ネットワークを構築しており、シークレットストアや連合学習サポートなどの機能を備えた fhEVM を使用しています。エコシステムはまだ初期段階ですが、多額の資金調達に支えられて急速に成長しています。例えば、Zama は 2025 年までに 1 億 3000 万ドル以上を調達し、「ユニコーン」企業となり、FHE 技術の進歩を推進しています。
要約すると、FHE-VM は、すべてのロジックをオンチェーンの暗号化データ上で実行することにより、プライバシーを保護するスマ ートコントラクトを可能にします。このパラダイムは最大限の機密性を保証し (機密性の高いものはトランザクションや状態で公開されることはありません)、既存のブロックチェーンコンセンサスを完全性のために活用します。その代償は、バリデーターの計算負荷の増加と、鍵管理および証明の統合における複雑さです。次に、計算を完全にオフチェーンにオフロードし、チェーンを検証にのみ使用する代替パラダイム、ゼロ知識コプロセッサを探ります。
ゼロ知識コプロセッサ (ZK-Coprocessors)
ZK コプロセッサは、高コストな計算をオフチェーンで実行し、その正当性の簡潔なゼロ知識証明をオンチェーンで検証する新しいブロックチェーンアーキテクチャパターンです。これにより、スマートコントラクトは、トラストレス性を犠牲にすることなく、オンチェーン実行で許容されるよりもはるかに大きな計算能力とデータを活用できます。_コプロセッサ_という用語は、CPU のために特殊なタスクを処理するハードウェアコプロセッサ (数学コプロセッサや GPU など) との類推から使用されています。ここでは、ブロックチェーンの「CPU」(EVM のようなネイティブ VM) が、特定のタスクを暗号コプロセッサとして機能するゼロ知識証明システムに委任します。ZK コプロセッサは、結果 と その結果が正しく計算されたことの証明を返し、オンチェーンのコントラクトはそれを検証して使用できます。
アーキテクチャとワークフロー
典型的な設定では、dApp 開発者は、アプリケーションロジックの中でオンチェーン実行にはコストがかかりすぎる、または複雑すぎる部分 (例えば、履歴データに対する大規模な計算、重いアルゴリズム、ML モデルの推論など) を特定します。彼らはそれらの部分を、その実行のゼロ知識証明を生成できるオフチェーンプログラム (高水準言語またはサーキット DSL で) として実装します。オンチェーンコンポーネントは、証明をチェックし、結果をシステムの他の部分で利用可能にする検証者スマートコントラクトです。このフローは次のように要約できます:
- リクエスト – オンチェーンコントラクトが、特定の計算をオフチェーンで行うようリクエストをトリガーします。これは、ユーザートランザクションによって開始されるか、あるコントラクトが ZK コプロセッサのインターフェースを呼び出すことによって行われます。例えば、DeFi コントラクトが “proveInterestRate(currentState)” を呼び出したり、ユーザーが “queryHistoricalData(query)” を呼び出したりします。
- オフチェーン実行と証明 – オフチェーンサー ビス (分散型証明者ネットワークまたは信頼されたサービス、設計による) がリクエストを受け取ります。必要なデータ (オンチェーンの状態、オフチェーンの入力など) を収集し、特別な ZK 仮想マシン (ZKVM) またはサーキットで計算を実行します。実行中に、証明トレースが生成されます。最後に、サービスは 「入力 X に対して関数 F を計算すると出力 Y が得られる」 ことを証明する簡潔な証明 (例: SNARK または STARK) を生成し、任意でデータの完全性も証明します (詳細は後述)。
- オンチェーン検証 – 証明と結果はブロックチェーンに返されます (多くの場合、コールバック関数を介して)。検証者コントラクトは、効率的な暗号検証 (ペアリングチェックなど) を使用して証明の有効性をチェックします。有効であれば、コントラクトは出力 Y を正しいものとして信頼できます。結果は状態に保存されたり、イベントとして発行されたり、さらなるコントラクトロジックに供給されたりします。証明が無効であるか、一定時間内に提供されない場合、リクエストは失敗したと見なされ (潜在的に何らかのフォールバックまたはタイムアウトロジックがトリガーされます)、処理されます。
図 1: ZK コプロセッサのアーキテクチャ (RISC Zero Bonsai の例)。オフチェーンでは、スマートコントラクトの呼び出しからの入力で ZKVM 上でプログラムが実行されます。実行の証明はリレーコントラクトを介してオンチェーンに返され、検証済みの結果とともにコールバックを呼び出します。
重要なのは、検証のためのオンチェーンのガス費用は、オフチェーンの計算がどれほど複雑であっても一定 (または非常にゆっくりと増加する) であることです。簡潔な証明の検証には数十万ガス (イーサリアムブロックの数分の一) かかるかもしれませんが、その証明はオフチェーンで行われた 数百万 の計算ステップを表すことができます。ある開発者が言ったように、「1 つのデジタル署名を証明したいですか? 約 15 ドルです。100 万の署名を証明したいですか? それも約 15 ドルです。」。このスケーラビリティは大きな利点です。dApp は、ブロックチェーンを詰まらせることなく、複雑な機能 (ビッグデータ分析、精巧な金融モデルなど) を提供できます。
ZK コプロセッサシステムの主なコンポーネントは次のとおりです:
-
証明生成環境: これは、汎用の ZKVM (任意のプログラムを実行可能) または特定の計算に合わせたカスタムサーキットにすることができます。アプローチは様々です:
- 一部のプロジェクトは、サポートされている各クエリまたは関数に対して手作りのサーキットを使用します (その関数の効率を最大化します)。
- 他のプロジェクトは、開発者がオフチェーンロジックを記述するために使用するドメイン固有言語 (DSL) または埋め込み DSL を提供し、それがサーキットにコンパイルされます (使いやすさとパフォーマンスのバランスを取ります)。
- 最も柔軟なアプローチは zkVM です。これは、(多くの場合 RISC アーキテクチャに基づく) 仮想マシンで、プログラムを標準言語 (Rust, C など) で記述し、自動的に証 明することができます。これはパフォーマンスを犠牲にしますが (サーキットで CPU をシミュレートするとオーバーヘッドが追加されます)、_開発者体験を最大化_します。
-
データアクセスと完全性: 特有の課題は、オフチェーン計算に正しいデータを供給することです。特にそのデータがブロックチェーン上 (過去のブロック、コントラクトの状態など) に存在する場合です。単純な解決策は、証明者にアーカイブノードから読み取らせてそれを 信頼 させることですが、これは信頼の仮定を導入します。ZK コプロセッサは代わりに、マークル証明や状態コミットメントにリンクすることで、使用されたオンチェーンデータが確かに本物であったことを証明します。例えば、クエリプログラムはブロック番号とストレージスロットまたはトランザクションのマークル証明を受け取り、サーキットはその証明を既知のブロックヘッダーハッシュに対して検証します。3 つのパターンが存在します:
- インラインデータ: 必要なデータをオンチェーンに (検証者への入力として) 置くことで、直接チェックできるようにします。これは大規模なデータには非常にコストがかかり、全体の目的を損ないます。
- オラクルを信頼する: オラクルサービスにデータを証明に供給させ、それを保証させます。これはよりシンプルですが、第三者への信頼を再導入します。
- ZK を介してデータの包含を証明する: ゼロ知識サーキット自体の中に、チェーンの履歴におけるデータの包含証明を組み込みます。こ れは、各イーサリアムブロックヘッダーが (ステートルートを介して) 以前の全状態とトランザクション履歴にコミットしているという事実を活用します。サーキット内でデータのマークルパトリシア証明を検証することにより、出力証明はコントラクトに 「この計算はブロック N からの本物のブロックチェーンデータを使用した」 ことを、追加の信頼なしで保証します。
3 番目のアプローチが最もトラストレスであり、Axiom や Xpansion のような高度な ZK コプロセッサで使用されています (証明コストは増加しますが、セキュリティ上好ましいです)。例えば、Axiom のシステムは、イーサリアムのブロック構造、ステートトライ、トランザクショントライをサーキット内でモデル化しているため、「アカウント
XはブロックNで残高Yを持っていた」 や 「特定のプロパティを持つトランザクションがブロック N で発生した」 のようなステートメントを証明できます。これは、最近の信頼されたブロックハッシュが与えられれば、外部の当事者を信頼することなく、履歴データの包含を再帰的に証明できるという事実を活用しています。 -
検証者コントラクト: このオンチェーンコントラクトには、証明を受け入れるか拒否するための検証鍵とロジックが含まれています。Groth16 や PLONK のような SNARK の場合、検証者はいくつかの楕円曲線ペアリングを行うかもしれません。STARK の場合、いくつかのハッシュ計算を行うかもしれません。集約や再帰のようなパフォーマンス最適化により、オンチェーンの負荷を最小限に 抑えることができます。例えば、RISC Zero の Bonsai は STARK-to-SNARK ラッパーを使用します。速度のためにオフチェーンで STARK ベースの VM を実行しますが、その後、STARK の有効性を証明する小さな SNARK 証明を生成します。これにより、証明サイズが数百キロバイトから数百バイトに縮小され、オンチェーンでの検証が実現可能かつ安価になります。Solidity の検証者は、その後 SNARK をチェックするだけです (これは定数時間の操作です)。
デプロイメントに関して、ZK コプロセッサは レイヤー 2 のような ネットワークとして、または純粋なオフチェーンサービスとして機能することができます。Axiom のように、イーサリアム向けの特化サービスとして始まったものもあります (Paradigm の支援を受けて)。開発者は Axiom の証明者ネットワークにクエリを送信し、オンチェーンで証明を取得します。Axiom のキャッチフレーズは、イーサリアムコントラクトに 「すべてのオンチェーンデータへのトラストレスなアクセスと、それに対する任意の表現力豊かな計算」 を提供することでした。これは、答えが信頼ではなく ZKP によって検証されるクエリオラクルとして効果的に機能します。RISC Zero の Bonsai のような他のものは、よりオープンなプラットフォームを提供します。どの開発者でもプログラム (RISC-V 互換の ZKVM にコンパイルされたもの) をアップロードし、リレーコントラクトを介して Bonsai の証明サービスを使用できます。図 1 に示されているリレーパターンは、リクエストとレスポンスを仲介するコントラクトを含みます。dApp コ ントラクトはリレーを呼び出して証明を要求し、オフチェーンサービスはこれを聞き (例えばイベントや直接呼び出しを介して)、証明を計算し、その後リレーが dApp コントラクトのコールバック関数を結果と証明とともに呼び出します。この非同期モデルは、証明が複雑さによって数秒から数分かかる可能性があるため必要です。これはレイテンシー (および証明者が応答するという活性仮定) を導入しますが、FHE-VM の計算はブロック内で同期的に行われます。この非同期ワークフロー (おそらくオラクルの応答に似ています) を処理するようにアプリケーションを設計することは、ZK コプロセッサを使用する一部です。
注目すべき ZK コプロセッサプロジェクト
-
Axiom: Axiom はイーサリアムに特化した ZK コプロセッサで、当初は 履歴 オンチェーンデータのクエリを証明することに焦点を当てていました。Halo2 証明フレームワーク (Plonk-ish SNARK) を使用して、イーサリアムの暗号構造を組み込んだ証明を作成します。Axiom のシステムでは、開発者は 「ブロック N でのコントラクト X の状態はどうだったか?」 のようなことをクエリしたり、ある範囲のすべてのトランザクションにわたる計算を実行したりできます。内部では、Axiom のサーキットはイーサリアムの状態/トライロジックを実装する必要があり、再帰をサポートするためにサーキット内で楕円曲線演算や SNARK 検証さえも実行していました。Trail of Bits は監査で、Axiom の Halo2 サーキットがブロック全体と状態をモデル化する複雑さを指摘しました。監査後、Axiom はその技術を OpenVM に一般化し、同じ Halo2 ベースのインフラで任意の Rust コードを証明できるようにしました。(これは、ドメイン固有のサーキットからより一般的な ZKVM アプローチへの移行というトレンドを反映しています。) Axiom チームは、イーサリアムがネイティブでは実行できない ZK クエリを実証し、暗号的な完全性を備えたあらゆる履歴データへの ステートレスアクセス を可能にしました。彼らはまた、セキュリティを重視し、制約不足のサーキットバグを捕捉・修正し、健全性を確保しました。Axiom の初期製品はピボット中にシャットダウンされましたが、そのアプローチは ZK コプロセッサにおける画期的なものとして残っています。
-
RISC Zero Bonsai: RISC Zero は RISC-V アーキテクチャに基づく ZKVM です。彼らの zkVM は任意のプログラム (Rust, C++ および RISC-V にコンパイルされる他の言語で書かれたもの) を実行し、実行の STARK 証明を生成できます。Bonsai は RISC Zero のクラウドサービスであり、この証明をオンデマンドで提供し、スマートコントラクトのコプロセッサとして機能します。これを使用するには、開発者はプログラム (例えば、複雑な数学計算を実行したり、オフチェーン API の応答を検証したりする関数) を書き、それを Bonsai サービスにアップロードし、対応する検 証者コントラクトをデプロイします。コントラクトがその計算を必要とするとき、Bonsai リレーを呼び出し、それが証明生成をトリガーし、コールバックを介して結果を返します。実証されたアプリケーションの一例は、オフチェーンでのガバナンス計算でした。RISC Zero は、DAO が Bonsai を使用して票を集計し、複雑な投票メトリクスをオフチェーンで計算し、その後、オンチェーンの Governor コントラクトが最小限のガス費用で結果を信頼できるように証明を投稿する様子を示しました。RISC Zero の技術は、開発者が使い慣れたプログラミングパラダイムを使用できることを強調しています。例えば、何かを計算するための Rust 関数を書き、サーキット作成の重労働は zkVM が処理します。しかし、証明は大きくなる可能性があるため、前述のように、オンチェーン検証のために SNARK 圧縮を実装しました。2023 年 8 月、彼らはイーサリアムの Sepolia テストネットで RISC Zero の証明を正常に検証し、証明あたり 30 万ガス程度のコストがかかりました。これにより、イーサリアム dApp がスケーリングおよびプライバシーソリューションとして Bonsai を 今日 使用する道が開かれました。(Bonsai はまだアルファ版であり、本番環境には対応しておらず、セレモニーなしの一時的な SNARK セットアップを使用しています。)
-
その他: 他にも多数のプレイヤーや研究イニシアチブがあります。Expansion/Xpansion (ブログで言及) は、埋め込み DSL アプローチを使用しており、開発者は特殊な言語でオンチェーンデータに対するクエリを記述でき、内部で証明生成を処理します。StarkWare の Cairo や Polygon の zkEVM はより一般的な ZK ロールアップ VM ですが、その技術は L1 コントラクト内で証明を検証することにより、コプロセッサのような用途に再利用できます。また、ZKML (ZK 機械学習) ドメインのプロジェクトも見られます。これらは、ML モデルの推論やトレーニング結果をオンチェーンで検証するためのコプロセッサとして効果的に機能します。例えば、zkML セットアップは、入力を明らかにしたり、オンチェーンで計算を行ったりすることなく、「プライベート入力に対するニューラルネットワークの推論が分類 X を生成した」 ことを証明できます。これらは、AI に適用されたコプロセッサコンセプトの特殊なケースです。
信頼の仮定: ZK コプロセッサは、暗号証明の健全性に依存しています。証明システムが安全であれば (そして、信頼されたセットアップが正直に行われていれば)、受け入れられた証明は計算が正しかったことを保証します。証明者に対する追加の信頼は不要です。悪意のある証明者でさえ、偽のステートメントを検証者に納得させることはできません。しかし、活性仮定があります。誰かが実際にオフチェーン計算を実行し、証明を生成しなければなりません。実際には、これは分散型ネットワーク (インセンティブや手数料で作業を行う) または単一のサービスオペレーターかもしれません。誰も証明を提供しない場合、オンチェーンのリクエストは未解決のままになる可能性があります。もう一つの微妙な信頼の側面は、ブロックチェーン上にないオフチェーン入 力のデータ可用性です。計算が何らかのプライベートまたは外部データに依存する場合、検証者は、追加の措置 (データコミットメントやオラクル署名など) が使用されない限り、そのデータが正直に提供されたかどうかを知ることができません。しかし、純粋にオンチェーンデータの計算については、説明されたメカニズムがチェーン自体と同等のトラストレス性を保証します (Axiom は、彼らの証明が履歴クエリに対して「イーサリアムと暗号的に同等のセキュリティ」を提供すると主張しました)。
プライバシー: ゼロ知識証明は本質的にプライバシーもサポートします。証明者は、それらに関するステートメントを証明しながら、入力を隠しておくことができます。コプロセッサの文脈では、これは、証明がコントラクトにプライベートデータから導出された結果を使用させることを可能にすることを意味します。例えば、証明は、実際のクレジットスコアや生データを明らかにすることなく、「ユーザーのクレジットスコア > 700 なので、ローンを承認する」 ことを示すことができます。Axiom のユースケースは、公に知られているデータ (ブロックチェーンの履歴) に関するものであったため、プライバシーは焦点ではありませんでした。しかし、RISC Zero の zkVM は、ユーザーが提供した秘密データに関するアサーションを証明するために使用できます。データはオフチェーンに留まり、必要な結果のみがオンチェーンに渡されます。FHE とは異なり、ZK 証明は通常、状態の継続的な機密性を提供しないことに注意する価値があります。それは一度きりの証明です。ワークフローがトランザクション間で秘密の状態を維持する必要がある場合、コントラクトに状態への コミットメント を保存させ、各証明が古いコミットメントから新しいコミットメントへの有効な状態遷移を示し、秘密は隠されたままにすることで構築できます。これは本質的に、プライベートトランザクションのための zk-ロールアップ (Aztec や Zcash のような) が機能する方法です。したがって、ZK コプロセッサは完全にプライベートなステートマシンを促進 できます が、実装は簡単ではありません。多くの場合、入力または出力 (あるいはその両方) が必要に応じてプライベートにできる 一度きりの計算 に使用されます。
開発者体験: ZK コプロセッサを使用するには、通常、新しいツールを学ぶ必要があります。カスタムサーキットを書くこと (上記のオプション (1)) は非常に複雑で、通常は狭い目的のためにのみ行われます。DSL や zkVM のような高レベルのオプションは生活を楽にしますが、それでもオーバーヘッドを追加します。開発者はオフチェーンコードを書いてデプロイし、その相互作用を管理しなければなりません。FHE-VM では暗号化がほとんど裏で処理され、開発者は通常のスマートコントラクトコードを書くのに対し、ここでは開発者はロジックを分割し、オフチェーン部分のために異なる言語 (Rust など) で書く必要があるかもしれません。しかし、Noir, Leo, Circom DSL や RISC Zero のアプローチのようなイニシアチブは、アクセシビリティを急速に向上させています。例えば、RISC Zero はテンプレートと Foundry の統合を提供しており、開発者はオフチェ ーンコードをローカルでシミュレートし (正当性のために)、その後 Bonsai のコールバックを介してシームレスに Solidity のテストにフックすることができます。時間が経つにつれて、ロジックの一部が ZK 証明を介して実行されるかオンチェーンで実行されるかを抽象化する開発フレームワークが期待できます。コンパイラやツールがコストに基づいて決定するかもしれません。
FHE-VM vs ZK-コプロセッサ: 比較
FHE-VM と ZK コプロセッサはどちらも 「オンチェーンの保証付きでプライベートデータ上で計算する」 という形態を可能にしますが、アーキテクチャが根本的に異なります。以下の表は、主な違いをまとめたものです:
| 側面 | FHE-VM (暗号化されたオンチェーン実行) | ZK-コプロセッサ (オフチェーンでの証明) |
|---|---|---|
| 計算が行われる場所 | 直接オンチェーン (すべてのノードが暗号文に対して準同型操作を実行)。 | オフチェーン (証明者またはネットワークがプログラムを実行し、証明のみがオンチェーンで検証される)。 |
| データ機密性 | 完全な暗号化: データはオンチェーンで常に暗号化されたまま。バリデーターは平文を見ることがない。復号鍵の所有者のみが出力を復号できる。 | ゼロ知識: 証明者のプライベート入力はオンチェーンで公開されない。証明は公開出力に含まれるもの以外の秘密を明かさない。ただし、オンチェーンの状態に影響を与える必要のある計算で使用されるデータは、出力またはコミットメントにエンコードする必要がある。秘密はデフォルトでオフチェーンに留まる。 |
| 信頼モデル | コンセンサス実行と暗号技術への信頼: バリデーターの大多数がプロトコルに従えば、暗号化された実行は決定論的で正しい。計算の正当性に外部の信頼は不要 (すべてのノードが再計算するため)。プライバシーのためには FHE スキームのセキュリティ (通常は格子困難性に基づく) を信頼する必要がある。一部の設計では、十分な数のバリデーターが共謀して閾値鍵を悪用しないことも信頼する必要がある。 | 証明システムのセキュリティ (SNARK/STARK の健全性) への信頼。証明が検証されれば、結果は暗号的な確実性をもって正しい。オフチェーンの証明者は数学をごまかすことはできない。証明者が実際に作業を行うという活性仮定がある。信頼されたセットアップ (例: SNARK SRS) を使用する場合、それが正直に生成されたことを信頼するか、透明/セットアップ不要のシステムを使用する必要がある。 |
| オンチェーンコストとスケーラビリティ | トランザクションあたりのコストが高い: 準同型操作は計算コストが非常に高く、すべてのノードが実行する必要がある。ガス費用は高い (例: 8 ビット加算 1 回で 10 万ガス以上)。複雑なコントラクトは、すべてのバリデーターが 1 ブロックで計算できる範囲に制限される。スループットは、特殊なハードウェアが採用されない限り、通常のスマートコントラクトよりもはるかに低い。スケーラビリティは、より高速な暗号技術とハードウェアアクセラレーションによって向上するが、基本的には各操作がチェーンのワークロードを増加させる。 | 検証コストが低い: 簡潔な証明の検証は効率的でサイズが一定であるため、オンチェーンのガスは控えめ (どんなサイズの計算でも数十万ガス)。これにより、複雑さがオンチェーンのリソース制限から切り離される。大規模な計算でもオンチェーンの追加コストはない。したがって、オンチェーンの負荷という点で スケール する。オフチェーンでは、証明時間はかなり長くなる可能性があり (巨大なタスクでは数分以上)、強力なマシンが必要になるかもしれないが、これはブロックチェーンを直接遅くするものではない。証明が時間内に生成できる限り (並列証明者ネットワークの可能性)、全体的なスループットは高くなる可能性がある。 |
| レイテンシー | 計算が実行中に行われるため、結果は同じトランザクション/ブロックですぐに利用可能。追加のラウンドトリップは不要 – 同期操作。ただし、FHE 操作が遅い場合、ブロック処理時間が長くなり、ブロックチェーンのレイテンシーが増加する可能性がある。 | 本質的に非同期。通常、リクエストのための 1 つのトランザクションと、後で証明/結果を提供するためのトランザクション (またはコールバック) が必要。これにより遅延が発生する (証明の複雑さと証明ハードウェアによっては数秒から数時間)。単一トランザクションの即時ファイナリティには適していない – むしろ 非同期ジョブ モデルに近い。 |
| プライバシー保証 | 強力: すべて (入力、出力、中間状態) がオンチェーンで暗号化されたままにできる。複数のトランザクションがそれを明らかにすることなく更新する、長期間存続する暗号化状態を持つことができる。承認された復号アクション (もしあれば) のみが結果を明らかにし、それらは鍵/ACL を介して制御できる。ただし、ガス使用量やイベントログのようなサイドチャネルの考慮事項は、パターンが漏洩しないように管理する必要がある (fhEVM 設計は、漏洩を避けるためにデータ非依存の実行と操作のための定数ガスを目指している)。 | 選択的: 証明は、公開出力にあるもの、または検証に必要なもの (例: 初期状態へのコミットメント) を明らかにする。設計者は、意図した結果のみが明らかにされ、他のすべての入力がゼロ知識で隠されたままであることを保証できる。しかし、FHE とは異なり、ブロックチェーンは通常 隠された 状態を保存しない – プライバシーはデータを完全にオフチェーンに保つことによって達成される。永続的なプライベート状態が必要な場合、コントラクトはそれに対する暗号コミットメントを保存することがある (そのため、状態更新は毎回新しいコミットメントを明らかにする)。プライバシーは証明することを選択したものによって制限される。例えば、正確な値を明らかにすることなく閾値が満たされたことを証明する柔軟性がある。 |
| 完全性の強制 | 設 計上、すべてのバリデーターは次の状態を準同型的に再計算するため、悪意のあるアクターが間違った暗号文の結果を提供した場合、他のバリデーターは不一致を検出し、全員が同じ結果を得ない限りコンセンサスは失敗する。したがって、完全性は冗長な実行によって強制される (通常のブロックチェーンと同様、ただし暗号化データ上)。バリデーターは平文の条件を直接チェックできないため、ビジネスルール (例: ユーザーが制約に違反できなかった) を強制するために追加の ZK 証明がしばしば使用される。 | 完全性は、ZK 証明をチェックする検証者コントラクトによって強制される。証明が検証される限り、結果はオフチェーンプログラムの何らかの有効な実行と一致することが保証される。正当性のために正直な多数派の仮定は不要 – 単一の正直な検証者 (コントラクトコード自体) で十分。オンチェーンコントラクトは、不正な証明や欠落した証明を単に拒否する (無効な署名を拒否するのと同様)。考慮事項: 証明者が中止または遅延した場合、コントラクトにはフォールバックロジックが必要になるかもしれないが (またはユーザーが後で再試行する必要があるかもしれないが)、不正な結果は受け入れない。 |
| 開発者体験 | 長所: 拡張機能を使えば、使い慣れたスマートコントラクト言語 (Solidity など) をほぼ使用できる。機密性はプラットフォームによって処理される – 開発者は主に何を暗号化し、誰が鍵を持つかを心配する。暗号化されたコントラクトと通常のコントラクトの構成が可能で、DeFi の構成可能性を維持する (ただし暗号化された変数を使用)。短所: FHE の制限を理解する必要がある – 例: 特別な処理なしでは秘密データに対する直接の条件分岐はできない、サーキットの深さが限られる (ただし TFHE のブートストラップは時間と引き換えに任意の長さの計算を可能にする)。暗号化されたロジックのデバッグは、鍵なしではランタイム値を簡単に内省できないため、トリッキーになる可能性がある。また、鍵管理と権限設定はコントラクト設計に複雑さを加える。 | 長所: オフチェーン部分には任意のプログラミング言語を使用できる可能性がある (特に zkVM を使用する場合)。オフチェーンプログラムで既存のコード/ライブラリを活用できる (ZK 互換性の注意点あり)。汎用 ZKVM を使用する場合、開発者によるカスタム暗号技術は不要 – 通常のコードを書き、証明を得る。また、重い計算は、オンチェーンでは決して実行できないライブラリ (例: 機械学習コード) を使用できる。短所: 開発者はオフチェーンインフラを調整するか、証明サービスを使用する必要がある。非同期ワークフローの処理とオンチェーンロジックとの統合には、より多くの設計作業が必要 (例: 保留中の状態の保存、コールバックの待機)。効率的なサーキットや zkVM コードを書くには、新しい制約を学ぶ必要があるかもしれない (例: 浮動小数点数なし、固定小数点または特殊プリミティブを使用、証明時間を爆発させる重い分岐を避ける、制約数に最適化する)。また、証明の失敗やタイムアウトなどに対処する負担もあり、これらは通常の Solidity では懸念事項ではない。ツールのエコシステムは成長しているが、多くの人にとって新しいパラダイムである。 |
両 アプローチは積極的に改善されており、収束も見られます。前述のように、ZKPs は FHE-VM 内部 で特定のチェックに使用され、逆に一部の研究者は ZK で証明者の入力をプライベートに保つために FHE を使用することを提案しています (クラウド証明者があなたの秘密データを見ないように)。将来のシステムがこれらを組み合わせることは考えられます。例えば、オフチェーンで FHE を実行し、その正当性をチェーンに証明したり、オンチェーンで FHE を使用し、暗号化操作が正しく行われたことをライトクライアントに ZK 証明したりするなどです。各技術には強みがあります。FHE-VM は重い計算を犠牲にして 継続的なプライバシーとリアルタイムの相互作用 を提供し、ZK コプロセッサはレイテンシーと複雑さを犠牲にして スケーラビリティと柔軟性 を提供します。
ユースケースと影響
プログラマブルプライバシーの出現は、業界全体で新しいブロックチェーンアプリケーションの富を解き放ちます。以下では、FHE-VM と ZK コプロセッサ (またはハイブリッド) が、プライバシーを保護するスマートコントラクトと安全なデータエコノミーを可能にすることで、さまざまなドメインをどのように強化できるかを探ります。