インターネットの通信を暗号で守るしくみの一つに、「楕円曲線」を使った署名方式ECDSAがある。その楕円曲線の設計には、2000年にアメリカ国立標準技術研究所(NIST)が標準化して以来、出どころを一度も説明されないまま25年使われてきた数字があった。2026年10月、Anthropicの社内研究用AIモデルが、手がかりを一切与えられないまま30分足らずでその数字の正体を突き止めた。特別な暗号的な仕掛けではなく、当時ありふれていた乱数生成器に、ある日時を入力しただけのものだった。なぜそれが25年も謎のままだったのか、そして何が手がかりになったのか。
疑われ続けた25年
この署名方式の土台になる楕円曲線は、長年何を疑われてきたのか。NISTは2000年、FIPS 186-2という規格でP-192・P-256・P-384など複数の楕円曲線を標準化した。ECDSAは、楕円曲線暗号の中でも最も広く使われている標準だという(Anthropic公式記事)。曲線の形を決める係数の一部は「シード値」と呼ばれる数字から計算されており、このシード値はNSA(アメリカ国家安全保障局)から提供された。ただし、どうやってその数字を選んだのかという説明は一切なかった(Anthropic公式記事)。
説明のない数字は、疑いを呼ぶ。「NSAが解読できる弱い曲線をあらかじめ選び、裏口(バックドア)を仕込んだのではないか」という懸念は、暗号研究者の間で長く語られてきた。2015年には、この経緯を整理した論文「A Riddle Wrapped in an Enigma」が発表されている(Koblitz・Menezes, 2015)。
同じ2015年、元NSA職員のJerry Solinas氏が「ユーモラスな合言葉をハッシュ化して作った」と説明したという話が広まった。これは誤りだった。Solinas氏は2023年に亡くなっており、当時の同僚からも詳しい経緯は確認できないままだった。空白はそのまま、25年近く埋まらなかった。
手がかりは先頭ビットの偶然
この空白を、Anthropicの社内研究用モデルはどうやって埋めたのか。きっかけは、ある社員の好奇心だった。謎を解くための手がかりを何も示さないまま、社内の研究用AIモデルへシード値の出どころを尋ねた(Anthropic公式記事)。
モデルが最初に気づいたのは、シード値を32ビットずつ5つに区切ったときの並び方だった。5種類の曲線(P-192・P-224・P-256・P-384・P-521)のうち4つで、5つの区切りすべての先頭ビットがそろって0になっていた。この偶然が起きる確率は1/5,810だという(Anthropic公式記事)。偶然では説明しにくい、際立った並び方だ。では、なぜこの偶然が、シード値の正体を割り出す手がかりになったのか。
乱数生成器と日付の正体
先頭ビットがそろって0になる並び方は、C言語の標準的な乱数生成器「lrand48」の出力特性と一致していた(Anthropic公式記事)。lrand48は48ビットの内部状態を持ちながら、外部に返す値は上位31ビットだけに限られる(lrand48のマニュアルページ)。残りの17ビットは計算に使われていても、出力には一切現れない。モデルはこの「見えない17ビット」を総当たりした。2の17乗、約13万通りの候補を試し、内部状態を復元した。素数体を使う曲線については、LLL格子基底簡約という別の手法でも同じ結果を確かめている(Anthropic公式記事)。
ここまでで分かったのは、シード値が特別な暗号学的操作の産物ではなく、ありふれた乱数生成器の出力だったという事実だ。問題は、その乱数生成器に何を種として与えたかだった。
復元した内部状態を数値として読み直すと、1997年から1998年にかけての日時を表すUnixタイムスタンプが浮かび上がった。P-256のシード値は、1997年8月16日1時52分34秒(協定世界時)を種にした乱数列から再現できる。1842番目に生成された候補が、公表されているシード値と一致した(Anthropic公式記事)。25年間、暗号学的な謎として語られてきた数字の正体は、「ある日のある瞬間の時刻」だった。
| 曲線 | 復元された初期時刻(UTC) |
|---|---|
| P-192 | 1997年5月18日 14:45:34 |
| P-256 | 1997年8月16日 01:52:34 |
| P-224 | 1998年4月3日 12:52:07 |
この表の日時は、NISTの担当者がシード値を作業していたおおよそのタイミングを示している(Anthropic公式記事)。
シードだけでなく、各曲線の基点(G、曲線上の計算の出発点になる座標)についても、一部の生成方法が分かっている。prime192v2などいくつかの曲線の基点は、「FreeLIP」というソフトウェアの乱数生成器から作られていた。暗号学者Arjen Lenstra氏が開発したもので、2万前後の整数をシードとして与えている(Anthropic公式記事)。
では、この発見によって25年来の疑惑は晴れたと言えるのか。
分かったことと残る謎
生成方法が単純で誰でも再現できる手順だったという事実は、意図的なバックドアが仕込まれた可能性を大きく下げる。 NSAが特別な計算で弱い曲線を選び出した形跡はない。当時の標準的な乱数生成器に、日時を入力しただけの再現可能な手順だったからだ(Anthropic公式記事)。
この発見はECDSAの脆弱性を示すものではない。これを読んでいる人が、何か設定を見直す必要もない。
ただし、すべての謎が解けたわけではない。公式記事は、残る不明点を次のように挙げている。
- P-224・P-256・P-384・P-521と、二値体を使う曲線の基点(G)の生成方法は未解明
- 二値体を使う曲線の一つ「B-163」のシード値は、今回の手法では説明できていない
- P-256では条件を満たす876番目の候補が使われず1842番目が採用されるなど、候補が選ばれたり外れたりした基準は不明
- 乱数生成器を何回実行したかという具体的な回数も分かっていない
懸賞主である暗号技術者のFilippo Valsorda氏も、留保を残している。自身の確認記事で「有効なシード数が、公表されている数より多くなる点は説明できていない」と述べた(Filippo Valsorda氏の確認記事)。
もう一つ、自分が読んでいて引っかかったのは、調査にあたった主体の名前の扱いだ。Anthropic公式記事のタイトルは「Claude reveals ECDSA curve origins」とあり、「Claude」を名乗っている。しかし本文で調査を担ったと説明されているのは「社内の研究用モデル」とだけで、具体的なモデル名やバージョンは書かれていない。懸賞を設けたValsorda氏自身の確認記事も、「Claude」という名称には一度も触れず、受賞者としてAnthropicのメンバー10人の名前だけを挙げている。どのモデルが、どんな形で関わったのかまでは、公開された情報からは特定できなかった。
この調査は、Valsorda氏が約3年前に設けた懸賞「NIST Elliptic Curves Seeds Bounty」への解答になった。懸賞金36,864ドルは、非営利団体Internet Security Research Groupへ寄付されている。無料のSSL/TLS証明書を発行するLet’s Encryptの運営元だ(Filippo Valsorda氏の確認記事)。
まとめ
NISTの楕円曲線シード値の出どころは、特別な暗号的操作ではなかった。1990年代の標準的な乱数生成器lrand48に、1997〜1998年のUnixタイムスタンプを種として与えた結果だった。
Anthropicの社内研究用モデルは、シード値のビットパターンに残っていた1/5,810という偶然の規則性から乱数生成器を特定した。見えない17ビットを総当たりして内部状態を復元し、具体的な日時まで逆算した。この発見はECDSAの脆弱性ではなく、意図的なバックドアが仕込まれた可能性を下げるものだ。一方で、基点の生成方法や一部のシード値、候補が選ばれた基準は今も未解明のまま残っている。懸賞金は、Let’s Encryptを支える非営利団体への寄付という形で決着した。
コメント
気づきや感想をどうぞ記事への補足や、読んで考えたことをお寄せください。個人情報や、他の人を傷つける内容の投稿はお控えください。
投稿にはGoogleログインが必要です。
Googleでログイン投稿にはGoogleアカウントの表示名が公開されます。メールアドレスは取得・公開しません。
コメントを読み込んでいます…