工程趣聞 2026 年 10 月 17 日

2026-10-17 — NIST 橢圓曲線種子之謎解開:來自 1997 年時間戳記

primary=https://words.filippo.io/seeds-solved/ primary=https://www.anthropic.com/research/ecdsa-curve-origins

NIST 橢圓曲線的種子不是雜湊英文句子,而是 1997 年的時間戳記

Filippo Valsorda 部落格、Anthropic Frontier Red Team · 2026-10-16

NIST P-256 等曲線的「種子」,長年傳聞是把一句英文拿去做 SHA-1 的結果;實際上它們是 C 函式庫的偽隨機數產生器以當時的 Unix 時間當種子吐出來的位元組。Anthropic 的團隊在 2026 年 10 月 15 日(UTC)領走了 Filippo Valsorda 三年前開出的懸賞,獎金捐給 ISRG,累計為 $36,864。

原本的問題

P-192、P-224、P-256、P-384、P-521 隨 FIPS 186-2 於 2000 年發布。標準只給一組 20 位元組的種子,曲線係數 b 由種子的 SHA-1 推得;種子本身為何長這樣,NSA 從未交代。P-256 的種子是 C49D3608 86E70493 6A6678E1 139D26B7 819F7E90。

傳聞是 Jerry Solinas 在 1997 年雜湊了一句英文後忘了內容;他已於 2023 年過世,Anthropic 的文章指出這條線索不對。2017 年 Bernstein 與 Lange 描述過一種攻擊設想:利用約 70 位元的種子選擇自由度,去命中一個含 261 條弱曲線的假想類別,這成為「後門」說的來源。

怎麼找出來的

據 Anthropic 文章,研究人員在不提示英文句子線索的情況下請內部模型找出種子來源,Claude 不到半小時就找到 P-192 到 P-521 種子的來歷。做法是假設它是 1990 年代的弱 PRNG,寫一個逐位元滑動的掃描器,測試 34 種產生器與輸出切片組合。

  • 十組種子中有四組的 20 個字的最高位元全為 0,機率約 1/5810,吻合 lrand48 只回傳 48 位元狀態的高 31 位元。
  • 二元曲線種子只剩 17 個隱藏位元,枚舉 217 種即可還原狀態;質數曲線種子每次輸出保留較少位元,改用 LLL 格基約簡還原。
  • 狀態倒推後,低 16 位元為 0x330E,正是 srand48(時間戳記) 的形式。每個還原的 48 位元狀態都能重生整組 160 位元種子。

Filippo 的文章把流程寫成:呼叫 srand48(),用 drand48 逐位元組產生,每 20 位元組當一個候選種子,曲線不合格就丟棄並繼續。(兩篇文章對函式名稱的寫法不同,一個寫 drand48,一個寫 lrand48,同屬 POSIX 48 位元線性同餘家族。)

時間戳記對照

曲線時間戳記(UTC)第 n 個候選
P-1921997-05-18 14:45:34139
P-5211997-08-08 01:12:041136
P-2561997-08-16 01:52:341842
P-3841997-08-30 14:50:082688
P-2241998-04-03 12:52:077026

二元曲線 B-233 到 B-571 直接讀出來是 1984 年 2 月,時間戳記乘以 2 後落在 1998-04-17,Anthropic 推測程式把時鐘值減半。B-163 的種子仍無法解釋。

影響範圍

這不是密碼學上的破解,ECDSA 沒有新弱點,也不需要任何人動作;Anthropic 自己寫明「無需採取行動」。受影響的是「該不該信 NIST 曲線」的論述:Filippo 指出,即使允許 1997 到 1998 年任何時間戳記、前 16 個質數階候選,NSA 最多只有約 30 位元的選擇自由度,遠不足以針對 261 類弱曲線或植入後門,等於否定了 Bernstein 與 Lange 的設想。

對於在 TLS、簽章或硬體安全模組中選曲線的人,Filippo 結合 RFC 6979 的確定性 ECDSA、經形式化驗證的欄位運算與完整加法公式,稱 NIST 曲線已獲「平反」,並說他現在個人會推薦 NIST 曲線勝過 Curve25519、Ed25519 與 X25519。這是作者個人意見,非標準機構立場。

尚未解開的部分

Anthropic 也追到部分基點 G 的來源:P-192 與 ANSI X9.62 的 prime192v2、prime192v3、prime239v1 到 v3 出自 Arjen Lenstra 的 FreeLIP 隨機數產生器(早期 NTL 同碼),使用的小整數種子為 20000、20420、20507、20509、20512、20517。P-224、P-256、P-384、P-521 及二元曲線的基點仍無解。另外,約有兩倍於已發布數量的候選種子合格,被略過的原因團隊試過多種解釋仍不吻合;Filippo 與 Anthropic 都認為略過數量太少,不足以支持刻意削弱。

原始來源:Filippo Valsorda,The NIST Elliptic Curve Seeds Bounty Has Been Claimed、Anthropic,ECDSA curve origins


End of article
0
Would love your thoughts, please comment.x
()
x