zkFuzz: Foundation and Framework for Effective Fuzzing of Zero-Knowledge Circuits
本論文は、既存の静的解析および形式検証ツールの限界を克服し、ゼロ知識回路における過不足制約の脆弱性の両方を効果的に検出する理論的トレース制約整合性テスト(TCCT)に基づいた、新しい変異ベースのファジングフレームワークであるzkFuzzを導入する。
原論文は CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) でライセンスされています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む
あなたが秘密のパスワードを一度も実際に提示することなく、そのパスワードを知っていることを証明する「魔法の金庫」を構築しているところを想像してください。これがデジタル世界における「ゼロ知識(ZK)回路」が果たす役割です。これらは、匿名暗号通貨や安全な投票システムといったプライバシーを保護する技術のセキュリティガードとなります。
しかし、これらの金庫を構築するのは極めて困難です。設計図にわずかなミスがあれば、金庫は以下のいずれかの状態になる可能性があります:
- パスワードを知っていなくても誰でも入れるようになる。
- 正当な所有者(正しいパスワードを持つ者)さえも締め出してしまう。
本論文は、悪意のある攻撃者がそれらのミスを見つける前に発見するための新しいツール「ZKFUZZ」を紹介しています。その仕組みを簡単に説明します。
問題点:「設計図」と「現実」の不一致
これらのシステムでは、開発者は以下の 2 つの機能を同時に実行するプログラムを作成します:
- 計算(Computation): 秘密を解き明かすための実際の数学処理(地図上の経路を計算するようなもの)。
- 制約(Constraints): 数学が正しく行われたことを証明するルール(経路が存在するかを確認するチェックリストのようなもの)。
問題は、これら 2 つの部分がしばしば同期を失うことです。
- 制約不足(Under-constrained): ルールが緩すぎます。ハッカーはシステムをだまして、架空の経路を受け入れさせることができます。
- 制約過多(Over-constrained): ルールが厳しすぎます。システムは、わずかで不要なルールのために、完全に有効な経路を拒絶してしまいます。
これらのエラーを見つける既存のツールは、不良なスペルチェック機能のようです。パターンに基づいて推測し、実際には問題ないものに対して「エラー!」と叫んだり(誤報)、あるいは深く複雑なエラーを完全に見逃したりします。
解決策:ZKFUZZ(「変異ファズ」)
著者らは、コードを単に読むのではなく、意図的にシステムを破壊しようとするいたずらなテストエンジニアのように振る舞う新しいフレームワーク「ZKFUZZ」を開発しました。
以下がその比喩です:
レシピ(計算) と 味見テスト(制約) を持っているところを想像してください。
- 従来のツール: レシピを見て、「塩を使っているから怪しい」と言います(ルールに基づいて推測します)。
- ZKFUZZ: 実際に料理を作りますが、その後レシピを変異させます。「砂糖」を「塩」に置き換えたり、調理時間を変更したりします。その後、この変異した料理を味見テストに提供します。
- もし味見テストが、本来まずいはずの料理(レシピが変更されたため)に対して「美味しい!」と言った場合、ZKFUZZ はルールが緩すぎる(制約不足)と判断します。
- もし味見テストが、本来美味しいはずの料理(元のレシピが正しいため)に対して「まずい!」と言った場合、ZKFUZZ はルールが厳しすぎる(制約過多)と判断します。
秘密の武器:「適性」と「ターゲティング」
ZK 回路内のバグを見つけることは、惑星サイズの干し草の山から針を見つけるようなものです。関与する数値があまりにも巨大なため、コンピュータはすべての可能性を試すことができません。
ZKFUZZ は遺伝的アルゴリズム(進化のようなもの)を使用します:
- 変異: 数千ものわずかに壊れたプログラムのバージョンを作成します。
- 適性スコア: これらの壊れたバージョンに評価を与えます。壊れたバージョンがテストに合格する手前まで到達した場合(失敗しても)、それは「良いスコア」を得ます。これはシステムに「もう少しで当たっている!」と伝えます。
- ターゲティング: 単にランダムに推測するわけではありません。バグはしばしば「エッジケース」(数値がゼロの場合や、極めて大きい場合など)で発生することを理解しています。システムが壊れるかどうかを確認するために、意図的にこれらの厄介な数値をシステムに与えてみます。
結果:見えないものを捉える
チームは、実際のプロジェクトで使用されている452 の現実世界の回路で ZKFUZZ をテストしました。
- スコア: 85 のバグを発見しました。
- ゼロデイ: これらの 59 は、誰も存在を知らなかった新規かつ未知のバグ(ゼロデイ)でした。
- 影響: これらのうち 39 は開発者によって確認され、14 はすでに修正済みです。これには、zkSync(暗号プラットフォーム)やpassport-zk-circuits(デジタル ID システム)などの主要プロジェクトのバグが含まれます。
- 誤報なし: 他のツールとは異なり、ZKFUZZ は実際にはバグではないものをバグとして警告することはありませんでした。
なぜこれが重要なのか
本論文は、従来のツールが問題の大きな部分を見過ごしていたと主張しています。それらはルール内の「ランダム性」のみを探していました。ZKFUZZ はTCCT(Trace-Constraint Consistency Test:トレース - 制約一貫性テスト)と呼ばれる新しい理論を導入し、コンピュータが実際にたどる経路が、従うべきルールと一致しているかどうかを確認します。
この新しい理論は、従来のツールが完全に無視していた、コンピュータが「クラッシュ」したり予期せず停止したりした際に発生するバグを捉えました。
まとめ
ZKFUZZは、コードを変異させ、厄介な入力を与えてゼロ知識回路を破壊する、賢く自動化された「バグハンター」です。他のツールが見逃していた数十の重大なセキュリティホールを発見し、プライバシー数学という複雑な世界においても、少しの制御された混沌こそが真実を見つける最良の方法であることを証明しました。
自分の分野の論文に埋もれていませんか?
研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。