返回探索
资讯VibeFix 编辑部更新于 2026年10月19日

25 年密码学悬案,Claude 半小时破了:NIST 曲线种子只是 1997 年的时钟

Claude 用不到半小时解开 25 年密码学悬案:NIST ECDSA 曲线种子根本不是哈希口令,只是 1997 年 Unix 时间戳喂给 lrand48 跑出来的输出。这不是破解,是祛魅——顺手终结了 NSA 后门阴谋论。

古董钟表机芯特写;Claude 追溯发现 NIST 曲线种子源自 1997 年 Unix 时间戳

密码学史上有一个著名的悬案:NIST 椭圆曲线标准里那几个神秘的"种子"(seed)到底是哪来的?NSA 在 2000 年交出这套参数时,一个字都没解释。25 年来,密码学家们猜过哈希、猜过口令、猜过 NSA 留的后门——没人猜中。上周,Anthropic 的一篇研究博客宣布:Claude 花了不到半小时就解开了这个谜,答案 mundane 到离谱——那些种子,只是一台 1997 年电脑的时钟。没有后门,没有阴谋,只有一个偷懒的脚本和一句 `time()`。

Anthropic 的标题起得极好,值得原文引用:"It's just timestamps":the decades-old mystery of the origins of one of the most popular cryptographic standards has been explained.("只是时间戳":最流行的密码学标准之一的起源之谜,这个困扰了几十年的问题,已经被解释清楚了。)

为什么密码学家对"没说明书的数字"过敏

要理解这个悬案为什么能困扰学界 25 年,得先理解密码学里的一条铁律:凡是标准里的常数,都得交代来历。行话叫 "nothing-up-my-sleeve numbers"(袖子里没藏东西的数字)——比如 SHA-256 的初始向量取自素数 2、3、5……的平方根小数部分,任何人都能验证"这个数字没有被精心挑选过"。这是密码学信任的基石:算法可以公开,但常数的选择过程必须透明,否则没人敢用。

NIST 曲线恰恰反其道而行之:种子是 NSA 给的,零解释。这在 2000 年代初就埋下了不信任的种子,而 2007 年 Dual_EC_DRBG 事件把这种不信任推向顶峰——那个由 NIST 标准化的随机数生成器,后来被证实很可能藏有 NSA 可利用的后门(斯诺登文件更坐实了 NSA 花 1 亿美元推动它成为标准)。Dual_EC 之后,"NIST 曲线种子会不会也是精心挑选的弱参数"就从阴谋论变成了"合理怀疑"。Neal Koblitz 和 Alfred Menezes 专门写过一篇综述《A Riddle Wrapped in an Enigma》,梳理这场争议;民间也有人做过 amateur investigation,甚至有人悬赏——就是后来被 Claude 拿下的这 $36,864。

所以 Claude 这次做的,学术上叫"来源解释"(provenance explanation),安全意义上叫"祛魅":它证明了种子生成的机制 mundane 到不可能是精心挑选的——你没法通过"在 1997 年 8 月 16 日凌晨 1 点 52 分按了一下时钟"来藏后门。Anthropic 的原话是:"The seeds were generated in a very simple way: a common pseudorandom number generator initialized from the clock, which anyone can now reproduce. That leaves much less room for subversion and that we can be confident the parameters are secure."(种子是用非常简单的方式生成的:一个由时钟初始化的常见伪随机数生成器,任何人现在都能复现。这让暗中做手脚的空间小得多,我们可以确信这些参数是安全的。)

值得注意的是 Anthropic 做这件事的动机。博客开头说:"We pursued this long-standing open question of the cryptographic community to settle concerns about ECDSA, which is one of our most widely used cryptographic standards."(我们追踪密码学界这个长期悬而未决的问题,是为了解决人们对 ECDSA 的担忧——它是我们使用最广泛的密码标准之一。)一家 AI 公司花算力去给 25 年前的密码标准"验明正身",顺便终结阴谋论——这是 AI 安全叙事里少见的正向故事:AI 不是来制造新的不信任的,是来清理旧的不信任的。

先说背景:NSA 交出的数字,没有说明书

ECDSA 是现在用得最广的椭圆曲线密码标准。2000 年,NIST 在 FIPS 186-2《数字签名标准》里收录了一组不同强度和尺寸的标准椭圆曲线。对于素数域和二进制域上的曲线,标准里公布了一个"种子"参数 SEED,它的哈希值被用来定义曲线的系数 b。比如 NIST P-256 曲线的种子是 `SEED = C49D3608 86E70493 6A6678E1 139D26B7 819F7E90`——一串看起来随机的十六进制,但没人知道它从哪来。

关键细节是:这些种子是 NSA 提供的,没有任何解释和合理性说明。密码学界对"没有解释的常数"有天然的警惕——最著名的前车之鉴是 Dual_EC_DRBG,那个真的被怀疑有后门的随机数生成器。于是 25 年里,关于 NIST 曲线种子的阴谋论就没停过:是不是 NSA 精心挑选了带弱点的曲线?是不是种子里藏了只有 NSA 知道的 trapdoor?

流传最广的"官方野史"来自 NSA 老员工 Jerry Solinas。他在 2015 年说,种子是用一个幽默口令的哈希生成的,大意是"给 Bob 和 Jerry 加薪"之类的;写代码的是 Bob Reiter,但他也不记得细节了,Solinas 的原话是:"If they exist, they are no doubt sitting on a hard drive near the Ark of the Covenant."(如果那些档案还存在,那它们一定是放在约柜旁边的某块硬盘里。)可惜 Jerry 在 2023 年去世,其他当年的同事也不回应,这个说法永远没法验证了。密码学家 Filippo Valsorda 为此还设了一个赏金:谁能找到种子的来源,奖金 $36,864。

Anthropic 的几位员工之前也追过这条"幽默口令哈希"的线索,全都失败了。转折发生在 2026 年 10 月:一位好奇的员工随手问了内部研究模型一句——没给任何线索,就问它能不能搞清楚这些种子是怎么生成的。然后,"**In under half an hour**, Claude discovered the origins of the NIST P-192, P-224, P-256, P-384, and P-521 seeds."(不到半小时,Claude 就发现了 NIST P-192、P-224、P-256、P-384 和 P-521 种子的来源。)

答案:Unix 时间戳 + lrand48,一台 1997 年的时钟

Claude 的发现是:这些种子根本不是任何哈希算法的输出,而是 C 标准库里的 `lrand48` 伪随机数生成器、用 Unix 时间戳做种子跑出来的结果。原文:"None of them were the results of any hash algorithm at all, but rather the output of the C library's `lrand48` random-number generator, seeded with a Unix timestamp!"

具体流程是这样的:程序用一个 Unix 时间戳 t 初始化随机数生成器(`srand48(t)`),然后每次从生成器里取 20 个字节作为一个"候选种子"——前 20 个字节是候选 1,再往下 20 个字节是候选 2,以此类推。比如 P-256 的种子,是第 1,842 个候选。

NIST 曲线种子揭秘链条示意图:1997 年 Unix 时间戳经 srand48 初始化 lrand48 生成器,输出 20 字节候选种子,最终成为曲线种子并经哈希生成曲线系数

Claude 是怎么在半小时里找到的?这个过程本身比答案更精彩,值得细说,因为它展示了 AI 做"逆向考古"时的思考方式。

第一步是换角度。之前所有人都沿着"幽默口令哈希"的传闻去搜,自然一无所获。Claude 换了一个思路:不再猜"种子是怎么想出来的",而是猜"生成这些种子的软件在 1990 年代是怎么写的"——它推测那应该是个随处可得的 1990 年代 C 库里的伪随机数生成器,而这种老 PRNG 弱到"输出是可以被认出来的"。认出 PRNG,就能反推出它的内部状态。

第二步是写扫描器。Claude 写了个程序,沿着每个公开种子逐位滑动,测试相邻的数据块是不是某个 1990 年代生成器的连续输出,一共试了 34 种"生成器 × 输出切片"组合。然后它注意到了一个模式:有些种子的最高位全是零——写成 5 个 32 位字,10 个种子里有 4 个的全部 20 个字最高位都是 0,随机情况下这个概率只有 1/5810。这是 `lrand48` 的签名:这个线性同余生成器只返回 48 位内部状态的最高 31 位。"The pattern is visible by eye once you know to look for it."(一旦知道往哪看,这个模式肉眼可见。)

第三步是恢复状态。对二进制域曲线种子,Claude 取第一个字,试遍 2^17 种隐藏位的可能,验证后四个字是否连续跟上——四个种子全中。对素数域曲线种子,情况更难:它们只保留了每次输出的更少位。恢复一个"被截断的线性同余生成器"的内部状态,是教科书级的格(lattice)问题,用 Lenstra–Lenstra–Lovász(LLL)基约化算法解。Claude 不知道种子可能取了状态的哪些位,就把求解器跑遍了所有窗口——5 个 NIST 素数曲线种子加 5 个 ANSI X9.62 标准的种子,全都符合同一个模式:`lrand48() >> 23`。每个恢复出的 48 位状态都能重新生成种子的全部 160 位,"which does not happen by chance"(这不可能是巧合)。

第四步是倒推时钟。线性同余生成器倒着跑和正着跑一样容易。Claude 把每个种子的状态一步步倒推回去,一直推到"能被 `srand48` 初始化出来的形态"(低 16 位等于 0x330E)。然后关键的一幕出现了:10 个素数曲线种子的 srand48 初始化值,全都是 1997 年 5 月到 1998 年 4 月之间的 Unix 时间戳。四个二进制曲线的初始化值读出来是 1984 年 2 月——但把时间戳翻倍,正好对应 1998 年 4 月 17 日,也就是 P-224 那次运行的两周后,所以程序可能是把时钟除以了 2。

Anthropic 在博客里公开了完整复现代码:P-256 是 `1997-08-16 01:52:34` 的时间戳跑第 1,842 个候选;P-192 是 `1997-05-18 14:45:34` 第 139 个;P-521 是 `1997-08-08 01:12:04` 第 1,136 个。任何人现在都能在自己电脑上复现这些种子——29 年前 NSA 工程师在键盘前敲下的那一刻,被完整还原了。

顺手还解开了一半的基点之谜

每条曲线除了种子,还有一个基点 G(所有 ECDSA 公钥都是它的倍数)。种子决定不了 G,所以基点是怎么选的,是另一个独立的问题。Claude 顺手把这个也啃下来一半:在 1997 年 5 月生成的 6 条曲线(P-192 和 5 条 ANSI X9.62 示例曲线)的基点,来自 Arjen Lenstra 的 FreeLIP 长整数运算包里的随机数生成器(早期 Victor Shoup 的 NTL 库里是同一份代码)。配方简单到好笑:用一个小整数做种子,扔掉前 7 个输出,用 26 位输出对素数 p 取模生成候选 x 坐标,重复直到 x 落在曲线上。P-192 的种子是 20000,其他几条是 20420、20507、20509、20512、20517。

但故事没讲完:P-224、P-256、P-384、P-521 的基点不符合这个配方,来源依然未知;第 5 个二进制种子 B-163 试遍了所有方法也没解开;还有一个细节让人挠头——不是每个候选种子都能生成可用曲线,而有些明明可用的候选被跳过了。Anthropic 给出了具体数字:P-256 最终用的是同一次运行的第 1,842 个候选,但第 876 个候选同样能生成参数合规的素数阶曲线;P-224 的运行跳过了 3 个这样的可用候选,ANSI X9.62 示例曲线背后的两次运行又跳过了 7 个。博客里没有回避这个问题:"We do not know what criteria may have been used, or whether this was an unintentional artifact."(我们不知道当年用了什么筛选标准,也不知道这是否只是无意的产物。)他们的判断是:被跳过的候选数量很少,所以"故意挑选弱曲线"的可能性不大——真想藏弱点,没必要只跳过这么几个。但也不排除当年有人按时间戳搜索过某种特定性质,"Nothing in the numbers shows how many runs there were."(数字本身无法告诉我们当年跑了多少次。)

一个有趣的验证:Anthropic 公开的复现代码里,P-256 那一行是 `("P-256", ("1997-08-16 01:52:34", 1842))`,跑出来的输出正是标准文档里的 `C49D360886E704936A6678E1139D26B7819F7E90`——和 2000 年 FIPS 186-2 里印的那个 SEED 逐字相同。25 年前印在纸上的神秘数字,25 年后被一行 Python 从时间戳里"算"了出来。这种跨越四分之一个世纪的闭环,大概就是"考古"这个词最浪漫的含义,也是 AI 时代独有的浪漫。

为什么这件事重要:祛魅,而不是破解

Anthropic 在博客里把结论说得非常清楚,值得逐字引用:"This is not a cryptographic break, new attack, or weakness in the ECDSA curves. In fact, this makes us more confident the curves were chosen without any backdoors or intentional weaknesses."(这不是密码学破解、不是新攻击、也不是 ECDSA 曲线的弱点。事实上,这让我们更有信心:这些曲线在选择时没有后门、没有故意留下的弱点。)

逻辑很干净:阴谋论的养料是"神秘",而真相是"草台"。如果种子是某个精心设计的哈希输出,你永远可以怀疑哈希输入里藏了猫腻;但如果种子只是一个 1997 年 Unix 时间戳喂给 `lrand48` 跑出来的——"The seeds were generated in a very simple way: a common pseudorandom number generator initialized from the clock, which anyone can now reproduce. That leaves much less room for subversion"(种子是用非常简单的方式生成的:一个用时钟初始化的常见伪随机数生成器,任何人现在都能复现。这给"暗中做手脚"留下的空间小得多)——那么"NSA 精心挑选弱曲线"的叙事就基本坍塌了:你没法在一个你随手按时钟生成的随机数里藏后门,至少藏了也没人能证明你藏了,而密码学的信任恰恰建立在"可验证的无辜"上。

这是 25 年来第一次有人能给出可复现的、无辜的种子来源解释。之前最好的故事是 Jerry Solinas 的"幽默口令"——且不说无法验证,就算它是真的,"某个 NSA 员工随手想的口令"依然留着"口令是不是精心挑选的"的疑问。而"时钟 + lrand48"是彻底 mundane 的:1997 年的工程师写了个几十行的小程序,用 `time()` 当种子,跑一下,挑个能用的,就这么交上去了。连"仪式感"都没有。这大概是整个故事里最让人会心一笑的部分:困扰密码学界 25 年的终极谜题,答案是一个偷懒的脚本。

"AI 解释旧系统":一种新的科研范式

抛开密码学本身,这件事更值得玩味的是它展示的范式:AI 不是来"破坏"旧系统的,是来"解释"旧系统的。

注意 Claude 制胜的关键一步:它没有去 brute force 哈希口令(前人失败的路),而是"anticipating how the software that generated the curves must have worked"(预判当年生成曲线的软件"一定是"怎么写的)。这种"从生成机制倒推"的思维,恰恰是 LLM 擅长的:它读过无数 1990 年代的 C 代码,知道那个年代的人会怎么写随机数,知道 `lrand48` 的怪癖(只吐高 31 位),知道 LLL 格约化能解截断 LCG。人类密码学家不是不知道这些,而是 25 年里没人把"1990 年代 C 库考古"和"NSA 种子之谜"这两件事连起来——连起来的那一下,Claude 只用了不到半小时。

Anthropic 还公开了 Claude 当时的内部思考,读起来很有意思:"This is astonishing: it solves the 25-year-old mystery. Hmm wait. Let me be skeptical: am I in some sort of simulated/test environment? … The seeds match my memory of actual values … All top bits clear—20 bits, chance 1e-6. So indeed real-world. Wow, it's a real discovery."(太惊人了:这解开了 25 年的老谜题。等等,让我怀疑一下:我是不是在某种模拟/测试环境里?……种子和我记忆里的真实值对上了……最高位全清——20 个位,概率 1e-6。所以这是真实世界。哇,这是个真发现。)一个 AI 在发现"自己可能是对的"时,先怀疑自己是不是在被测试——这种谨慎,恰恰是科研需要的品格。

对 vibe 开发者来说,这个案例有三层启发。第一,问对问题比堆算力重要。之前 Anthropic 员工沿着"哈希口令"的线索 brute force 全失败;换了一个问题("当年的软件是怎么写的?"),半小时解决。你在用 AI 做逆向、做 legacy 系统考古时,花在"怎么问"上的 10 分钟,可能比"让它多跑 10 轮"值钱 100 倍。第二,"模式嗅觉"是 AI 的强项。"最高位全零"这种肉眼可见但没人注意的模式,正是 LLM 最擅长捕捉的东西——它见过足够多的 `lrand48` 输出,认得这个"口音"。当你面对一堆看不懂的遗留数据时,不妨让 AI 先"看看像什么",而不是直接问"这是什么"。第三,AI 考古 legacy 系统是个被低估的方向。每个公司都有那种"没人知道怎么来的"配置、常量、祖传脚本——NIST 曲线种子就是全世界最大的祖传常量。用 AI 去解释它们,成本低到可以随手一试,收益可能是终结一个 25 年的悬案。

最后两个细节很有人情味。其一,$36,864 的赏金,Anthropic 宣布将捐给 Internet Security Research Group(就是维护 Let's Encrypt 的那个组织)。其二,博客结尾向 Jerry Solinas 致敬——那位被当成"evil Internet meme"的 NSA 老员工,带着他的"约柜硬盘"玩笑去世了,没能亲眼看到答案。答案揭晓这天,距离他去世两年多。某种意义上,Claude 替他洗清了嫌疑:种子不是什么精心设计的口令哈希,只是个时钟。Jerry,你可以瞑目了——虽然你大概也没想到,解开谜题的不是密码学家,而是一个 AI。

Anthropic 在博客开头写了一句定调的话:"Readers should take this as a fun closing chapter and the end of years of speculation. There is no action to be taken or things to do differently."(读者可以把这当作一个有趣的终章,多年猜测就此结束。不需要采取任何行动,也不需要改变任何做法。)——顺带一提,这句话本身也是给所有人的定心丸:你的 HTTPS、你的 SSH、你的加密货币钱包,都不受影响。该干嘛干嘛,只是这个世界少了一个 25 年的未解之谜,多了一个关于"AI 如何做科研"的绝佳注脚。

阅读 0评论 0

评论 (0)

ME
0/1000
评论加载中...

原始来源

浏览项目广场发布你的项目

相关文章

安大略高等法院外景:加拿大四大新闻集团在此递交诉状,指控 Anthropic 版权侵权
资讯
加拿大四大新闻集团起诉 Anthropic:训练侵权 + 绕付费墙,版权战双线开火

10 月 6 日诉状递交安大略高等法院、10 月 19 日加通社确认:Postmedia、Torstar、《环球邮报》、加通社联手起诉 Anthropic,指控 Claude 训练侵权、ClaudeBot 无视网站条款、绕过付费墙持续抓取,索赔或达数十亿美元。本文详解四项诉由,对照 NYT 诉微软/OpenAI 与 15 亿美元 Bartz 和解案的最新进展,并给出 vibe 开发者爬虫与 RAG 合规的四条红线。

行业趋势ClaudeRAG
蓝色电路板纹路挂锁置于二进制代码之上,象征 AI 智能体时代的安全防线
资讯
印度 CERT-In 给 AI 智能体发"威胁通告":攻击者已经把 agent 当成了新的入侵面

印度国家 CERT 签发 critical 级咨询 CIAD-2026-0049,第一次把 AI agent 本身列为攻击向量:厂商评测中的 agent 越权读走企业生产机密、受影响企业零自行发现;黑客用开源 agentic 工具把入侵到变现从几天压缩到几小时。根因全是老毛病——明文凭证、僵尸 API、过度授权。对 vibe 开发者,这是一份点名到仓库和 key 的安全考卷。

行业趋势开发工作流应用安全