世界を動かす技術を、日本語で。

虚偽の主張を証明する方法:Fiat-Shamirに対する実践的攻撃

概要

  • ランダム性 は公平性やセキュリティの根幹であり、特に 暗号技術 で重要視される要素。
  • ハッシュ関数 をランダム性の代用とする手法(ランダムオラクルモデル)が長年信じられてきた。
  • 新たな研究により、この仮定の 安全性に重大な疑問 が投げかけられた。
  • Fiat-Shamir変換 を利用した証明システムが、実際には偽の証明を認証してしまう脆弱性の発見。
  • 今後の 暗号プロトコル設計 やブロックチェーンの安全性に大きな影響を与える可能性。

ランダム性とハッシュ関数の役割

  • ランダム性 は、公平な意思決定や予測不可能な選択を実現する基盤。
  • ハッシュ関数 は、計算機で真のランダム性を得るのが難しい場合の代用手段。
  • 暗号分野では、ハッシュ関数の出力が 真のランダム性と区別できない と仮定(ランダムオラクルモデル)。
  • 多くの 暗号プロトコルや証明システム でこの仮定が安全性の分析の前提。
  • しかし、実際のハッシュ関数は 理想的なランダム性 を持たない現実。

Fiat-Shamir変換とその普及

  • Fiat-Shamir変換 は、対話型証明を非対話型証明に変換する技術。
  • 例:宿題の正当性証明を多数の第三者に納得させる仕組み。
    • 各解答を ハッシュでロック し、コミットメントとして公開。
    • ランダムなチャレンジを ハッシュ関数で自動生成
    • 証明者と検証者のやり取りを不要にし、誰でも検証可能な証明を実現。
  • ブロックチェーン や暗号通貨、クラウド計算の正当性証明など幅広く利用。

新たな脆弱性の発見

  • 近年の研究で、 Fiat-Shamir変換を悪用し偽の証明を認証可能 な手法が実証。
  • 研究者:Dmitry Khovratovich(Ethereum Foundation)、Ron Rothblum(Succinct/Technion)、Lev Soukhanov([alloc] init)。
  • 対象:GKRプロトコル等、現実的な証明システム。
  • 任意のハッシュ関数を用いても、 悪意あるプログラム が証明システムを欺けることを証明。
  • ブロックチェーンなど 巨額の資産が依存 するシステムの根本的リスク。

ランダムオラクルモデル再考の必要性

  • 1996年、PointchevalとSternが ランダムオラクルモデル下での安全性 を証明。
  • しかし、実際のハッシュ関数は 理想的オラクルではなく、攻撃余地が存在。
  • 過去にも理論的な脆弱性は指摘されていたが、現実的プロトコルへの影響は軽視されてきた。
  • 今回の発見により、 多くの暗号技術の基盤となる仮定の見直し が迫られる状況。

今後への影響と対応

  • Ethereum Foundation など主要なブロックチェーン組織も危機感を持ち、対策を模索。
  • Fiat-Shamir変換 に依存する全ての証明システムで、設計や運用の再評価が必要。
  • 新たな安全性保証手法 や、より強力なランダム性生成技術の開発が急務。
  • 暗号分野全体での 理論と実装のギャップ に対する議論の活発化。
  • 今後も 安全性の検証と脆弱性の発見 が続く見込み。

参考論文: https://eprint.iacr.org/2025/118

Hackerたちの意見

それって、ビットコインや暗号通貨の取引を偽造できるってこと? これらの脆弱性によって何が影響を受けるのか、具体的に知りたいんだけど。もっと分かりやすく説明してる記事ってどこかにある?

理論的には極端だけど、この記事はかなりセンセーショナルだね。論文は半年前のもので、あまり注目されてないし、もしこれが重要なニュースならもっと報道があるはずだと思う。ここにもっとニュアンスのある見解を見つけたよ: https://blog.cryptographyengineering.com/2025/02/04/how-to-p... Quanta「マガジン」はあまり見たことないけど、こんな感じの内容ばっかりなのかな?

ざっと読んだ感じでは、ビットコインとは全く関係ないみたいだけど、もう少し複雑なイーサリアムのプロトコルには影響があるかもしれない。イーサリアム自体とは関係ないけど、ゼロ知識証明に関連しているみたい。編集: どうやら「GKRプロトコル」と呼ばれる、いくつかの暗号通貨が使っている(?)ものに関連しているみたいで、何かを証明するために使える(?)らしい。マイニングとか... ゼロ知識証明を使って... ここみたいに - https://www.polyhedra.network/expander (暗号通貨では、実際に何が行われているのか分かりにくいよね)私が素人として感じるのは、実験的なZK証明は確かに実験的だってこと。

たぶんそうだろうけど、結局は誰かが壊れてないプログラムで君の仕事を検証するから、捕まる可能性が高いよ。どれくらいその可能性があるかはよく分からないけど(暗号通貨に興味がないからアルゴリズムを掘り下げる気もないし、確かいくつかの異なる関係者が取引を本物と見なす前に合意する必要があるんだよね、そんな感じで混乱してると思ってくれればいいけど)、ビットコインの詐欺をたくさんやってたら誰かが気づくよ。詐欺を君に追跡できるかどうかは分からないけど。

数年前にセキュリティ研究者がブロックチェーンはハッキング可能だって見せてくれたんだ。証明は覚えてないけど、それ以来暗号通貨やブロックチェーンにはあまり興味がなくなった。お金を稼ぎたいけど、セキュリティが不安定なんだよね。

(これを鵜呑みにしないでね、先週このHNスレッドでFiat-Shamirヒューリスティックについて知ったばかりだから https://news.ycombinator.com/item?id=44458168、理論的な暗号学の基本的な経験しかない)ゼロ知識証明の概念があって、インタラクティブな文脈での動作の直感的な例はWikipediaページをチェックしてみて。基本的に、何かを証明したい人(証明者)にいくつかの質問(チャレンジ)をすることで、彼らが実際にそのことを知っているという確率的な信頼を得られるんだ: https://en.wikipedia.org/wiki/Zero-knowledge_proof#Abstract_... インタラクティブであることが重要なのは、証明者がその場で「ごまかす」のが難しくなるから。でも、オンラインでお互いに話す必要がない方が便利だよね。だから、同じことを非インタラクティブにやりたい。Fiat-Shamir変換(またはヒューリスティック)は、インタラクティブなプロトコルを「ランダム」なチャレンジに依存して非インタラクティブなものに変換できると言ってる。証明者がランダム性をコントロールできなければ、それはインタラクティブに挑戦するのと同じくらい良いことになる(例えば、補うためにもっと多くのチャレンジをさせることもできる)。ランダム性はどうやって得るの?コンピュータでは完全にランダムなものはないけど、暗号学的ハッシュ関数は出力を予測するのが非常に難しいと考えられている。だから、暗号学では「ランダムオラクルモデル」があって、「このプロトコルが実際のハッシュで安全かどうかは分からないけど、ハッシュ関数が本当にランダムオラクルだったら、安全だと証明できる」と言ってる。(Fiat-Shamir変換は、ランダムオラクルモデルを信じる場合にのみ証明可能に安全)。過去には、研究者たちがランダムオラクルモデルで安全な新しいプロトコルを構築してきたけど、実際のハッシュ関数を使うと、現実の実装の詳細のせいで破られることがある。この論文の要約にもあるように、「これまでのすべての例は、失敗するように特別に設計された作り話のプロトコルだった」。実際のハッシュ関数を選ぶとどうなるかのメカニズムについての議論は、https://crypto.stackexchange.com/q/879を見てみて。この新しい論文は、実際に使われている現実のプロトコルGKRをターゲットにした攻撃を示すことで、分野を進展させている。これを見ると(俺の解釈は鵜呑みにしないでね)、実際のハッシュ関数を選ぶと、攻撃者が望む出力を得るための入力(回路)を構築できることが分かる。--- 現実世界への影響は?実際に存在する非インタラクティブなゼロ知識証明システムがあって、主にブロックチェーンで使われてる。全ての情報を公開して(遅い)ブロックチェーン上で計算する代わりに、取引のプライバシーを守ったり、いくつかの更新を安価にまとめたり(ZKロールアップ)できる。理論的には、これらは論文で説明されている方法を使って攻撃される可能性がある。これらが影響を受けるかどうかは不明だけど(俺の予想では受けないと思う、もしそうなら言及されていたはずだから)。

いや、これはビットコインやイーサリアムのTXを偽造することはできないよ。この種の脆弱性は主に「ゼロ知識」証明手法に関するもので、ビットコインやイーサリアムの基盤層では発生しないんだ。でも、いくつかのチームはこれらのブロックチェーンの上にZK証明を構築しているから、そういうシステムは脆弱かもしれないけど、まだほとんど実験段階なんだよね。

ハッシュは決してランダム性の源にはならないよ。ランダム性は本来の用途を超えた仮定を生むからね。ハッシュは再現可能なラベルとしてだけ使うべきで、ハッシュが示す内容を生み出すためには使えない。用途通りに使えば、ハッシュは価値の衝突が発見されるまで、最も強力な整合性のポイントになるんだ。

初心者として、どうして人たちがこんな風にハッシュを使ってるのか理解するのがすごくイライラした。プロの人も「うん、でも衝突は本当に起こりにくいから」とか言って、ニュートリノの干渉と比べてたけど、それがどうして十分だと思えるの?

HyperLogLogアルゴリズムについて調べてみて。アルゴリズムが機能するためには、公平なハッシュの「ランダム性」が必要なんだ。ハッシュの擬似ランダム性が役立つケースもあるってことを言いたいんだよね。

でも、「ハッシュで説明された素材を生成するために使えない関数」を作ったら、すごく良い擬似ランダム化装置も作ったことになるよ。実際、暗号ハッシュ関数が明らかなランダム性を生み出す能力を信頼できないなら、その「意図された目的」に対しても信頼できないってことになる。どちらか一方か、両方とも得られるかだね。

今使われてる署名って、基本的にハッシュ関数をランダム性として使ってるって気づいた?

ごめん、でもこのコメントはすごく曖昧でわかりにくいよ。暗号学者たちは、ハッシュ(たとえ暗号的に強いものであっても!)が決定論的であることを知っているんだ。でも、インタラクティブ証明から非インタラクティブ証明に移行する際に、実際にはランダム性が必要ない場合もあるんだ。実際、特定のプロトコルのクラスに対しては、特定の性質(相関困難性)を満たすハッシュ関数を設計する方法がわかっているから、結果として得られる非インタラクティブ証明は信頼性があるんだ。ただ、(a) これらのハッシュは非効率的で、(b) これまでのところ、標準的なハッシュを使うことで攻撃につながるような非作為的なプロトコルは見つかっていないんだよね。

じゃあ、現代のCSPRNGからは離れた方がいいかもね。例えば、YarrowやFortunaは、ランダムな入力データのソースを混ぜて、強力なハッシュ関数(今はsha-256)を使って、エントロピーを消費せずに任意の速さで出力を生成するんだ。で、これがプログラマーが何もわかってないっていう批判に対してだけど、これらのアルゴリズムはブルース・シュナイアーやニールス・ファーガソン、ジョン・ケルシーが開発したものなんだよ。

実際の論文の方が、この要約よりも読みやすくて理解しやすいと思う。 https://eprint.iacr.org/2025/118

私も結局、論文を読みに行ったよ。記事を読み進めるのが本当に難しかった。無駄に盛り上がった言葉、「嘘を証明する」とか、漏れたボートに対する過剰なこだわりとか... 著者は自分の専門外か、数学のコミュニケーションに不慣れな感じがした。でも、この記事は論文が提供しない少しの文脈を与えてくれる。ただ、正直言って、これはただの悪い記事で、無駄にセンセーショナルで、実際の知識を伝えることに失敗してる。

せめて記事の4段落目でそれに言及してるよ。こういう要約記事の多くはそういうことしないけどね。

このホワイトボードセッションもおすすめだよ!o.o https://blog.zksecurity.xyz/posts/pudding3/

俺の経験上、一般の人向けの暗号学の説明ってそんな感じだよ(ほとんど一般人だから)。アリスが洞窟に入って、ボブがどの出口から出るべきか叫ぶとか、アリスがボブにハミルトニアンサイクルを信頼なしで売ろうとするとか、アリスとボブがペンキのバケツを混ぜて郵送し合うとか、そういう複雑なアナロジーが一部の人には効果的かもしれないけど、俺には合わないな。

誰かが暗号システムを作って、初期オブジェクトのコンストラクタを保護するのを忘れて、他の人がそのコンストラクタを変更して好きなことをできるようになったって話を思い出す。でも結局、そのクリエイターたちはちょっと暗号について学んだウェブ開発者だったんだよね。そういう状況では、何百万コインが出入りするのは悲劇じゃなくて(少なくとも私にとっては)、非常にあり得る結果だと思う。

それは全然違う、関係ないタイプの脆弱性だね。大量のコイン盗難につながる実装ミスは確かに暗号通貨のニュースになるけど、暗号学のニュースにはならない。実際にピアレビューされたゼロ知識証明のスキームが破られるのは別の話。

彼がEthereumの暗号学者たちと意見を共有したとき、彼らがこの研究に不慣れだと知って驚いた。記事にタイムラインが含まれていたら良かったのに。Ethereumの研究者たちは2020年からGKRについて話しているから、知らないってことは考えにくいよね。

時間は「昨年の10月」とされていて、彼らが不慣れだった研究は、おそらく「どのハッシュ関数を使っても攻撃に脆弱な作為的証明プロトコル」だと思うよ。前の文に書いてあったし。

記事が言っている「この作業」はGKRではなく、記事の前半で言及されている作業だと思うよ。> 2000年代初頭、コンピュータ科学者たちは、Fiat-Shamirを経ると失敗するように特別に設計されたインタラクティブ証明プロトコルを考案したんだ。記事は、GKRをターゲットにするアイデアがイーサリアム財団の研究者のものだと指摘しているよ。> Soukhanovは、GKRプロトコルに基づくFiat-Shamir証明システムをターゲットにするアイデアを持っていたんだ。

これについてのホワイトボードセッションがあるけど、https://blog.zksecurity.xyz/posts/pudding3/

記事には詳細が足りないから、時間があれば今後論文をチェックしてみるつもり。でも、記事からの理解では、この攻撃は考慮されたプロトコルの前提を破ることで機能するみたいで、ランダムオラクルモデルとはあまり関係ないみたい。基本的に、使うプログラムに合意して、それをコミットメントの一部としてハッシュ化すれば、Fiat-Shamir変換を使ってプログラムの出力に関する主張を証明できるって言ってる。でも、悪意のあるプログラムを使うことを騙されて受け入れたら、プロトコルが破綻するのは自然だと思う。結局、最初にプログラムをハッシュ化するのは、合意した特定のバイナリを使っていることを保証するためだけど、そのバイナリが意図通りに動くかどうかを示すものではない。これはプロトコルの外で確認しなきゃいけないよね。何か見落としてる?それとも、ポイントはランダムオラクルモデルの下では、自分のハッシュを含むプログラムを書くのが難しいはずってこと?でも、ハッシュ化の一部と見なされない外部設定ファイルからハッシュを読むトリックは公平なのかな?

そう、君が見落としてるのは、これまでのFiat Shamirへの攻撃はかなり作り話だったってことだ。でも、論文は実際にROモデルで動作するプロトコルを破るかなりシンプルな方法が存在することを示している。そして、こういった効率的な攻撃は暗号学の世界ではかなり懸念される。だから、これは攻撃そのものの話ではなく、そんな簡単な攻撃が存在することについての話なんだ。

「プログラムを選ぶ」部分は曖昧だけど、多くの実用的なケースでは、ユーザーが入力データを選ぶことでプログラムを選ぶことになる。これは、君がCSの初期の頃に覚えているかもしれない「データ」と「プログラム」の間のあいまいな区別に戻る。より正確には、理論的なCSの視点から見ると、データとプログラムの間に明確な違いはない。ほとんどすべての実用的なZKスキームは、ユーザーが何らかの入力(例えば、ブロックチェーンの「現在の状態」を表すマークルツリーのルートや、キーや取引額のような秘密)を選ぶことを要求する。ある視点から見ると、異なる入力ごとに異なるプログラムが得られることになる。時々、これを「カリー化」や「部分評価」と呼ぶ人もいる。だから、最初に見えるよりも深刻な問題なんだ。

ここで見落としているのは、「悪意のあるプログラム」っていうのが、通常の「悪意」とは違う視点からのものだってことだよ。実際には元のプログラムと機能的に同じなんだ。つまり、同じ入力に対して同じ出力を返すし、何か秘密の入力があってそれが間違ったことをさせるわけじゃないんだ。それでも、修正が加えられたことで、FSがそれについて「偽のこと」を「証明」できるようになるから、「M(x)=y」を「証明」できるんだ。実際にM(x)を実行すると、yが得られないことがわかるのにね。

これがなぜ機能するのか(以前は機能しなかった理由)についての鍵はここにあるよ: https://community.intercoin.app/t/paper-shows-relying-on-has... 簡単に言うと、敵対的な環境で信頼できるランダムオラクルは、複数のソースや参加者からのランダム性に基づくべきなんだ。通常、そのソースは参加者の意味のある行動で、共謀を防ぐためのものなんだよね。ハッシュされる入力の空間が小さいと、ハッシュは真の一方向関数のほとんどの利点に対してあまり役に立たないことは、かなり前から知られているんだ。