Claude 不到半小时找到 NIST 椭圆曲线种子的来历:1997 年的时钟时间加 C 库随机数函数,3.6 万美元悬赏捐给 ISRG

Anthropic 前沿红队 10 月 16 日发文称,P-192、P-224、P-256、P-384、P-521 这五条 NIST 素数域曲线的种子并不是某句话的哈希值,而是用 Unix 时间戳初始化 C 库 48 位随机数生成器后跑出来的输出,时间落在 1997 年 5 月到 1998 年 4 月之间;按 Anthropic 的说法,内部研究模型在没有任何提示的情况下不到半小时就找到了这五条曲线种子的来源。以 P-256 为例,它来自 1997 年 8 月 16 日 01:52:34 开始的一次运行,是第 1842 个候选。密码学家 Filippo Valsorda 用 Go 独立复现后确认结果,他在 2023 年设立的悬赏按捐赠规则翻三倍到 36,864 美元,由获奖团队捐给 Let's Encrypt 背后的非营利组织 ISRG。Anthropic 强调这不是对 ECDSA 的破解;B-163 的种子、P-224 至 P-521 的基点以及部分候选为何被跳过仍未解释。

一串没人说得清的 160 位数

P-256 是今天 TLS 等协议里最常用的椭圆曲线之一。它和同批 NIST 曲线一样,由一段公开的 160 位「种子」经哈希推出参数,但种子本身从哪来,标准里没写。坊间流传的说法是对某句玩笑话做了哈希,生成它们的密码学家 Jerry Solinas 已于 2023 年去世。同年,Filippo Valsorda 为找出种子来历设了悬赏。

Claude 怎么找到的

Anthropic 前沿红队 10 月 16 日发文说,一名员工只问内部研究模型能否弄清种子怎么来的,没有给「哈希某句话」这条线索。模型注意到部分种子的最高位全是 0,猜测是九十年代常见的伪随机数生成器,写了扫描程序比对输出特征,锁定 C 库的 48 位线性同余生成器,再用 LLL 格基约简从截断输出里恢复内部状态,倒推到 srand48(时间戳) 的初始状态。按 Anthropic 的说法,五条素数域曲线的来源不到半小时就找到了。

P-256 来自 1997 年 8 月 16 日 01:52:34 开始的一次运行,是第 1842 个 20 字节候选;五条曲线的时间戳都落在 1997 年 5 月到 1998 年 4 月之间。团队还解释了 B-233 到 B-571 四条二元域曲线和 ANSI X9.62 几条示例曲线的种子。

复核与悬而未决的部分

Valsorda 10 月 16 日确认悬赏已在 10 月 15 日被领取,他用 Go 重写了生成流程核对结果。他的文章把生成器写作同属 POSIX 48 位家族的 drand48,Anthropic 写的是 lrand48。他还指出,ANSI X9.62 公开的条件不足以复现候选筛选,另有两条未成文的规则,其中一条至今没找到解释。Anthropic 也列出了未解部分:P-256 的第 876 个候选同样能得到合格曲线却被跳过,B-163 的种子和 P-224 至 P-521 的基点仍然无解。

对 P-256 用户意味着什么

Anthropic 明确说这不是密码学破解,也不是 ECDSA 的新漏洞。Valsorda 的估算是,按这种生成方式,当年即便有意挑曲线,也最多只有约 30 位的自由度,远低于 Bernstein 与 Lange 2017 年描述的那类操纵所需的 70 位。现有系统不需要因此更换曲线。悬赏原为 12,288 美元,获奖团队选择捐给 ISRG,按规则翻三倍到 36,864 美元。

via: Anthropic 前沿红队:Claude reveals ECDSA curve origins、Filippo Valsorda:The NIST Elliptic Curves Seeds Bounty Has Been Claimed