25年密码学悬案告破:Claude用半小时还了NSA清白
全球互联网最深的一个安全疑案,居然被一串二十多年前的电脑时钟给解开了。
过去二十五年里,全世界的密码学家一直怀疑美国国家安全局在底层通信协议里留了暗门。 2000 年,美国国家标准与技术研究院把 P-256 椭圆曲线写进了数字签名标准。 这套标准后来成了全球网络安全的基石,今天的网页加密、手机安全芯片和各种数字证书,底层几乎都在用它。 但这套算法在最初公布的时候,附带了一串 160 位的随机种子。 至于这串种子到底是怎么生成的,美国国家安全局当时一个字都没解释。
在密码学里,没有交代来源的随机数,通常意味着最危险的可能。 因为椭圆曲线必须依赖这些参数来建立数学防线。 如果设计者在幕后偷偷筛选了无数种组合,故意挑出一个只有自己能解开的数学缺陷,那全世界的加密通信在他们面前就形同虚设。 特别是后来斯诺登事件曝光了某些加密算法确实被动过手脚,大家对 P-256 的怀疑就更深了。
后来江湖上有了一个流传很广的传闻。 当年参与过项目的国家安全局数学家 Jerry Solinas 在一次回忆中提到,这些种子可能只是同事把一句玩笑话做了哈希运算生成的。 传闻里的句子五花八门,比如“给 Bob 和 Jerry 涨工资”。 但谁也记不清具体的原话,当年的软盘和代码也早就不知所踪。 为了弄清原委,安全专家 Filippo Valsorda 后来组织了社区悬赏,奖金积攒到了三万六千多美元。 无数研究人员用超级计算机把英语词典和各种短语拼命碰撞,撞了好几年,什么都没撞出来。
直到 2026 年 10 月,Anthropic 团队的研究员把这道题交给了内测版的 Claude。 他们没有给那个搞笑短语的提示,就让模型自己去看公开的种子数据。 不到半个小时,Claude 把谜底端了上来。
它根本没有去撞任何英语句子。 模型换了一个思路:既然是二十多年前的工程师写的代码,他最顺手会用什么工具? 它把目光投向了 1990 年代 C 语言标准库自带的伪随机数生成器。 Claude 写了一个扫描程序,顺着公开的种子数字逐位排查。 很快,它盯上了一个非常诡异的破绽。 把种子拆成 32 位的数字之后,所有数字的最高位竟然全都是 0。 如果这真是纯粹的随机数,连续二十次最高位全都是 0 的概率只有五千八百分之一。 这是当时 C 语言标准库函数 lrand48 的标志性指纹,因为这个老函数只输出 31 位有效数字。
抓住了这个线索,Claude 用教科书上的格基约简算法 LLL,直接反推出了生成器的内部状态。 再顺着状态往前倒推一步,生成器的初始化来源立刻浮出了水面。 它就是用最普通的 Unix 电脑时间戳启动的。 具体时间精准到了秒:1997 年 8 月 16 号凌晨 1 点 52 分 34 秒。 而保护着全球网络的 P-256 种子,就是那个程序运行后输出的第 1842 个候选数。 另外几条标准曲线也是同出一源,全都是 1997 年到 1998 年普通上班时间的时间戳。
谜底解开之后,整个密码学界不仅没有恐慌,反而集体松了一大口气。 这并不是什么加密算法被破解的漏洞。 恰恰相反,它彻底终结了关于国家安全局后门的传言。 要在椭圆曲线里故意埋进后门,需要极大的搜索空间,必须测试天文数字级别的参数组合才可能撞上脆弱的结构。 但一个普通的时钟时间戳,加上仅仅一千多轮循环,能够留给设计者的自由度非常狭窄,根本不可能藏下精心构造的后门。 当年并没有什么复杂的深层算计。 大概率只是二十九年前的一个夏夜,一位安全局工程师在终端里随手读取了电脑时钟,让程序循环跑了几秒钟,挑出了符合数学条件的曲线,然后关机下班。 折磨了全球安全界四分之一个世纪的疑案,就这么在一行普通的旧代码面前落了幕。 那笔三万六千多美元的悬赏金,也被 Anthropic 团队直接捐给了运营免费加密证书的非营利机构。
引用 / CITATIONS
No citations exported.
同领域解读 / SOFTWARE & ENGINEERING
导出 / EXPORT
订阅 · SUBSCRIBE
每周一封独立、不受审查的科技与 AI 深度评论,周一发出。带出处,可核查。