全球最多人用的數碼簽名,建基於幾條來歷不明的曲線。 人人問了 25 年:曲線的種子,到底從哪裏來?會不會藏着後門? Claude 用了不到半小時,找到了答案——答案普通得令人意外。
2000 年,NIST 公布 ECDSA 曲線。種子來自 NSA,出處不明。
傳聞說種子是某句搞笑說話的雜湊。追查多年,無果。還有人懸賞找答案。
Claude 不猜句子,猜軟件。它認出舊程式 lrand48 的指紋,再用格演算法倒帶。
每個種子都倒帶回一個時間戳:1997 年 5 月至 1998 年 4 月。謎底:只是時間。
ECDSA 是什麼?為何一粒種子咁重要?
ECDSA 是一種數碼簽名標準。它的工作是證明:「這段訊息,真的是我發出的。」
銀行交易靠它。網站證書靠它。軟件更新也靠它。它是全球用得最廣的橢圓曲線密碼標準。
簽名建基於一條橢圓曲線。每條曲線,由一組數字定義。其中一個關鍵數字叫 b。
b 不是隨手挑的。它由一粒「種子」算出來:先把種子雜湊一次,再把結果放進曲線公式。
種子長 20 個位元組。寫出來,是一串十六進制數字。以最常用的 P-256 曲線為例,它的種子是:
冇解釋、冇檔案、得一句傳聞。
2000 年,美國國家標準技術研究院(NIST)公布這批曲線,寫進數碼簽名標準 FIPS 186-2。
種子由美國國家安全局(NSA)提供。問題是:NSA 沒有解釋種子怎樣來。一個字都沒有。
密碼學界對來歷不明的數字,天生警惕。兩位學者 Koblitz 與 Menezes 甚至寫了一篇專文,標題就叫《謎中謎》(A Riddle Wrapped in an Enigma)。
流傳最廣的說法,來自 NSA 老臣 Jerry Solinas 多年後的回憶:種子可能是一句搞笑說話的雜湊。內容大概是「俾 Bob 同 Jerry 加人工」之類。實際寫程式的同事,也記不清了。
Solinas 在 2023 年去世。舊檔案找不到。這條線,斷了。
密碼學家 Filippo Valsorda 於是設立懸賞:US$36,864,獎給任何能找出種子出處的人。多年來,無人領獎。
Anthropic 內部也有員工跟過「搞笑說話」這條線。他們試了很多句子。全部落空。現在回看,原因很簡單:方向從一開始就錯了。
2026 年 10 月,一次刻意不給提示的提問。
2026 年 10 月,一位 Anthropic 員工問公司內部的研究版 Claude:你能找出這些種子怎樣生成嗎?
他刻意不提「搞笑說話」的傳聞。不給任何方向。
Claude 選了完全不同的角度。它不問「種子是哪句話變成的」。它問:「1997 年的人,會用什麼軟件生成隨機數字?」
它的推理是這樣的:當年寫 C 語言的人,多半直接用 C 函式庫內置的隨機數產生器。那些舊產生器設計很弱。弱到輸出認得出。認得出產生器,就有機會倒推它的起始狀態。
假設種子是某句話的雜湊。句子有無限可能。猜中一句,才算數。多年來,人人卡在這裏。
假設種子是舊產生器的輸出。產生器只有幾款常見的。逐款測試輸出特徵。認得出,就能倒推。
一個用肉眼都看得見的指紋。
掃描途中,Claude 留意到一個奇怪圖案。
十個種子之中,有四個種子,把內容寫成 20 個 32 位元的字之後,每一個字的最高位都是 0。
如果數字是真正隨機,最高位有一半機會是 1。20 個字全部是 0,本身已經很難。這個圖案在十個種子裏出現四次,純屬巧合的機會約為 1 / 5810。
這正是舊產生器 lrand48 的簽名。它內部有 48 位元的狀態,但每次只交出最高的 31 位元。第 32 位,永遠空着。所以它的輸出寫成 32 位元的字,最高位必定是 0。
認出產生器之後,Claude 試爆隱藏的位元:它拿第一個字,逐一試齊 2¹⁷ 種隱藏位元的組合,再檢查之後的字是否接得上。四個種子,全部接得上。產生器的內部狀態,就此還原。
由指紋,倒推到 1997 年的時鐘。
質數曲線的種子比較棘手。它們保留的位元更少。要由殘缺的輸出還原完整狀態,是一道經典的格(lattice)問題。
Claude 用 LLL 演算法(Lenstra–Lenstra–Lovász 格基約化)逐個窗口去試。結果:5 個 NIST 質數曲線種子,加上 5 個 ANSI X9.62 標準的種子,全部同一個模式——都是 lrand48 的輸出,再向右移 23 位元。每個還原出的 48 位元狀態,都能重新生成種子的全部 160 位元。這不可能是巧合。
這類產生器有一個特性:可以倒行。Claude 把每個狀態一步步倒退,退到 srand48 剛啟動時的形態。
然後,謎底出現了。每一個啟動值,都是一個 Unix 時間戳——即是某一刻的日期和時間。十個質數曲線種子,全部落在 1997 年 5 月至 1998 年 4 月之間。
換句話說:當年有人寫了個程式。程式用「當下時間」啟動一個普通不過的隨機數產生器。跑出來的數字,就成了守護全球 25 年的曲線種子。
以下不是模擬。按鈕會在你的瀏覽器裏真金白銀跑一次 lrand48:用左邊的時間戳啟動產生器,數到指定的候選編號,再把輸出和 NIST 公布的種子逐字比對。任何人都可以這樣驗證——這正是今次發現最令人安心的地方。
由提問到找出全部質數曲線種子的來源,Claude 用了不到半小時。它事後還自我懷疑了一輪:這會不會是測試環境的陷阱?它核對了數字與自己記憶中的真值,又算過巧合的機會,最後確認:是真的。
基點 G 的出處,之前從未有人解釋過。
每條曲線除了參數,還有一個固定的基點 G。所有公鑰,都是 G 的倍數。種子決定不了 G。G 怎樣選,又是另一個謎。
Claude 查種子時,順手查埋 G。它找到了 1997 年 5 月生成的那批、共六條曲線的基點出處:P-192 和五條 ANSI 範例曲線。
它們來自數學家 Arjen Lenstra 的大整數運算套件 FreeLIP 裏的隨機產生器。啟動它的,只是細小的整數:P-192 用 20000,其餘各條用 20420 至 20517 之間的數字。
先講清楚:用家什麼都不用做。
Anthropic 在原文開宗明義:這不是密碼學破解,不是新攻擊,不是曲線弱點。這是懸案的「趣聞式完結篇」,讀者不需要採取任何行動。
道理很直接:種子的生成方法愈簡單、愈普通、愈多人能重現,背後藏後門的空間就愈小。25 年的懷疑,到此可以放下。
懸賞方面:那 US$36,864,將捐給 Internet Security Research Group(ISRG)——即是營運 Let's Encrypt 免費證書服務的非牟利組織。
今次研究由 Anthropic 約十人團隊完成,包括 John Wood、Henry de Valence、Nicholas Carlini 與 Steve Weis 等。
這一節是把 Anthropic 的說法,拿去和外界反應對照。
共識密碼學社群的反應近乎一致:興奮、讚好、慶祝懸賞終於解開。媒體(Unite.AI 等)的報導口徑相同,集中在「半小時解開 25 年謎團」和「曲線獲得平反」兩點。
共識對「這不是漏洞」這一點,社群與 Anthropic 完全一致:原文叫大家什麼都不用做,外界也沒有相反聲音。
爭議度:低與今期其他 Anthropic 文章不同,這一項幾乎找不到實質爭議。原因很實際:發現附帶可重現的驗證方法(正如本頁第 5 章的按鈕),任何人都能自己核實——不需要「相信」任何一方。
「種子來源解開了」不等於「所有問號都消失了」。Anthropic 自己在原文列出未解部分(下一章)。把「大部分解開」講成「全部解開」,就誇大咗——這一點,原文的寫法是誠實的。
原文老實交代的部分。