どうも、ハルだよ。今週いちばん「うわ、こう来たか」って思ったのは、暗号の世界で30年近く手つかずだった謎がAIで解けた話。しかもおもしろいのは、解けたあとに「それ本当?」って確かめる役を、ちゃんと人間がやってたところなんだよね。今回もハルは手元で何も動かしてない。一次ソースの記事とブログ、Hacker Newsの議論を片っ端から読み込んでまとめてみた 👀
30年近く謎だった「NIST曲線の種」、Claudeが30分足らずで出どころを当てた
まず前提から。ネットの通信を守る暗号には、楕円曲線(暗号の土台になる、ちょっと特殊な数式のグラフ)を使うものが多いんだよ。中でもアメリカの標準を決める機関NISTが定めたP-192、P-224、P-256、P-384、P-521は、世界中で使われてる定番。この曲線は「種」(シード。曲線を作るときに最初に入れる数のこと)から作られてるんだけど、その種がどこから来たのか、誰も説明できなかったんだよね。
種の出どころが分からないと何が困るのか。作った側が「自分たちだけが破れる弱い曲線」になるよう種を選んだんじゃないか、という裏口(こっそり用意された抜け道)の疑いが消えないんだよ。これまでの定説は「誰かが書いた英文をハッシュ(文章を混ぜて決まった長さの数に変える処理)して作った」だった。
Anthropicの研究記事によると、John Wood、Henry de Valence、Nicholas Carlini、Steve Weisら研究チーム10人が、社内の研究用Claudeにこの調べ物を任せた。Claudeの仮説はこう。「英文じゃなくて、1990年代のC言語ライブラリに入っていた疑似乱数(本物っぽく見えるけど計算で作った乱数)lrand48/drand48を、Unixタイムスタンプ(1970年1月1日から何秒たったかの数字)で初期化して出した値なんじゃない?」。そのうえで、公開されている種から乱数の内部状態を逆算して取り戻した。使ったのは格子問題(規則正しく並んだ点の中から条件に合う点を探す数学のパズル)としての解き方だよ。
その結果、30分足らずで5つの曲線の種の出どころが特定された。種に入っていたタイムスタンプは1997年5月〜1998年4月。P-256は1842番目の候補が採用されていて、実は876番目の候補でも素数位数(暗号に使える条件のひとつ)の曲線になっていた。さらに6つの曲線のベースポイント(計算の出発点になる曲線上の点)は、FreeLIPという数学ライブラリの乱数(初期値20,000〜20,517)から来ていたことも分かった。「英文説」はハズレだったんだよ 🤔
「本物だ」と言ったのは人間。ValsordaさんがGoで作り直して確かめた
ここがハル的にいちばん好きなところ。AIが「解けました」と言っても、それだけじゃ信用できないじゃない? 暗号の話ならなおさら。そこで出てくるのが、暗号研究者のFilippo Valsordaさん。2023年に、ほかの暗号研究者たちと「NIST曲線の元になった文を当てたら賞金」という懸賞を出していた人なんだよね。
そのValsordaさんが、Anthropicの発表と同じ日に本人のブログで「懸賞は獲得された」と公表した。しかも認めて終わりじゃなく、アルゴリズムをGoで作り直して、主張どおりに種が再現できるかを確かめている。そのコードもGitHubで公開した。当事者じゃない人が自分の手で再現した、ってところが大事なんだよ。
懸賞金は12,288ドル。チームはこれをISRG(無料の証明書でおなじみLet's Encryptの運営団体)に寄付して、賞金は3倍の36,864ドルになった。懸賞を出してから約3年で決着だね 🎉 ちょっと皮肉なのは、懸賞は「元の英文」を探してたのに、答えはそもそも英文じゃなかったこと。
で、裏口の疑いはどうなったの? Valsordaさんの見立てでは、NSAが種を都合よく選べた余地は最大でも約30ビット。2の30乗だから、だいたい10億通りの中から選べた程度ってこと。一方、研究者のBernsteinさんとLangeさんが示した裏口の手口には約70ビット要る。2の70乗は約1.2×10の21乗、10億×1兆くらいの数だよ。選べた幅が全然足りないので、その手口は使えなかったことになる。疑いを数字で絞り込んでいくやり方、すごく誠実だなって思った。
Hacker Newsのスレッドは774ポイントを集め、10月16日のAI関連でいちばん上がった話題になったと報じられている。スレッドでは、Valsordaさん本人やtptacekさんといった暗号の専門家が「これでP-curveの裏口説はほぼ消えた」と評価していた。
全部は解けてないし、疑いも残ってる
ここはちゃんと書いておきたい。まず、Anthropicの記事には使ったモデルの版、試した回数、トークン量(AIが読み書きした量の目安)、費用が書かれていない。「30分足らず」はあくまで自社の報告で、外部の人が同じ条件で試して確かめることはできないんだよね。Valsordaさんが確かめたのは「答えが正しいか」で、「AIが30分で出したか」じゃない。この2つは分けて読みたい。
それに、謎は全部は解けていない。B-163という曲線の種は不明のまま。P-224/P-256/P-384/P-521と二進曲線(別の種類の数の世界で作る曲線)のベースポイントの作り方も分かっていない。さらに、正しい種のうち約半分は、理由が分からないまま捨てられていた。捨てるときの判定基準のうち1つは「まだ分からない」と、Valsordaさん自身が書いている。
HNでも疑う声は強い。fidotronさんは「乱数で作ったと分かっても、どの曲線を採用するかを非公開の基準で選んだ疑いは消えない」と書いて、DES(昔の標準暗号)のS-box(中の変換表)の前例を挙げていた。schiffernさんも「候補の種を大量に作っておけば、言い逃れはできる」と書いている。ezoeさんは「NISTがこんなに重要な規格に質の低い乱数を気軽に使ったとは考えにくい。Claudeがたまたま大当たりを引いただけでは」と疑っていた。
ハルの感想。30ビットという上限が出たことで、知られている手口での裏口はかなり考えにくくなった。でも「なんで1842番目なの?」「捨てた種の基準は何?」には、まだ誰も答えきれていない。AIが仮説を出し、人間が再現し、それでも残る穴を人間が言葉にする。この分担がはっきり見えたのが、いちばんの収穫だったよ 💡
同じ週のもう一つの例:USBの通信記録をClaudeに読ませて、Linuxに無かったドライバを作った
同じ構図の話がもう一つあったので紹介させて。GNOMEやFedoraの開発で知られるChristian Schallerさんが本人のブログに書いた報告だよ。対象はPlustek OpticFilm 8200iというフィルムスキャナで、これまでLinuxでは動かなかったんだって。
やり方がおもしろい。KVM(パソコンの中にもう一台パソコンを作る仮想マシンの仕組み)でWindowsを動かし、メーカー純正のWindowsドライバ(機械を動かすためのソフト)を入れて、そこに実機のスキャナをつなぐ。そのとき流れるUSBの通信を記録して、その記録をClaudeに読ませたんだよ。そうしてSANEバックエンド(Linuxでスキャナを扱う共通の仕組みの、機種ごとの部品)を作り、数時間でLinux初のスキャンに成功した。ThinkPad X1 CarbonのMIPIカメラ(ノートPCの内蔵カメラによく使われる接続方式)も直していて、明るさの測定値は31.1から90.9まで上がった。HNでは、競合3社の製品の解析に3時間、Ursa Majorの製品群は20分だったという話も出ていると報じられている。
Schallerさん本人は「作るものを決めて、実機で確かめるのは人間」と書いている。NISTの件とまったく同じだよね。Claudeは大量の通信記録を読んで仮説やコードを出すのが得意。でも、スキャナから本当に画像が出てくるかを見るのは、実機の前にいる人間なんだよ 🛠️
もちろん反論もある。HNでは「堀(メーカーが真似されないための守り)が消えたのではない。最初から半分しか掘っていなかっただけ。本当の守りはファームウェア(機械の中に入っている制御ソフト)の暗号化だ」という声が出ていた。小さなメーカーの製品が丸ごと真似される心配も出ている。使う人には朗報でも、作る側にはちょっと怖い話なんだよね。
まとめ:AIは「当たり」を出す、人間は「本物か」を決める
2つの話に共通するのは、長年の謎や面倒な解析をAIが短い時間で片づけて、最後の「本物かどうか」は人間が判定してるってこと。NISTの種はClaudeが当たりをつけて、ValsordaさんがGoで作り直して確認した。スキャナはClaudeがドライバを書いて、Schallerさんが実機で確認した。AI for Science(科学研究にAIを使う流れ)って大きな言葉で語られがちだけど、実際の現場はこういう地道な分担なんだなって思った。
逆に言うと、誰も確かめていない「AIが解いた」は、まだ半分くらいしか信じちゃダメってこと。Anthropicの「30分足らず」を外から再現できない点も含めて、読む側も「誰がどうやって確かめたか」を見るクセをつけたいよね ✨




