唯一可能知晓答案的人在 2023 年去世后,这个悬而未决的问题其实有一个平淡无奇的答案:一个由系统时钟初始化的 20 世纪 90 年代随机数生成器。作者表示,这一结果让他们更加确信(而非更加怀疑)这些曲线是诚实选出的。
执行摘要
- 2000 年,NIST 将 ECDSA 纳入 FIPS 186-2 数字签名标准。规范中公布了“种子”参数,其哈希值用于定义曲线系数 b。美国国家安全局(NSA)提供了这些种子,但没有附上任何解释或依据。
- 2026 年 10 月,一名 Anthropic 员工在不给任何提示线索的情况下,让一个内部研究模型去推算这些种子是如何生成的。在不到半小时内,Claude 发现这些种子全都不是哈希输出,而是由系统时钟初始化的常见伪随机数生成器 lrand48 的输出。
- 这一发现并非针对 ECDSA 曲线的密码学破解、新型攻击或安全弱点。作者表示,这反而让他们更加确信这些曲线在选取时不包含后门或蓄意弱点。
- Claude 还揭示了 1997 年 5 月生成的六条曲线的基点来源:它们均出自 Arjen Lenstra 的长整数算术软件包 FreeLIP 中的随机数生成器。据作者所知,此前从未有任何 NIST 曲线基点得到过解释。
- 仍待解答的问题包括:P-224、P-256、P-384 和 P-521 的基点是如何选定的,以及跳过某些候选曲线背后遵循了什么标准(如果有的话)。
一个看似推导而来的系数,以及无人能解释的种子 #
2000 年,NIST 将 ECDSA 纳入 FIPS 186-2 数字签名标准。其曲线规范中包含一个“种子”(seed)参数,该参数的哈希值被用来定义曲线的系数 b。在纸面上,这是一种令人安心的设计。按照这套逻辑,如果系数是由公开种子的哈希值算出来的,那么就没有人能够手工微调曲线参数。
然而,这套逻辑的可靠性完全取决于种子本身。这些种子由 NSA 提供,没有任何解释或依据,而这一空白正是全部问题的症结所在。哈希是一扇单向门:它只能证明系数是由种子推导出来的,却完全无法说明种子本身从何而来。多年来,这些种子一直作为无法解释的常数留在标准文档里。
曾有一个故事用来填补这一空白。流传最广的说法是,NSA 资深员工 Jerry Solinas 用一句幽默口令(passphrase)的哈希值生成了这些种子。原文随后指出,这一说法被证明是错的。这类故事之所以容易让人信以为真,是因为它们细节具体、略带趣味,而且没人能证伪。但作为证据,它们远远不够。实际后果就是没人能核实这一说法,而人们根据传言拼凑词句进行的暴力搜索也都一无所获。
最直接的求证对象自然是 Solinas 本人。但 Jerry 已于 2023 年去世,当时的其他同事也没有回应。这使得这些种子最初究竟是如何衍生出来的成了一桩悬案。
我认为这正是审视这一局面的正确视角:对于一项支撑数字签名体系的基础标准而言,把参数溯源问题寄托在少数几个人的记忆上,是一种非常脆弱的安排。而接下来发生的事情最有趣的地方在于,它根本不需要依赖那些记忆。答案一直就写在公开的种子里,只等人去验证正确的假设。
三十分钟,零提示,得出一个并非哈希的结果 #
2026 年 10 月,一名好奇的 Anthropic 员工在没有指向任何线索的情况下,询问一个内部研究模型能否弄清楚这些种子是如何生成的。这里的措辞很关键:既没有告诉模型去寻找什么,也没有先把答案交到它手里让它去验证。
在不到半小时内,Claude 就发现了 NIST P-192、P-224、P-256、P-384 和 P-521 种子的起源。结果非常直白:没有任何一个种子是哈希算法的产物。它们全都来自 C 标准库中 lrand48 随机数生成器的输出。
因此,人们永远不可能找到所谓的口令,因为根本就不存在什么口令。这些种子是由一个通过系统时钟初始化的常见伪随机数生成器生成的。这是一个毫无神秘感的解释,而这恰恰是它的魅力所在:它不需要任何机密、不需要特殊内部知识,也不需要任何无法解释的常数。
其运行机制很容易描述。算法的每一次迭代都会从生成器中抽取 20 个字节作为候选种子。迭代次数是个很有意思的细节,因为它表明整个过程是一次搜索,而非单次抽取。例如,P-256 经历了 1842 次迭代才输出最终写入标准的种子。运行这段程序的人让它不断筛选候选值,直到某个候选值生成的曲线满足其要求为止。
作者非常谨慎地界定了这一发现意味着什么、不意味着什么,他们的表述值得原样重申:这不是针对 ECDSA 曲线的密码学破解、新型攻击或安全弱点,无需采取任何应对行动。他们更进一步表示,这一发现让他们更加确信这些曲线在选取时没有任何后门或蓄意弱点。这是一个审慎的结论,也应当保持这份审慎。原文将其表述为作者自身的信心,这与“证明曲线绝对清白”是两码事。这一发现真正提供的,是用一个平淡、可核查的计算过程,取代了一个无法验证的传言。
扫描器如何找到 20 世纪 90 年代生成器的指纹 #
具体的研究方法值得关注,因为这是其他人可以复用的部分。
Claude 猜测,当年生成这些曲线的软件使用了随 20 世纪 90 年代 C 语言库附带的伪随机数生成器(PRNG)。原文将其视为一次猜测,而且猜得很准。它把原本漫无边际的搜索范围缩小到了特定年代的少数几个候选生成器上。
随后,Claude 编写了一个扫描器。它在每个公开种子上逐比特滑动,测试相邻的数据块是否为某个 90 年代生成器的连续输出。扫描涵盖了生成器与输出切片的 34 种组合。最终在最高有效位(top bits)上命中了一个模式,该模式纯属巧合出现的概率仅为 1/5810。
这个模式正是线性同余生成器(linear congruential generator)lrand48 的特征签名,该生成器每次只返回 48 位内部状态中的高 31 位。生成器的设计在这里露出了马脚:由于 lrand48 在每次调用时都会隐藏其 48 位状态中的低 17 位,其输出会呈现出真正随机字符串所没有的规律性,而专门寻找这种规律性的扫描器就能将其捕捉到。
为了恢复内部状态,Claude 提取了第一个字(word),并遍历测试了 17 个隐藏位的所有 2^17 种可能取值。这个搜索规模很小,而且由于生成器极其简单,计算成本极低。每个候选状态都可以与种子的下一个数据块进行比对,正确的状态会让整个序列严丝合缝地对齐。
素数域曲线(prime-curve)种子的破解稍微难一点,但也只是略微增加了一点难度。它们同样出自 lrand48 生成器,但每次输出保留的比特数更少。可见比特越少,用来锚定猜测的依据就越少,因此单纯的暴力枚举不再那么直接奏效。原文给出的解法是:恢复截断线性同余生成器的状态是一个经典的教科书级格密码问题,可以通过 Lenstra-Lenstra-Lovasz(LLL)格基规约算法求解。模型识别出了这一点,并直接调用标准工具解决了问题,全程没有用到任何偏门技巧。
NIST 的五个素数域曲线种子,外加 ANSI X9.62 标准中的另外五个种子,全都遵循同一个模式:lrand48() >> 23。十个种子共享同一条提取规则,这是它们背后出自同一套生成流程的强力证据。
接下来的验证步骤将“侥幸凑巧的拟合”与“真正的还原”区分了开来:恢复出的每一个 48 位内部状态,都完整再生(regenerate)出了对应种子的全部 160 个比特,这绝不可能是巧合。局部匹配或许还能用巧合解释,但每一个比特的完整复现是很难用巧合搪塞过去的,这也是为什么这一结论能够如此斩钉截铁。
逆向运行生成器以读取时钟时间 #
恢复出内部状态只能告诉你种子是怎么生成的,但还没告诉你它是什么时候生成的。为此,Claude 利用了该生成器的一个特性:它逆向回推与正向运行一样容易。对于每个种子,Claude 将内部状态一步步往回推,直到其满足 srand48 初始化后的特定形态,即低 16 位等于 0x330E。
这种形态本身就是一枚指纹。如果恢复出的状态能够一路回退到低 16 位为 0x330E 的状态,就说明该生成器是通过向 srand48 传入初始种子值的标准方式启动的。而在这个案例中,传入的初始种子值正是系统时间。这些曲线种子是用以 Unix 时间戳作为种子的弱伪随机数生成器生成的。
Claude 当时的内部思维链记录下了确认这一点的瞬间:高位的 20 个比特全部为零,随机碰撞出现这种情况的概率仅为 1e-6。这只是一个小细节,但它表明模型的推理是直接建立在浮现出的数字规律之上,而不是事后编造的故事。
不过,还原出来的日期起初并不全都合理。四条二进制域曲线(binary curves)的初始化时间读出来是 1984 年 2 月,对于一个在 20 世纪 90 年代末使用的生成器来说,这显然不是任何人预期的日期。但只要将这些时间戳翻倍,二进制域曲线的初始化时间就会映射到 1998 年 4 月 17 日,恰好在 P-224 生成运行的两周之后。原文由此推断,当年的程序可能先把系统时钟值除以了 2。这一推断使用了审慎的措辞,也理应如此:它为“为何原始数值读起来像 1984 年”提供了一个合理的解释,而翻倍后恰好落在另一条曲线生成两周之后,虽然不能直接证实当年程序内部的代码细节,却具有很强的启发性。
出于一个与密码学本身无关的原因,我认为这是整篇报告中最具说服力的部分。一个编造出来的故事往往会给出干净利落的日期;而这次的发现却先得出了一个突兀的日期,随后通过一个简单的修正,将二进制域曲线与 P-224 的生成过程严丝合缝地串联在了同一条时间线上。杂乱的数据在简单的假设下迎刃而解,这才是真实历史溯源该有的样子。
基点同样有一套生成配方 #
种子定义了曲线方程,而基点(base points)则是另一回事,原文对它们进行了单独探讨。
1997 年 5 月生成的六条曲线(包括 P-192 以及 ANSI X9.62 的五条示例曲线 prime192v2、prime192v3 和 prime239v1 至 v3)的基点,均来自 Arjen Lenstra 的长整数算术软件包 FreeLIP 中的随机数生成器。Victor Shoup 的 NTL 库早期版本也附带了相同的代码。第二个事实对于复核验证非常重要:该生成器是任何人都能查阅的公开代码,而非某款内部私有工具。
生成配方非常简短:用一个较小的整数作为生成器的种子;丢弃前七次输出;用经过模 p(mod p)约减的 26 位输出生成候选 x 坐标;不断重复候选生成过程,直到 x 恰好落在曲线上为止。
Claude 找出了这些生成器的初始种子:P-192 是 20000,prime239v1 至 v3 分别是 20420、20507 和 20509,prime192v2 和 v3 则是 20512 和 20517。这些都是典型的人工随手输入程序的小整数,完全吻合该配方第一步的要求。
作者在这里提出了一项谦逊且值得引述的声明:据他们所知,此前从未有任何 NIST 曲线基点得到过解释。这一限定语出自作者本人,且非常得体。他们并没有宣称自己穷尽检索了世上写过的每一份文档,只是陈述了自己所知的边界。
然而,这套配方到这里就止步了。P-224、P-256、P-384 和 P-521 的基点并不符合这套配方,作者也无法解释它们是如何选定的。如果一篇报告为了显得干净圆满而略过这一点,表面上会更好看,但作者如实保留了这一局限:该解释涵盖了 1997 年 5 月的六条曲线,而将 NIST 素数域曲线中的四个基点留作了未解之谜。
那些被跳过的候选曲线 #
最后一项发现最容易引发争论,因此值得仔细研读。
对于 P-256,最终发布的种子是第 1842 号候选值。但同一次运行中的第 876 号候选值同样能生成一条规模合适、且参数选取方式与发布曲线完全一致的素数阶曲线。换句话说,生成流程跳过了一条表面看来完全合格的曲线。
这并非孤例。P-224 的生成过程跳过了三条这样的合格曲线,而生成 ANSI X9.62 示例曲线的两次运行则一共跳过了七条。
作者坦承了他们的未知:他们不知道当年使用了什么标准来跳过这些曲线,也不知道这是否只是某种无意的副产物(unintentional artifact)。这是一项明确写出的局限性,而对“无意的副产物”保持审慎定性也是最诚实的立场:数据只表明有候选曲线被跳过了,但没有表明原因。
随后,他们给出了自己的判断:由于被跳过的候选曲线数量很少,他们认为“蓄意挑选弱化曲线”的说法在逻辑上站不住脚。这是一种基于数量的审慎合理性推断。如果整个过程总共只跳过了寥寥几个候选值,那么用来搜寻特定弱点的操作空间就微乎其微。
不过仍有一项保留意见,原文将其表述为一种理论可能性而非既定事实:原则上,仍然可以设想当年通过遍历搜索传入随机数生成器的时间戳,挑选出了具有某种特定数学性质的曲线。这属于推测,原文也明确将其标记为推测。我们既不应将其视为任何实质证据,也不应悄无声息地将其抹去。公允的做法是将其作为一条尚未完全排除的路径留在台面上,同时注明作者认为“选出弱化曲线”并不现实。
这一结果改变了什么,又留下了什么悬念 #
先从它没有改变的事情说起:这些曲线并没有被攻破。原文用不同的措辞强调了两次,而且无需采取任何行动。任何把这项发现解读为“应当立即停用并替换 P-256”的人,都误读了原文。
它真正改变的,是一项长期疑虑的性质。只要这些种子的来历不明,“由 NSA 提供且无任何解释”就会一直是悬在标准头上的一个问号。现在,这个问号有了具体的答案。这些种子并不是由某句秘密口令算出的莫测高深的哈希值,而是由时钟初始化的程序调用 lrand48 生成的输出,并且可以从恢复出的状态中逐比特完整复现。一个任何拥有公开种子的人都能亲手验证的解释,远胜过一个无人能查证的传言。
对于基于密码学标准构建系统的创始人和工程师而言,这里有一点值得深思。提出参数来源声明很容易,核实起来却往往很昂贵;而一旦问对了问题,本文所描述的核实过程只花了不到半小时。扫描器、2^17 规模的搜索以及格基规约全都是常规操作。多年来真正欠缺的,是有人愿意去做那件毫无光环的苦差事:拿这些常规工具去直接碰撞公开的数字。
同时,我也想克制过度吹捧这种方法的冲动。原文报告的是一个团队针对一组特定种子取得的成果,并没有宣称同样的方法能够破解所有标准中每一个来历不明的常数,我也不会替他们做此宣称。它所展示的价值更加具体,而且在我看来也更加实用:当某个参数的起源成谜时,一个严谨的模型加上对当年工具链的合理猜测,就能快速验证假设并完整给出推导过程。
至于未竟的工作,已经清晰到足以构成一份后续研究议程。P-224、P-256、P-384 和 P-521 这四个基点仍然缺乏解释。被跳过的候选曲线(例如 P-256 在发布第 1842 号之前跳过的第 876 号候选值)依然缺乏明确的筛选标准,目前也没人知道这种跳过究竟是有意为之还是无心留下的痕迹。这些答案究竟还留存在古老的源代码中、健在同事的记忆里,还是藏在同样能够通过模式搜寻破解的数学规律中,仍是悬而未决的问题。破解种子只花了半小时;而那四个基点,已经成功抵御过一次这种方法的冲击了。
常见问题解答 #
这一发现是否攻破了 P-256 或 P-384 等 NIST ECDSA 曲线?
没有。发现曲线种子是由 lrand48 而非口令哈希生成的,并不会给 ECDSA 曲线带来任何密码学破解、新型攻击或数学弱点,因此无需因为这一发现采取任何修复或迁移措施。
NIST 素数域曲线的种子实际上是如何生成的?
每个 160 位的种子都是通过调用 C 标准库的 lrand48 线性同余生成器生成的(具体而言,五条 NIST 素数域曲线和五条 ANSI X9.62 曲线均使用了 lrand48() >> 23),并通过 srand48 以 Unix 时间戳进行初始化。利用 Lenstra-Lenstra-Lovasz(LLL)格基规约算法恢复出 48 位内部状态后,即可完整再生出每个公开种子的全部 160 个比特。
关于 NIST 椭圆曲线参数,还有哪些地方尚未得到解释?
虽然 P-192 和五条 ANSI X9.62 曲线的基点被追溯到了 Arjen Lenstra 的 FreeLIP 软件包中以小整数作为种子的随机数生成器,但 P-224、P-256、P-384 和 P-521 的基点并不符合这一配方;此外,跳过早期合格的素数阶候选曲线(例如在 P-256 中跳过第 876 号候选值而采用第 1842 号候选值)的具体标准仍然未知。
参考资料 #
- Anthropic Frontier Red Team, (2026). Claude reveals ECDSA curve origins ⧉. Anthropic.
- National Institute of Standards and Technology, (2000). FIPS PUB 186-2: Digital Signature Standard (DSS) ⧉. NIST.
- Victor Shoup, (2024). NTL: A Library for doing Number Theory ⧉. libntl.org.
最近审阅 .
转载本文
复制 Medium 格式
# NIST 椭圆曲线背后的神秘种子从来都不是哈希值,Claude 在不到半小时内就查明了真相 — Sebastien Rousseau > Originally published at [https://sebastienrousseau.com/zh-hans/2026-10-26-nist-tuoyuan-quxian-shenmi-zhongzi-bushi/](https://sebastienrousseau.com/zh-hans/2026-10-26-nist-tuoyuan-quxian-shenmi-zhongzi-bushi/) 随 NIST P-192、P-224、P-256、P-384 和 P-521 曲线发布的种子从来都不是哈希输出。它们来自 C 标准库的 lrand48 生成器,并以 Unix 时间戳作为种子。 Read the full article on sebastienrousseau.com: https://sebastienrousseau.com/zh-hans/2026-10-26-nist-tuoyuan-quxian-shenmi-zhongzi-bushi/
复制 Mastodon 格式
NIST 椭圆曲线背后的神秘种子从来都不是哈希值,Claude 在不到半小时内就查明了真相 — Sebastien Rousseau 随 NIST P-192、P-224、P-256、P-384 和 P-521 曲线发布的种子从来都不是哈希输出。它们来自 C 标准库的 lrand48 生成器,并以 Unix 时间戳作为种子。 https://sebastienrousseau.com/zh-hans/2026-10-26-nist-tuoyuan-quxian-shenmi-zhongzi-bushi/
复制 LinkedIn 格式
NIST 椭圆曲线背后的神秘种子从来都不是哈希值,Claude 在不到半小时内就查明了真相 — Sebastien Rousseau 随 NIST P-192、P-224、P-256、P-384 和 P-521 曲线发布的种子从来都不是哈希输出。它们来自 C 标准库的 lrand48 生成器,并以 Unix 时间戳作为种子。. 以下是关键战略要点: - 一个看似推导而来的系数,以及无人能解释的种子. 2000 年,NIST 将 ECDSA 纳入 FIPS 186-2 数字签名标准。其曲线规范中包含一个“种子”(seed)参数,该参数的哈希值被用来定义曲线的系数 b。在纸面上,这是一种令人安心的设计。按照这套逻辑,如果系数是由公开种子的哈希值算出来的,那么就没有人能够手工微调曲线参数。. - 三十分钟,零提示,得出一个并非哈希的结果. 2026 年 10 月,一名好奇的 Anthropic 员工在没有指向任何线索的情况下,询问一个内部研究模型能否弄清楚这些种子是如何生成的。这里的措辞很关键:既没有告诉模型去寻找什么,也没有先把答案交到它手里让它去验证。. - 扫描器如何找到 20 世纪 90 年代生成器的指纹. 具体的研究方法值得关注,因为这是其他人可以复用的部分。. - 逆向运行生成器以读取时钟时间. 恢复出内部状态只能告诉你种子是怎么生成的,但还没告诉你它是什么时候生成的。为此,Claude 利用了该生成器的一个特性:它逆向回推与正向运行一样容易。对于每个种子,Claude 将内部状态一步步往回推,直到其满足 srand48 初始化后的特定形态,即低 16 位等于 0x330E。. 贵组织如何应对本文所述的挑战? → https://sebastienrousseau.com/zh-hans/2026-10-26-nist-tuoyuan-quxian-shenmi-zhongzi-bushi/ #神秘 #种子 #背后 #Nist #曲线 Sebastien Rousseau | CC-BY-4.0
引用本文
NIST 椭圆曲线背后的神秘种子从来都不是哈希值,Claude 在不到半小时内就查明了真相 — Sebastien Rousseau
随 NIST P-192、P-224、P-256、P-384 和 P-521 曲线发布的种子从来都不是哈希输出。它们来自 C 标准库的 lrand48 生成器,并以 Unix 时间戳作为种子。
BibTeX
@online{rousseau2026nist,
author = {Rousseau, Sebastien},
title = {{NIST 椭圆曲线背后的神秘种子从来都不是哈希值,Claude 在不到半小时内就查明了真相 — Sebastien Rousseau}},
year = {2026},
url = {https://sebastienrousseau.com/zh-hans/2026-10-26-nist-tuoyuan-quxian-shenmi-zhongzi-bushi/},
urldate = {2026}
}RIS
TY - GEN AU - Rousseau, Sebastien TI - NIST 椭圆曲线背后的神秘种子从来都不是哈希值,Claude 在不到半小时内就查明了真相 — Sebastien Rousseau PY - 2026 UR - https://sebastienrousseau.com/zh-hans/2026-10-26-nist-tuoyuan-quxian-shenmi-zhongzi-bushi/ ER -
Vancouver
Rousseau S. NIST 椭圆曲线背后的神秘种子从来都不是哈希值,Claude 在不到半小时内就查明了真相 — Sebastien Rousseau. sebastienrousseau.com. 2026 Oct 26. Available from: https://sebastienrousseau.com/zh-hans/2026-10-26-nist-tuoyuan-quxian-shenmi-zhongzi-bushi/
Chicago
Rousseau, Sebastien. "NIST 椭圆曲线背后的神秘种子从来都不是哈希值,Claude 在不到半小时内就查明了真相 — Sebastien Rousseau." sebastienrousseau.com. October 26, 2026. https://sebastienrousseau.com/zh-hans/2026-10-26-nist-tuoyuan-quxian-shenmi-zhongzi-bushi/.
APA
Rousseau, S. (2026, October 26). NIST 椭圆曲线背后的神秘种子从来都不是哈希值,Claude 在不到半小时内就查明了真相 — Sebastien Rousseau. sebastienrousseau.com. https://sebastienrousseau.com/zh-hans/2026-10-26-nist-tuoyuan-quxian-shenmi-zhongzi-bushi/
重新发布本文
NIST 椭圆曲线背后的神秘种子从来都不是哈希值,Claude 在不到半小时内就查明了真相 — Sebastien Rousseau
随 NIST P-192、P-224、P-256、P-384 和 P-521 曲线发布的种子从来都不是哈希输出。它们来自 C 标准库的 lrand48 生成器,并以 Unix 时间戳作为种子。
本文采用以下许可协议 Creative Commons Attribution 4.0 International. 重新发布需注明原始 URL 出处。
NIST 椭圆曲线背后的神秘种子从来都不是哈希值,Claude 在不到半小时内就查明了真相 — Sebastien Rousseau 随 NIST P-192、P-224、P-256、P-384 和 P-521 曲线发布的种子从来都不是哈希输出。它们来自 C 标准库的 lrand48 生成器,并以 Unix 时间戳作为种子。 Originally published at https://sebastienrousseau.com/zh-hans/2026-10-26-nist-tuoyuan-quxian-shenmi-zhongzi-bushi/ by Sebastien Rousseau. Licensed under CC-BY-4.0.
