破解長期懸案:NIST 曲線種子的真實來源

橢圓曲線數位簽章標準(ECDSA)自 2000 年由 NIST 採用以來,其規範中列出的標準曲線包含一個名為「種子」的參數,該參數的哈希值用於定義曲線的係數 b。這些種子由美國國家安全局(NSA)提供,但長期以來缺乏生成來源的說明,引發了關於是否存在刻意後門或弱點的猜測。

Anthropic 的研究人員在 2026 年 10 月利用內部研究模型 Claude 進行探索。Claude 並未依賴先前關於「幽默口令哈希」的錯誤傳聞,而是推測生成軟體可能使用了 1990 年代 C 語言函式庫中附帶的偽隨機數生成器(PRNG)。

結果顯示,NIST P-192、P-224、P-256、P-384 和 P-521 的種子並非任何哈希演算法的結果,而是 C 函式庫中 lrand48 隨機數生成器的輸出,該生成器以 Unix 時間戳記作為初始種子。例如,P-256 的標準化種子是在經過 1,842 次迭代後輸出的候選值。

技術還原過程:從輸出特徵到內部狀態

Claude 首先編寫掃描器,逐位元檢查發布的種子,測試相鄰區塊是否為舊式生成器的連續輸出。研究發現某些種子的最高位元全為零,這是 lrand48 線性同餘生成器的特徵,因為它僅返回 48 位元狀態中的高 31 位元。

為了還原 PRNG 的內部狀態,Claude 嘗試了所有可能的隱藏位元組合,並驗證後續輸出是否符合預期。對於素數域曲線種子,由於保留了較少的輸出位元,還原過程轉化為一個教科書式的格問題,透過 Lenstra–Lenstra–Lovász (LLL) 基約化演算法解決。

分析顯示,五個 NIST 素數曲線種子及五個 ANSI X9.62 標準種子均呈現相同的模式:lrand48() >> 23。每個還原出的 48 位元狀態都能重新生成完整的 160 位元種子,這種匹配機率極低,證實了發現的真實性。

透過將線性同餘生成器逆向運行,Claude 找到了 srand48 的初始化狀態,其低 16 位元等於 0x330E。這些初始化值對應於 1997 年 5 月至 1998 年 4 月之間的 Unix 時間戳記。對於二進位域曲線,若將時間戳記加倍,則對應到 1998 年 4 月 17 日,暗示程式可能使用了減半的時鐘值。

基準點生成謎團的部分解答與未解之題

除了種子參數,Claude 還發現了部分曲線基準點(Base Point, G)的來源。這些基準點是 ECDSA 公開金鑰計算中的固定點。對於在 1997 年 5 月生成的六條曲線(包括 P-192 及 ANSI X9.62 範例曲線),其基準點來自 Arjen Lenstra 的大整數算術套件 FreeLIP 或 Victor Shoup 的 NTL 函式庫中的隨機數生成器。

這些基準點的生成配方簡單:以小整數作為種子,丟棄前七個輸出,然後從 26 位元輸出中生成候選 x 座標,直到該點位於曲線上。Claude 找到了對應的生成器種子,例如 P-192 為 20000,prime239v1 為 20420 等。

然而,並非所有參數都已破解。P-224、P-256、P-384 和 P-521 的基準點不符合上述配方,其生成方式仍未知。此外,第五個二進位種子 B-163 無法透過任何嘗試過的方法還原,仍是一個未解之謎。

研究團隊指出,雖然部分潛在可用的曲線候選被跳過(例如 P-256 的發布種子為第 1,842 個候選,但第 876 個候選也符合條件),但由於跳過的候選數量較少,不太可能是為了選擇弱化的曲線。目前尚不清楚是否有其他標準用於篩選候選,或這是否為無意的產物。

對加密安全性的影響與後續行動

Anthropic 強調,此發現並非 ECDSA 曲線的密碼學突破、新攻擊或弱點。相反地,這增加了人們對曲線選擇過程中沒有後門或刻意弱點的信心。參數以簡單且可重現的方式生成,大幅降低了被顛覆或操縱的空間。

對於尋找種子來源的獎金 36,864 美元,將捐贈給互聯網安全研究小組(Internet Security Research Group)。研究團隊感謝已故的 Jerry Solinas,他是當時 NSA 的員工,曾參與這些種子的生成過程。

社群反應顯示,這一發現終結了長達數十年的猜測與陰謀論。雖然確認了生產方法,但對於特定候選曲線的選擇標準仍有疑問,特別是那些被生成後又被丟棄的候選。不過,多數研究者原本就信任這些曲線的安全性,此發現僅作為一個有趣的結局章節,無需採取進一步行動。