全球 HTTPS、比特币签名里最常用的椭圆曲线标准 ECDSA,有一个悬了 25 年的疑问:NIST 标准曲线的那串种子常数到底怎么来的?2026 年 10 月,Anthropic 在官方研究页面给出了答案——是 Claude 用不到半小时找到的,而答案平凡得让人想笑:1997 年的一台机器,拿 C 标准库的 lrand48 随机数生成器,用 Unix 时间戳做种子跑出来的。
一个悬了 25 年的疑问
ECDSA 于 2000 年被 NIST 采纳进 FIPS 186-2 数字签名标准,文档里每条曲线都附了一个"种子"参数,其哈希值决定曲线系数。问题是,这些种子由 NSA 提供,却没有任何生成方式的说明。以 P-256 为例,种子是 C49D3608 86E70493 6A6678E1 139D26B7 819F7E90,没人知道它从哪来。
密码学界因此怀疑了几十年:NSA 会不会故意挑了带后门的曲线?NSA 员工 Jerry Solinas 2015 年的说法是,种子来自某句幽默短语的哈希,大意是"给 Bob 和 Jerry 加薪"。可他 2023 年去世,档案也找不到,线索就此中断。社区甚至挂出了 36,864 美元的悬赏。Anthropic 员工顺着"短语哈希"的思路搜过,一无所获。
Claude 换了个角度
2026 年 10 月,一名 Anthropic 员工让内部研究模型在不提示任何线索的前提下自己推理。Claude 的切入点是:不猜短语,反推 90 年代生成曲线的软件怎么写——那个年代的程序大概率用 C 库自带的伪随机数生成器,而这类老式 PRNG 的输出是有统计特征可识别的。
Claude 写了个扫描器,把每条种子按位滑动,测试相邻片段是否是某款 90 年代生成器的连续输出,一共扫了 34 种组合。突破口是一个肉眼可见的异常:部分种子的最高位全是零,纯靠巧合出现的概率只有 1/5810——这正是 lrand48 只返回 48 位状态中高 31 位的签名。随后它对每个 32 位词暴力尝试 2 的 17 次方种隐藏位取值,验证后续四个词是否吻合,四条种子全部对上;素数曲线的种子截位更狠,恢复内部状态靠的是教科书级的 LLL 格基规约算法,把问题变成一个格问题直接解。
最关键的一步是把生成器状态往回倒推:lrand48 可以逆向运行,当状态回到 srand48 初始化的形态时,十条素数曲线种子的初始化值全是 Unix 时间戳,落在 1997 年 5 月到 1998 年 4 月之间。P-256 的种子是同一时间戳下第 1842 个候选,每段 20 字节,至今任何人都能用官方贴出的几十行 Python 代码逐字节复现。
不是攻破,反而是洗白
必须说清楚:这不是密码学破解,ECDSA 曲线本身毫发无损。恰恰相反,结论让"NSA 蓄意埋后门"的阴谋论大幅降温——种子来自一个任何人都能复现的弱随机数生成器加系统时钟,可供操纵的空间小得多。Anthropic 团队还顺带解开了一半基点之谜:1997 年 5 月生成的六条曲线(含 P-192 和五条 ANSI X9.62 示例曲线)的基点,来自 Arjen Lenstra 的 FreeLIP 大整数库里的随机数生成器,生成器种子就是 20000、20420 这类小整数。
当然悬念没有全清:P-224/256/384/521 的基点来源未明,B-163 那颗种子对不上任何已知模式,P-256 的运行还跳过了 876 号这个同样可行的候选,筛选标准无从考证。那 36,864 美元悬赏将捐给互联网安全研究组织 ISRG。
所以呢
这件事真正的看点,不是密码学出事,而是一个 AI 模型在真实开放科研问题上表现出的"解题品味":知道放弃传闻走错的方向,知道从软件工程的时代背景反推实现,甚至在内部思考里先怀疑自己"是不是处在测试环境里",再用 160 位全匹配的概率说服自己。当模型开始对"太顺的结果"保持警惕,这类 25 年悬案被逐个翻篇,可能只是时间问题。