ニュース

ClaudeがNIST楕円曲線の「謎のシード」を解明、1997年の時刻が起点

Anthropicは10月16日、P-256などNIST標準楕円曲線のシード値が、C言語の乱数関数lrand48に1997〜98年の時刻を与えて作られていたことをClaudeが突き止めたと発表しました。25年以上説明のなかった値の出どころが分かり、バックドア説は大きく後退しました。

Anthropicは10月16日(米国時間)、TLSやパスキーで広く使われている楕円曲線P-256など、米国立標準技術研究所(NIST)の標準曲線を作るときに使われた「シード値」の出どころを、社内の研究用モデルが突き止めたと発表しました。シードは、C言語の標準ライブラリにある乱数関数 lrand48 に1997〜1998年の時刻を与えて作られていました。25年以上説明のなかった値の由来が分かったことで、「NSAが弱い曲線を仕込んだのでは」という疑いは大きく後退しました。暗号が破られたわけではなく、利用者が対応すべきことはありません。

何が謎だったのか

ECDSA(楕円曲線デジタル署名)は、2000年にNISTの規格FIPS 186-2で標準化されました。曲線の係数の1つは、20バイトの「シード」をハッシュ関数に通して決める仕組みです。こうしておけば、設計者が都合の良い曲線を選んだのではないことを示せる、というのが本来の狙いでした。ところが、そのシードを提供したのは米国家安全保障局(NSA)で、値がどこから来たのかは説明されていませんでした。

この空白は長く疑いの種になってきました。2013年には、NSAが関与した乱数生成器DualECDRBGにバックドアの疑いが報じられ、NISTが規格から外す事態になっています。暗号学者のKoblitz氏とMenezes氏は2015年の論文で曲線の由来を論じ、2023年には暗号技術者のFilippo Valsorda氏がシードの由来に懸賞金を掛けました。標準化に関わったJerry Solinas氏は2015年に「『ボブとジェリーに昇給を』のような冗談の文をハッシュした」と語っていましたが、今回の調査で、これは誤りだったことになります。

Claudeは何を見つけたのか

Anthropicの発表によると、社員の依頼を受けた社内の研究用モデルは、ヒントなしで「1990年代のCライブラリでよく使われた、出力に癖のある乱数生成器ではないか」と仮説を立てました。各シードをビット単位でずらしながら、34通りの生成器と出力の切り出し方を試すスキャナーを自作し、30分足らずで出どころを突き止めたとしています。モデル名は公表されていません。

決め手は、各シードを32ビットずつ5語に区切ると、10個のうち4個のシードで計20語すべての最上位ビットが0だったことです。偶然そうなる確率は1/5,810で、内部状態48ビットのうち上位31ビットだけを返す lrand48 の特徴と一致します。素数体の曲線のシードは各出力の一部しか使っていなかったため、格子基底簡約(LLL)という数学的な手法で内部状態を復元しました。状態を巻き戻すと、乱数の初期化に使われたUnix時刻(1970年1月1日からの秒数)が現れます。

シードの元になった時刻(UTC)
出典: Anthropic「Claude reveals ECDSA curve origins」(2026年10月16日)

生成の手順は「時刻で乱数を初期化し、20バイトの候補を順に作り、条件を満たした最初のものをシードにする」というものでした。P-256は1,842回目の候補です。2進体上の曲線B-233など4つも関連する方式で説明でき、P-192など6曲線の基準点(G)の作り方も再現できたとしています。基準点の由来が説明されたのは初めてだといいます。

なぜ「安全」と言えるのか

Anthropicは、これは「暗号の破綻でも、新しい攻撃でも、ECDSA曲線の弱点でもない」と明言しています。シードが時計と単純な乱数生成器から機械的に作られていたなら、狙った弱い曲線を選ぶ余地は小さく、バックドア説は「はるかにありそうにない」というのが同社の見解です。

ただし、未解決の点も正直に書かれています。P-256の生成では876回目の候補も条件を満たしていたのに採用されておらず、P-224でも3つ、ANSIの例示曲線でも7つの候補が飛ばされていました。選別の基準は分かっていません。B-163のシードや、P-224・P-256・P-384・P-521の基準点の由来も未解明です。懸賞金の36,864ドルは、Let's Encryptを運営するISRGに寄付されます。

今回の発表の要点
出典: Anthropic「Claude reveals ECDSA curve origins」(2026年10月16日)

日本の読者にとっての意味

P-256は、Webサイトの証明書、パスキー(WebAuthn)、JWTの署名方式ES256など、日本のサービスでも日常的に使われています。今回の結果は、これらの安全性の前提を変えるものではありません。Curve25519など別の曲線へ移る理由にもならないと考えられます。

実務に効くのは、むしろ逆向きの教訓です。lrand48 のような標準の乱数関数は、出力の一部から内部状態を復元でき、初期化に時刻を使えば値の候補も絞られます。27年前の値でさえ、AIが30分足らずで生成過程を言い当てました。トークンや合言葉、IDを rand() や Math.random()、時刻を種にした乱数で作っているコードは、同じ手順で予測される可能性があります。

AIを研究の道具として使う流れも続いています。Anthropicは9月にフェルマーの最終定理の形式化を発表しており、今回は暗号の「考古学」に広がった形です。

次にやること

  • 自社コードで、秘密の値を rand() や Math.random()、時刻を種にした乱数で作っていないか検索し、OSの暗号用乱数(crypto.getRandomValues や Pythonの secrets など)に置き換える
  • 発表に載っている再現用のPythonコードを動かし、P-256のシードが1997年8月16日の時刻から出てくることを手元で確かめてみる
  • 社内で「NIST曲線は危ないのでは」と質問されたら、この発表を根拠に「現時点で対応は不要」と説明できるようにしておく

出典

関連記事

ニュースの記事 →