Anthropic 發表了 Claude reveals ECDSA curve origins,宣布 Claude 找出了 NIST 橢圓曲線種子值的真實來源。這個問題在密碼學社群懸宕超過 25 年,而答案出乎所有人意料,種子並非任何雜湊演算法的產物,而是 C 函式庫 lrand48 隨機數產生器以 Unix 時間戳初始化後的輸出。
二十多年的懸案,NIST 曲線的種子從哪裡來
ECDSA 是目前使用最廣的橢圓曲線簽章標準,TLS、區塊鏈與各類安全協定都仰賴它。NIST 在 2000 年透過 FIPS 186-2 數位簽章標準採納了一組不同安全等級的標準曲線。對於質數體與二元體上的曲線,規格書公布了一個種子參數,其雜湊值用來決定曲線係數 b。這些種子由 NSA 提供,沒有任何解釋或理由。以 P-256 為例,規格只給了 SEED = C49D3608 86E70493 6A6678E1 139D26B7 819F7E90 這串數字,完全沒有交代出處。
這個數字的來源不透明,在密碼學圈一直是敏感議題。Dual_EC_DRBG 事件讓外界知道,看似中性的常數確實可能被刻意設計成帶有後門。Neal Koblitz 與 Alfred Menezes 曾在論文 A Riddle Wrapped in an Enigma (IACR ePrint 2015/1018)中整理這段爭議,Filippo Valsorda 更在 2023 年 10 月懸賞 12,288 美元,徵求任何能找出五條 NIST 質數曲線種子的人。
流傳最廣的說法,其實是錯的喔
多年來最被接受的版本,來自 NSA 長期員工 Jerry Solinas 本人。他在 2015 年表示,種子大概是某句玩笑話的雜湊,例如「Give Bob and Jerry a raise」之類,程式由 Bob Reiter 撰寫,但兩人都不記得細節,也找不到當年的檔案。Solinas 於 2023 年過世,其他當年的同事也未回應,問題就此擱置。
Anthropic 內部有幾位員工曾循著「玩笑話雜湊」這條線索去猜,全部失敗。2026 年 10 月,一位員工改變做法,直接問內部研究模型能否找出種子的產生方式,刻意不給任何提示。不到半小時,Claude 就找出 P-192、P-224、P-256、P-384 與 P-521 全部五條曲線的種子來源。
Claude 怎麼找到的 ?
Claude 沒有去搜尋那句玩笑話,而是反過來推想當年產生曲線的程式會怎麼寫。它假設程式用的是 1990 年代 C 函式庫內建的偽隨機數產生器,這類產生器夠弱,輸出是可以被辨認的。於是 Claude 寫了一個掃描器,沿著每個已公布的種子逐位元滑動,測試相鄰區塊是否為某個舊式產生器的連續輸出,總共測了 34 種產生器與輸出切片的組合。
掃描過程中 Claude 注意到,若把種子寫成五個 32 位元字組,十個種子裡有四個每個字組的最高位元全是 0。這種情況隨機發生的機率只有 1/5810,正是 lrand48 的特徵,因為它只回傳 48 位元狀態的高 31 位元。接著 Claude 窮舉 2 的 17 次方個隱藏位元,驗證後續四個字組是否吻合,四個種子全部命中。
質數曲線的種子保留的位元更少,Claude 改用 LLL 格基約化演算法,這是還原截斷型線性同餘產生器內部狀態的教科書做法。五條 NIST 質數曲線加上五條 ANSI X9.62 範例曲線,全部符合 lrand48() >> 23 的模式,每個還原出的 48 位元狀態都能完整重現 160 位元的種子。
最關鍵的一步是往回推。線性同餘產生器可以倒著跑,Claude 把狀態逐步回溯到 srand48 初始化時的形式。結果十條質數曲線的初始值全是 Unix 時間戳,落在 1997 年 5 月到 1998 年 4 月之間。例如 P-256 的種子是 1997 年 8 月 16 日 01:52:34 啟動產生器後的第 1842 個候選值。四條二元曲線的初始值讀起來是 1984 年 2 月,但乘以二之後對應到 1998 年 4 月 17 日,剛好在 P-224 產生後兩週,推測當年程式把時鐘值除以二。
Anthropic 公開了 Claude 當時的思考片段,它一度懷疑自己是否身處測試環境,隨後以直接計算驗證,十個種子各 160 位元全部從 32 位元時間戳加一個小索引重現,不可能是巧合。
基點也找到一部分
種子只決定曲線係數,不決定基點 G。Claude 在驗證過程中順帶發現,1997 年 5 月產生的六條曲線,包括 P-192 與五條 ANSI X9.62 範例曲線,其基點來自 Arjen Lenstra 的 FreeLIP 長整數套件內建的隨機數產生器,早期 NTL 函式庫也用同一段程式碼。P-192 的產生器種子是 20000。Anthropic 表示,就他們所知,過去從未有任何 NIST 基點被解釋過。
這代表什麼呢?
Anthropic 的立場很明確。這不是密碼學上的破解,不是新攻擊,也不是曲線弱點。種子以一個常見的偽隨機數產生器搭配時鐘產生,任何人現在都能重現,刻意植入後門的空間因此大幅縮小。他們反而對曲線沒有後門更有信心。文章開頭就提醒讀者,這是多年揣測的收尾章節,沒有任何需要採取的行動。
這次最後拿到的懸賞金額 36,864 美元將捐給 Internet Security Research Group,也就是 Let’s Encrypt 的營運母體。
還沒解開的問題
Anthropic 也對外坦承幾個疑點。並非每個候選種子都能產生可用曲線,而某些可行的曲線被跳過了。P-256 公布的是第 1842 個候選值,但同一次執行的第 876 個候選值也能產生符合條件的質數階曲線。P-224 跳過三條,ANSI 範例曲線跳過七條。他們不知道當年的篩選標準,也不排除是無意的程式行為。不過因為被跳過的數量很少,他們不認為有辦法藉此挑出弱化曲線。
另外,二元曲線 B-163 的種子仍無法還原,P-224、P-256、P-384、P-521 與所有二元曲線的基點來源也還是未知。
CyberQ 觀點
這項發現對台灣的開發者與資安團隊有兩層意義。第一,NIST 曲線的參數來源疑雲基本上可以放下了,拿它當理由遷移到 Curve25519 的論述,從此少了最有力的一條。第二,這件事示範了一種新的研究模式。Claude 沒有翻出任何新文件,它做的是提出假設、寫工具、驗證、再往回推,整個過程不到半小時,而人類社群為此開了兩年多的懸賞。
值得注意的是,Anthropic 說的是「內部研究模型」,並未指明是哪個公開版本的 Claude。AI 可以把冷門問題重新搬上檯面,但 Anthropic 自己也列出了一串未解的疑點,驗證與判斷的責任,仍然在人類研究者身上。








