10月16日、madrobot.blogが「Claude cracked a 25-year NSA cryptography mystery in under half an hour, Anthropic says」と題した記事を公開した。AnthropicのAIモデル「Claude」がNISTの楕円曲線暗号に関するNSA起源の25年来の謎を30分以内に解明した、というものだ。その謎の答えは、1990年代のUnix標準ライブラリに含まれる平凡な乱数関数だった。
25年間誰も解けなかった「シード」の謎
ECDSA(楕円曲線デジタル署名アルゴリズム)は、WebのTLS通信やデジタル署名の根幹を支える暗号標準だ。NISTが2000年に採用したこの規格に含まれるP-192、P-224、P-256、P-384、P-521という楕円曲線には、それぞれ20バイトの「シード値」がある。このシード値を元にハッシュ計算を行って曲線のパラメータが導出される。
問題は、そのシード値がどのように選ばれたか、NSAが一切説明しなかった点だ。P-256のシードを例に挙げると、C49D3608 86E70493 6A6678E1 139D26B7 819F7E90 という値が使われているが、その出自は長年不明のままだった。
暗号コミュニティでは「NSAが意図的に弱い曲線を仕込んだのではないか」という疑念が根強くあった。特に2013年のSnowden文書の暴露により、NSAが別の乱数生成標準「Dual_EC_DRBG」にバックドアを意図的に埋め込んでいたことが明らかになって以降、ECDSAの曲線シードへの疑念も一層強まった。「説明されていない定数」は即座に陰謀論の温床となる時代に突入していたのだ。
唯一の手がかりは、曲線を設計したNSAの数学者Jerry Solinasが2015年に残した証言だ。
シードは「BobとJerryに昇給を」とか「BobとJerryは最高」とかそういうジョークフレーズのハッシュだった。実際にコードを書いたのはBob Reiterで、彼も詳細は覚えていない。
— Jerry Solinas(NSA数学者)、2015年
Solinasは2023年に死去した。同年、暗号研究者のFilippo Valsordaがシード解明に対して**$12,288の懸賞金を設定し、寄付を条件に$36,864**に増額した。Anthropicのスタッフもジョークフレーズのブルートフォース探索を試みたが、成果はなかった。
Claudeがたどり着いた答え:lrand48
Anthropicの研究者がClaude(社内研究モデル)にこの謎を投げかけたのは、懸賞設定後のことだ。ただし「ジョークフレーズのハッシュ」という手がかりは意図的に与えなかった。
Claudeはフレーズ探索ではなく、まったく異なるアプローチを選んだ。「1990年代のCライブラリに標準搭載されていた乱数生成器の出力ではないか」と推論し、その検証コードを自ら書いて走らせたのだ。
着目したのは各シードのビットパターンだ。10個のシードのうち4個で上位ビットがすべて0というパターンが見つかった。Anthropicはこれが偶然起きる確率を1/5,810と計算している。このパターンは、Unix/Linux標準のC乱数関数であるlrand48の特徴的な出力と一致した。lrand48は31ビットの非負整数を返す関数で、上位1ビットが常に0になるという性質を持つ。
lrand48の内部状態を特定するために、Claudeは格子基底簡約(Lattice Reduction)と呼ばれる手法を用いて出力から内部状態を逆算し、シードの初期値まで遡った。格子基底簡約とは、多次元の格子構造を数学的に解析することで線形合同法ベースの乱数生成器の内部状態を復元する攻撃手法だ。
結果、P-256のシードは1997年8月16日01:52:34 UTCを起点にしたlrand48の出力であり、その実行で生成された1,842番目の20バイト候補だったことが判明した。全prime曲線のシードが、1997年5月〜1998年4月のUnixタイムスタンプにたどり着いた。
Anthropicが公開したClaudeの推論記録には、解明の瞬間のこんなやり取りが残っている。
「これは衝撃的だ。25年来の謎が解けた。……待て、懐疑的になろう」
(原文:"This is incredible. I think I've solved a 25-year-old mystery. ...Wait, let me be skeptical about this.")
バックドアの否定と残る疑問
Anthropicはこの発見がECDSA自体の破綻を意味するものではないと強調している。むしろ逆だ。誰でも再現可能な時計ベースの乱数生成器が使われていたことが証明されたことで、NSAが意図的なバックドアを仕込む余地はほとんどなかったことが示された、というのがAnthropicの見解だ。
ただし、謎がすべて解けたわけではない。
- P-256の同じ実行で生成された876番目の候補も有効な曲線になり得たにもかかわらず、なぜスキップされたかは不明
- B-163(2進体曲線)のシードは依然として未解明
- P-224、P-256、P-384、P-521の基点(base point)の出自も不明のまま
また今回の結果はAnthropicによる独自調査であり、第三者による独立検証はまだ行われていない。ただし、シードを再生成するコードはすでに公開されており、検証は誰でも試みられる状態にある。
懸賞金**$36,864**は、Let's Encryptを運営する非営利団体Internet Security Research Groupに寄付される。
何が変わるか
ジョークフレーズを探し続けた暗号研究者たちが何年も解けなかった問題を、AIが約30分で解いた。しかも答えは「ジョークフレーズ」ですらなく、誰でも入手できる標準ライブラリの乱数関数だった。
今回の結果でECDSAの安全性が揺らぐわけではなく、ユーザーが何か変更すべきことはない。ただ、暗号設計の透明性という観点では重要な教訓が残る。NSAが当初から「lrand48を時刻シードで使った」と公表していれば、25年間の疑念も懸賞金も、Claudeを使った調査も必要なかった。「説明されていない定数は信用されない」という原則の重さを、あらためて示した事例といえる。
詳細はClaude cracked a 25-year NSA cryptography mystery in under half an hour, Anthropic saysを参照していただきたい。