Anthropicは2026年10月16日、電子署名方式ECDSAで使われるNIST標準楕円曲線の「シード」が、1997〜1998年の時刻をもとに生成されていたことを突き止めたと発表した。社内の研究用AIモデル「Claude」が30分未満で生成方法を解明したといい、長年謎だったシードの由来を再現するコードも公開している。この問題の解決に懸賞金を設けていた暗号技術者Filippo Valsorda氏も、独自の実装で結果を検証したと報告した。今回の成果は、標準曲線の選定過程に意図的な弱点が仕込まれたのではないかという疑念を和らげるものだが、曲線の候補を選別した理由や、一部の基点の由来については依然として不明な点が残っている。

AD

1997年の時刻から生成された20バイトのシード

今回の研究対象は、米国国立標準技術研究所(NIST)が標準化した、素体上で定義される5つの楕円曲線だ。P-256などの曲線には、係数を導くための公開値である「シード」が付属している。このシードをSHA-1で処理し、その結果から曲線のパラメーターを求める手順は以前から知られていた。しかし、そもそもシード自体がどのように選ばれたのかについて、曲線を提供した米国家安全保障局(NSA)は説明していなかったという。

この不透明さが、意図的に弱点を持つ曲線が選ばれたのではないかという疑念につながっていた。例えば、P-256のシードは160ビットの値で、16進数ではC49D360886E704936A6678E1139D26B7819F7E90と表される。値そのものは公開されているため、そこから曲線のパラメーターを再計算することはできる。しかし、なぜこの特定の値が採用されたのかは分からず、選定過程の透明性が長年の課題となっていた。

Anthropicが明らかにした生成方法は、比較的単純なものだった。まず、Unix時刻を使ってC言語の標準ライブラリにある擬似乱数生成器lrand48を初期化し、その出力から上位8ビットを1バイトずつ取り出す。こうして20バイトを集めてシード候補を作り、対応する曲線が所定の条件を満たすかを調べる。採用されなければ次の20バイトを使って新たな候補を作り、同じ処理を繰り返す仕組みだ。

P-256の場合、乱数生成器の初期化に使われた時刻は1997年8月16日01時52分34秒(UTC)で、採用されたシードは1842番目の候補だった。これにより、由来が不明だった160ビットの値を、特定の時刻と候補番号から再現できるようになった。従来は「シードが何らかの文章のハッシュから作られたのではないか」という推測もあったが、今回の発見は異なる生成方法を示している。ただし、これはシードを作るまでの手順に関する発見であり、シードからSHA-1を使って曲線のパラメーターを導く既知の処理を否定するものではない。

乱数生成器の特徴から1997年の時刻を特定

Anthropicによると、Claudeはシードの元になった文章を探すのではなく、1990年代のソフトウェアで使われていた乱数生成器に着目した。当時のCライブラリに付属する擬似乱数生成器であれば、出力に固有のパターンが残っている可能性がある。公開されたシードの数値的な特徴から、生成に使われたソフトウェアを逆算して絞り込むという発想だ。

手がかりとなったのは、一部のシードを32ビット単位に区切ると、最上位ビットがいずれも0になるという特徴だった。lrand48は最上位ビットが0の値を出力するため、その出力を並べれば同じような偏りが現れる。ただし、NISTの素体曲線に使われたシードには、乱数生成器の出力の一部しか残されていなかった。このため、ビットの偏りを確認するだけでは、乱数生成器の内部状態を特定できなかった。

そこでClaudeは、一部が欠けた出力から内部状態を復元する問題に、格子基底簡約の手法である「LLLアルゴリズム」を適用したという。この方法によって48ビットの内部状態を復元し、そこからシード全体の160ビットを再現することに成功した。さらに、乱数生成器の状態を逆向きにたどることで、初期化関数srand48が生成する形式の状態を特定した。その値を調べたところ、1997年5月から1998年4月までのUnix時刻に対応していた。

もっとも、1990年代の日付に相当する数字が見つかっただけでは、シードの生成方法を解明した証拠として十分ではない。今回の説明を裏付けているのは、公開済みのシードを最後まで正確に再現でき、複数の曲線で同じ乱数生成器の使い方が確認されたことだ。なお、Anthropicが説明する「30分未満」という時間は、今回の探索に要した時間として同社が報告したものであり、特定のAI製品の一般的な問題解決能力を測定した結果ではない。使用モデルについても、同社は社内の研究用Claudeと説明している。

AD

シードの由来が判明しても、曲線選定の謎は残る

NISTの5つの素体曲線については、すべてのシードの生成方法が再現されたものの、曲線の「基点」まで由来が判明したのはP-192だけだった。基点とは、楕円曲線上にあらかじめ定められた点Gのことで、公開鍵を計算する際の出発点となる。シードは曲線の係数を決めるための値であり、その生成方法が分かっても、基点の選定方法まで自動的に明らかになるわけではない。

Anthropicが公開した再現コードと基点に関する説明をもとに、NISTの5つの素体曲線について判明した内容を整理すると、以下のようになる。表の日時は、乱数生成器の初期化に使われたと考えられるUnix時刻をUTCで表したものだ。ANSI X9.62の例示曲線や2進体の曲線は含めていない。

NIST曲線 シード生成器の初期化に対応する日時(UTC) 採用候補の番号 基点の由来
P-192 1997年5月18日14:45:34 139 FreeLIPの生成器で再現
P-224 1998年4月3日12:52:07 7026 未解明
P-256 1997年8月16日01:52:34 1842 未解明
P-384 1997年8月30日14:50:08 2688 未解明
P-521 1997年8月8日01:12:04 1136 未解明

P-192の基点については、多倍長整数演算パッケージ「FreeLIP」の乱数生成器が使われていたことが分かったという。小さな整数で乱数生成器を初期化し、最初の7つの出力を捨てた後、曲線上の点として使えるx座標を探すことで再現できる。Anthropicは、ANSI X9.62に含まれる5つの例示曲線でも同じ生成方法を確認した。一方、P-256を含む残り4つのNIST素体曲線の基点は、この方法では再現できなかった。

さらに、シードの生成方法が分かっても、数多くの候補から特定のシードを採用した理由は完全には説明できていない。例えばP-256では1842番目の候補が採用されているが、それより前の876番目にも、適切な大きさの素数位数を持つ曲線が存在する。つまり、基本的な条件を満たす候補が見つかっても、それが採用されるとは限らなかった。P-224でも3つの候補が飛ばされており、乱数生成器の特定と、候補の選別基準の解明は別の問題として残されている。

この問題を詳しく検証したのが、懸賞金を設けていたFilippo Valsorda氏の報告だ。同氏はGo言語で生成手順を独自に実装し、ANSI X9.62に記載された条件だけでは候補の選別を再現できず、文書化されていない追加条件が2つあると指摘した。そのうち1つは、曲線の位数nのビット長が、曲線を定義する素数pのビット長を超える候補を除外するという条件だ。これは単にnがpより小さいことを要求するものではなく、ANSI X9.62の例示曲線「prime239v2」では、実際にnの方がpより大きい。

しかし、この条件を追加しても、採用されなかった候補のすべてを説明できるわけではない。Valsorda氏は、曲線の検証処理が同じ乱数列を消費していた可能性や、当時のプログラムに不具合があった可能性などを検討しているが、残る候補の不一致を説明できる仕組みは見つかっていないという。それでも、シードを生成する手順が再現可能になったことで、どの候補が、なぜ飛ばされたのかを具体的な番号に基づいて調べられるようになった。従来は漠然とした疑問だった選定過程の不透明さが、検証可能な技術的課題として整理された形だ。

意図的な弱点への疑念は後退、安全性の完全な証明ではない

Anthropicは今回の成果について、ECDSA曲線に新たな攻撃手法や脆弱性を発見したものではなく、意図的な弱点を仕込まずに曲線が選ばれたという確信を強めるものだと説明している。今回復元されたのは、公開パラメーターを生成した際の乱数生成器の内部状態であり、ECDSAの利用者が保持する秘密鍵ではない。したがって、この発見によって既存の秘密鍵が漏洩したり、直ちに電子署名の安全性が損なわれたりするわけではない。同社も利用者に対して設定や利用方法の変更を求めていない。

Valsorda氏は、曲線の選定過程に意図的な弱点を仕込む余地がどの程度あったかについても評価している。1997〜1998年の任意の時刻を選び、さらに最初の16個の素数位数を持つ候補から自由に選択できたと仮定しても、選定者が利用できる自由度は約30ビットにとどまるという。これは、過去に議論された特定のバックドア仮説が前提とする70ビットの自由度を大きく下回る。そのため、同氏はその仮説に基づく手法を排除できるとの見解を示しているが、これは一定の仮定に基づく評価であり、NIST曲線の安全性全般が数学的に証明されたことを意味するものではない。

また、今回の解明には対象範囲の限界もある。2進体の曲線「B-163」のシードは依然として未解明であり、ほかの4つの2進体曲線についても、時刻を半分にして乱数生成器を初期化したという解釈には留保が付いている。今回公開された成果も、Anthropicによる技術解説と再現コード、Valsorda氏による独立した実装と検証報告が中心だ。すべての曲線について、生成から採用までの過程が完全に説明されたわけではない。

なお、Valsorda氏によると、Anthropicの研究チームが懸賞金を請求したのは10月15日だった。賞金は寄付を選択したことで3倍の36,864ドルとなり、Let's Encryptを運営する非営利団体Internet Security Research Group(ISRG)に寄付される。長年続いたシードの由来をめぐる懸賞は決着したが、採用されなかった候補の選別理由や、未解明の基点については、当時のプログラムや開発者の判断を裏付けるさらなる証拠が必要になる。今回の成果の重要性は、これまで推測に頼るしかなかった標準曲線の生成過程を、具体的な時刻とコードによって検証できるようにした点にある。