従来のファジングは、生成した入力を大量に試してクラッシュを探す方式です。どれだけ試行を重ねても、試していない入力にバグがないままであることは示せません。今回の研究は、既存のファズテストを「このテストはどんな入力でも常に通る」という仕様に変換し、それを数学的に証明します。証明の対象はソースコードではなく、RISC-V向けにコンパイルされた命令列です。64MB未満のすべての入力に対して、メモリ安全性のエラーやアサーションの失敗なしにプログラムが正常終了することを示します。ただし前提条件があります。プログラムは単一スレッドの静的バイナリで、メモリ予算は固定、実行環境はモデル化されたRISC-VとLinuxプロセスの意味論です。
- 01 入力
既存のファズテスト
OSS-Fuzzが対象とするライブラリのテスト入口。AddressSanitizer付きでビルドし、クラッシュをバグの兆候として扱う。
- 02 変換
仕様の生成
「テストが常に通る」という規則を、RISC-VバイナリとLinuxプロセスの形式モデル上で定式化する。
- 03 証明
ClaudeがRocq証明を作成
証明の過程で見つかったバグはClaudeが修正し、修正後のコードを再コンパイルして証明する。
- 04 検証
Rocqカーネルが受理
証明チェッカーが仕様との整合を機械的に確認する。人は証明本文を全部レビューしない。
出典はAnthropicの研究公開(2026年10月22日付、2026年10月23日に確認)。開発者が信頼すべき対象は、RISC-VとLinuxプロセスの形式モデル、証明された定理の主張、Rocqチェッカー自体だとAnthropicは説明しています。
証明の規模は、典型的な1件で約60万行、対象バイナリの中央値は1万8000命令です。Anthropicは「これはライブラリにバグがないことを意味しない」と強調しています。残るバグは、信頼する構成要素の中か、証明の対象範囲の外にあります。
「これは、これらのライブラリにバグが存在しないことを意味しません。残るバグは、挙げた構成要素の中にあるか、証明の対象範囲の外にあります。」
This doesn't mean these libraries contain no bugs. Instead, it means that any remaining bugs either are to be found within the artifacts listed above or are outside the scope of Claude's proof.
証明を試みる過程そのものがバグ発見の手段になりました。Anthropicによると、過程で数百のバグが見つかり、Claudeが修正し、修正後のコードで証明し直しました。ファジングでは入力サイズが1MB程度に抑えられるのが一般的ですが、見つかったバグには約20MBの入力で起きるカウンタのアンダーフローに伴う境界外書き込み、64MBの入力と2GB超のメモリを必要とする画像デコーダの境界外読み取りがあり、既知の脆弱性CVE-2026-56132の再発見も含まれます。
研究公表(Anthropic)
- 範囲
- 123ライブラリ・239入口
- 保証の中身
- 64MB未満の全入力でクラッシュしない。修正済みコードを含む。
公開証明(GitHub)
- 範囲
- 25ライブラリ・60入口
- 保証の中身
- ASanとUBSanのビルドでエラーが起きないこと。終了性の証明は含まれない。
従来のファジング
- 範囲
- 同じテスト入口
- 保証の中身
- 試した入力の範囲でバグが見つからないことしか示せない。
出典はAnthropicの研究公開とTheoremのGitHubリポジトリoss-verify-proofs(2026年10月23日に確認)。公開リポジトリはRocq 9.2.0で証明を検証でき、リポジトリの説明は終了性、つまり必ず停止することの証明が今回の公開に含まれないことを明記しています。無限ループの不在は保証されません。研究全体の239入口と公開済みの60入口では範囲が異なります。
コストの低減も示されています。実OSS-Fuzzコードから作った36の小さな検証タスクで、Opus 5.5はOpus 5に比べ約40%少ないトークンで半数を証明しました。エージェント同士が証明を共有できる作業場を与えた場合は、単独作業より17%少ないトークンで済みました。証明は小さな証明の組み合わせとして再利用できるため、共有依存ライブラリの証明が蓄積すれば費用が下がる、というのがAnthropicの見立てです。TheoremはOSSのメンテナ向けに同じ工程を提供するOSS Verifyプログラムを案内しており、glibc、OpenSSL、cURLを含むNixエコシステム全体を検証するロードマップを公開しています。
この研究はメモリ安全性以外にも展開しました。Anthropicは、zlibのファイル形式を定義するRFC 1950を仕様として、Linuxカーネルの実装をx86コンパイル済みバイナリのレベルで証明しました。Rustで書いたPythonインタプリタの一部をVerusで検証し、ランダム生成した170万プログラムでCPythonと99.95%一致させた実験もあります。広く使われるPDFリーダーの検証では、1週間で例年1年分に相当するセキュリティバグを見つけたと報告しています。
限界の整理は明確です。AddressSanitizerが検出できない不具合、未検証のテスト入口、ライブラリを誤って使う呼び出し側のバグ、形式モデルが実機と異なる部分は保証の外です。実環境の多くはx86やARMで動的リンクされており、証明対象のRISC-V静的バイナリとは構成が異なります。「123ライブラリが完全にバグゼロ」と読むことはできません。それでも、テストの試行回数を増やす方式に対して、定めた条件の内側で失敗が起きないことを機械的に示す工程を、AIの力で大量に回せるようになった点是です。
出典
- Anthropic「LLMs are making formal software verification feasible at a much larger scale」2026年10月22日付。123ライブラリ・239入口・約1億8000万行の証明、64MB未満の入力対象と前提条件、バグ発見と修正、Opus 5.5のトークン効率、証明の再利用、zlibとPythonインタプリタの実験、限界の記述。2026年10月23日に本文確認。
- Theorem「oss-verify-proofs」GitHubリポジトリ25ライブラリ・60入口の公開証明、Rocq 9.2.0での検証方法、終了性が対象外であること、信頼対象の明示。2026年10月23日にREADME確認。
- Theorem「OSS Verify」メンテナ向けプログラムの案内。2026年10月23日に確認。
出典の確認日 2026.10.23