整个现代互联网的安全底座上,曾趴着一只若隐若现的幽灵。
支撑全球数字证书、移动通信与身份握手的 NIST 椭圆曲线标准(FIPS 186-2),核心参数源头整整二十六年无人知晓。学界长年怀疑美国国家安全局(NSA)在其中预埋了数学后门;已故 NSA 密码学家 Jerry Solinas 则声称那是调侃同事的幽默短语哈希。
直到 Anthropic 研究团队(包含 John Wood、Nicholas Carlini、Steve Weis 等人)用 Claude 解开逆向谜题,正式兑现独立研究员 Filippo Valsorda 悬赏三年的奖金,真相才浮出水面。基础赏金连同配捐共 36,864 美元全额捐给了 Let's Encrypt 运营方 ISRG。
没有精密的数学陷阱,也没有传世暗号。所谓的核心机密,只是 1997 年工程师随手调用 C 语言标准库中的弱伪随机数函数 lrand48,塞进去了当天的 UNIX 时间戳。
半小时逆向:AI 抓住了三十年前的统计破绽
人类密码学家耗费数年穷举英语短语字典,被记忆带偏了方向。Claude 的切入点截然不同,它直接按 1990 年代的工程习惯推测当年开发者的动作。
在逐比特扫描公开种子时,模型抓到了一个统计缺陷:十个标准种子中,有四个在拆分为三十二位整数时最高位全部为零。这种分布在密码学哈希中出现的概率仅有 1/5810。

这是典型的线性同余生成器(LCG)特征。C 语言自带的 lrand48 只返回内部状态的高三十一位,最高位永远留空。顺着这一规律,研究团队利用格基约减算法(LLL)在三十步内逐一推导出了内部截断状态。
状态回溯到了一个固定初值,真相就此定格:
| 曲线名称 | 对应 UNIX 时间戳 | 生成时刻(UTC) | 候选序列位次 |
|---|---|---|---|
| P-192 | 863951711 | 1997-05-18 10:35:11 | 早期轮次 |
| P-224 | 891605335 | 1998-04-03 12:08:55 | 早期轮次 |
| P-256 | 871696354 | 1997-08-16 01:52:34 | 第 1842 次迭代 |
| P-384 | 872935572 | 1997-08-30 10:06:12 | 早期轮次 |
| P-521 | 871032336 | 1997-08-08 09:25:36 | 早期轮次 |
以支撑全球流量半壁江山的 P-256 为例,它诞生于 1997 年 8 月 16 日那个周六的凌晨。机器跑到了第 1842 个候选,摇出了二十字节哈希输入 C49D360886E704936A6678E1139D26B7819F7E90,随后被写进标准文档。

业余反成免罪符:30 比特自由度困不住阴谋
在常规安全认知里,随机数发生器越弱,系统越危险。但在公开标准参数的选取中,逻辑恰恰相反。
密码学家 Daniel J. Bernstein(DJB)曾指出,若想在椭圆曲线中人为构造特定的代数缺陷弱曲线,攻击者至少需要 70 比特的自由度来实施定向碰撞搜索。
Anthropic 逆向出的代码逻辑彻底封死了后门假说。生成器直接捆绑了物理时间戳,即使当年设计者在 1997 到 1998 年间任意挑选生成时刻,并在候选序列里人工挑拣,满打满算也只有约 30 比特的自由度。
三十比特的搜索空间,根本塞不下预谋已久的数学后门。
最简陋的工具链,反倒成了洗清蓄意投毒嫌疑最有力的证据。
迟来的清白,挽不回失去的信任
后门疑案告破,并不等于 NIST 曲线完美无瑕。
在生成 P-256 的序列中,第 876 个候选参数在数学上同样符合素数阶条件,但程序跳过了它,一路跑到了第 1842 个候选才落定。这究竟是由于二十八年前测试脚本的微小实现缺陷,还是机器并发运算导致的偶然跳步,已无可考证。它仍然留下了未完全解释的人工裁量痕迹。
更关键的是,工程界抛弃 NIST 曲线的理由,从不仅限于后门猜忌。

NIST 曲线在工程实现上极其苛刻,极易因分支预测或异常点处理不当诱发侧信道泄漏。以 Curve25519 为代表的新一代曲线,天生支持常数时间运算,全流程无缝可钻。
《吕氏春秋》有言:疑人之贼,视其行步,窃斧也;颜色,窃斧也。
斯诺登曝光 Dual_EC_DRBG 的真实后门在前,行业对权威机构失掉信任在后。大家猜忌了三十年的庞大阴谋,剥开到底层只是一行粗糙代码;但这种澄清无法让工业界开历史倒车。老系统可以松一口气,新系统该迁往现代曲线与抗量子算法,一步也不会慢下来。
