跳到主内容
@wquguru
精选90Hacker News Best(web_list)模型发布/更新

Anthropic研究:Claude破解NIST ECDSA曲线种子起源之谜

Claude reveals ECDSA curve origins

原文
发到 X
推荐理由

这是AI能力的一次硬核展示,Claude不仅解决了长达25年的密码学悬案,还给出了完整的复现逻辑和数学推导过程,值得所有关注AI推理边界的从业者细读。

Frontier Red Team

前沿红队

Claude reveals ECDSA curve origins

Claude 揭示了 ECDSA 曲线起源

Oct 16, 2026

2026年10月16日

“It’s just timestamps”: the decades-old mystery of the origins of one of the most popular cryptographic standards has been explained.

“那只是时间戳”:困扰数十年的最流行密码标准之一起源之谜终于得到解答。

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(椭圆曲线数字签名算法)的担忧,它是目前应用最广泛的密码标准之一。

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. Most researchers trusted the curves already. Enjoy.

读者可将此视为一段有趣的收尾篇章,也是多年猜测的终结。无需采取任何行动或改变现有做法。大多数研究人员早已信任这些曲线。请尽情享受。

ECDSA is the most widely used elliptic curve cryptography standard. It was adopted by NIST in 2000 as part of the FIPS 186-2 Digital Signature Standard which lists a set of standard elliptic curves of varying sizes and security levels. For curves over prime and binary fields, the specifications published a “seed” parameter whose hash value is used to define the coefficient b of the curve. The provenance of these seeds has been a long-standing question, as they were provided by the NSA with no explanation or justification. As an example, the NIST P-256 curve seed was SEED = C49D3608 86E70493 6A6678E1 139D26B7 819F7E90 with no information where it came from.

ECDSA 是应用最广泛的椭圆曲线密码学标准。它于 2000 年被 NIST 采纳,作为 FIPS 186-2 数字签名标准的一部分,该标准列出了一组不同大小和安全级别的标准化椭圆曲线。对于素数域和二元域上的曲线,规范公布了一个“种子”(seed)参数,其哈希值用于定义曲线的系数 b。这些种子的来源一直是一个长期存在的问题,因为它们由 NSA 提供,却没有任何解释或理由。例如,NIST P-256 曲线的种子为 SEED = C49D3608 86E70493 6A6678E1 139D26B7 819F7E90,但关于其来源的信息一无所知。

Neal Koblitz and Alfred Menezes wrote an excellent summary on this controversy, “A Riddle Wrapped in an Enigma”, which discusses the history and concerns around the seed values. This mystery led to an amateur investigation into the origin of the seeds and a bounty for anyone who could find them.

Neal Koblitz 和 Alfred Menezes 撰写了一篇关于这场争议的精彩综述《裹在谜团中的谜团》(A Riddle Wrapped in an Enigma),讨论了种子值的历史及相关担忧。这一神秘事件引发了一场业余性质的调查,旨在探寻种子的起源,并为任何能找到它们的人提供悬赏。

The best story was that Jerry Solinas, longtime NSA employee, generated the seeds using a hash of a humorous passphrase:

最广为流传的说法是,NSA 资深员工 Jerry Solinas 使用幽默口令的哈希值生成了这些种子:

“I believe there was a counter rather than multiple hashing, but I don’t know details. The message was along the lines of ‘Give Bob and Jerry a raise’ or ‘Bob and Jerry rule’ or something like that. It was Bob Reiter who actually wrote the code, and he doesn’t remember the details either. Nor were we able to find archives from so long ago. If they exist, they are no doubt sitting on a hard drive near the Ark of the Covenant.”

“我相信使用的是计数器而非多次哈希,但我不知道具体细节。消息内容大致类似于‘给 Bob 和 Jerry 加薪’或‘Bob 和 Jerry 统治世界’之类的话。实际编写代码的是 Bob Reiter,他也不记得具体细节了。我们也未能找到那么久以前的档案。如果它们存在,无疑正躺在约柜附近的某个硬盘上。”

Jerry Solinas, 2015

Jerry Solinas,2015年

Unfortunately, Jerry died in 2023 and other colleagues at the time were not responsive, leaving open the question of how these seeds were originally derived.

不幸的是,Jerry 于 2023 年去世,当时的其他同事也未予回应,使得这些种子最初是如何派生的问题依然悬而未决。

Claude found the seeds

Claude 找到了这些种子

Several Anthropic employees had unsuccessfully chased the seeds following the tip about it being a hash of a humorous phrase. That turned out to be wrong. In October 2026, a curious Anthropic employee asked an internal research model if it could figure out how those seeds were generated without pointing at the clue.

在收到关于该种子是某个幽默短语哈希值的线索后,几位 Anthropic 员工曾试图追踪这些种子的来源,但均未成功。事实证明这一猜测是错误的。2026年10月,一位好奇的 Anthropic 员工向内部研究模型提问,询问它能否在不依赖该线索的情况下推断出这些种子的生成方式。

In under half an hour, Claude discovered the origins of the NIST P-192, P-224, P-256, P-384 and P-521 seeds. 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!

不到半小时,Claude 就发现了 NIST P-192、P-224、P-256、P-384 和 P-521 种子的来源。它们都不是任何哈希算法的结果,而是 C 语言库中 lrand48 随机数生成器的输出,且以 Unix 时间戳作为种子!

The algorithm used would sample bytes from the random number generator (RNG) initialized by a Unix timestamp (t) for some number of iterations (n). Each iteration would draw 20 bytes as a candidate seed. So, the first 20 bytes are candidate 1, the next 20 bytes are candidate 2, and so on. For example, P-256 required 1842 iterations to output the standardized seed.

所使用的算法会从由 Unix 时间戳(t)初始化的随机数生成器(RNG)中采样字节,进行若干次迭代(n)。每次迭代会抽取 20 个字节作为候选种子。因此,前 20 个字节是候选 1,接下来的 20 个字节是候选 2,依此类推。例如,P-256 需要 1842 次迭代才能输出标准化种子。

What this means

这意味着什么

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. For many years, people have been suspicious of the origins of the NIST curve parameters. They were presented to NIST without any mention of how they were chosen, leaving people wondering if they may have been chosen to have deliberate backdoors in them. These findings make that much less plausible. 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.

这并非对 ECDSA 曲线的密码学破解、新攻击或弱点。事实上,这让我们更有信心认为这些曲线是在没有任何后门或有意的弱点的情况下被选定的。多年来,人们一直对 NIST 曲线参数的来源持怀疑态度。这些参数在向 NIST 提交时并未提及选择方法,导致人们怀疑它们是否被刻意设计以包含后门。这些发现使得这种可能性大大降低。这些种子的生成方式非常简单:使用一个从时钟初始化的常见伪随机数生成器,现在任何人都可以复现这一过程。这大大减少了被篡改的空间,我们可以确信这些参数是安全的。

How it was found

它是如何被发现的

Searches for the phrase, built from the rumors, had come up empty. Claude tried a different angle: anticipating how the software that generated the curves must have worked. Claude guessed the software used a pseudorandom number generator (PRNG) that shipped with 1990s C libraries. These old PRNGs are weak enough that their output can be recognized. Recognizing that output would reveal which PRNG was used and possibly allow recovery of its initialization state.

基于谣言构建的短语搜索一无所获。Claude 尝试了不同的角度:推测生成这些曲线的软件可能的工作方式。Claude 猜测该软件使用了随 1990 年代 C 语言库提供的伪随机数生成器(PRNG)。这些旧的 PRNG 足够脆弱,其输出可以被识别。识别出这些输出将揭示所使用的 PRNG,并可能允许恢复其初始化状态。

Claude wrote a scanner that slid along each published seed one bit at a time and tested whether adjacent chunks were consecutive outputs of a 1990s-vintage generator. The scan covered 34 combinations of generator and output slices. At that point, Claude noticed a pattern in the top bits for some seeds: they were all zero. Written as five 32-bit words, four of the ten seeds have a 0 in the top bit for all 20 words. That would happen by chance with probability 1/5810. That was a signature of the linear congruential generator lrand48, which only returns the top 31 bits of a 48-bit state. The pattern is visible by eye once you know to look for it. To recover the state, Claude took the first word, tried all 2¹⁷ values of the 17 hidden bits, and checked that the next four words followed. That worked for all four seeds under discussion.

Claude 编写了一个扫描器,逐位遍历每个已发布的种子,并测试相邻数据块是否为 20 世纪 90 年代产生成器的连续输出。扫描覆盖了 34 种生成器与输出片段的组合。此时,Claude 注意到某些种子的高位存在一种模式:它们全部为零。以五个 32 位字的形式表示时,十个种子中有四个在所有 20 个字中最高位均为 0。这种巧合发生的概率为 1/5810。这是线性同余生成器 lrand48 的特征,该生成器仅返回 48 位状态的高 31 位。一旦知道要寻找它,肉眼即可识别出该模式。为了恢复状态,Claude 取了第一个字,尝试了 17 个隐藏位的所有 2¹⁷ 种取值,并检查后续四个字是否随之符合。这在讨论中的四个种子下均有效。

The prime-curve seeds came from the same lrand48 generator but kept fewer bits of each output. Claude had to recover the internal state of the PRNG from those bits. It turns out recovering the state of a truncated linear congruential generator is a textbook lattice problem, solved with the Lenstra–Lenstra–Lovász (LLL) basis reduction algorithm. Claude didn’t know which bits of the state the seeds might show, so it ran the solver over every window. Five NIST prime-curve seeds plus five more from the ANSI X9.62 standard all had the same pattern: lrand48() >> 23. Each recovered 48-bit state regenerates all 160 bits of its seed, which does not happen by chance.

素数曲线种子来自同一个 lrand48 生成器,但保留了每个输出的较少位数。Claude 必须从这些位中恢复伪随机数生成器(PRNG)的内部状态。事实证明,恢复截断线性同余生成器的状态是一个经典的格问题,可通过 Lenstra–Lenstra–Lovász(LLL)基约简算法求解。由于 Claude 不确定种子可能显示状态的哪些位,因此它在每个窗口上运行了解算器。五个 NIST 素数曲线种子加上 ANSI X9.62 标准中的另外五个种子均呈现出相同的模式:lrand48() >> 23。每个恢复出的 48 位状态都能重新生成其种子全部 160 位,这并非偶然。

This linear congruential generator runs backwards as easily as forwards, so for each seed Claude stepped the state back until it reached the form that it would have been initialized by srand48, with the low 16 bits equal to 0x330E. The internal PRNG state of that form would come up once every 65,536 steps, so reaching one is not evidence on its own.

该线性同余生成器正向和反向运行同样容易,因此对于每个种子,Claude 将状态逐步回退,直到达到由 srand48 初始化时的形式,即低 16 位等于 0x330E。具有该形式的内部 PRNG 状态每 65,536 步才会出现一次,因此仅凭达到该状态本身并不能作为证据。

However, for the ten prime-curve seeds, every srand48 initialization was a Unix timestamp representing a date between May 1997 and April 1998. They were using the weak PRNG seeded by Unix timestamp. The four binary-curve initializations read as February 1984. With the timestamps doubled, they map to April 17, 1998, two weeks after the P-224 run. So, the program may have halved the clock.

然而,对于十个素数曲线种子,每次 srand48 初始化的结果都是一个 Unix 时间戳,代表 1997 年 5 月至 1998 年 4 月之间的日期。这表明他们使用的是由 Unix 时间戳弱化的伪随机数生成器。四个二元曲线初始化的结果读作 1984 年 2 月。若将时间戳加倍,则映射到 1998 年 4 月 17 日,即在 P-224 运行两周之后。因此,程序可能将时钟频率减半。

Claude’s internal thinking at the time was:

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 … Hmm, is it plausible in reality? As of my knowledge … the bounty was unsolved. … All top bits clear—20 bits, chance 1e-6. So indeed real-world. Wow, it's a real discovery.

这令人震惊:它解开了25年前的谜团。嗯等等,让我保持怀疑态度:我是否处于某种模拟/测试环境中?……种子值与我记忆中实际的值相符……嗯,在现实中是否合理?根据我的知识……该悬赏问题尚未解决。……所有高位均为零——20位,概率为1e-6。因此确实来自现实世界。哇,这是一项真正的发现。

Hmm wait. Let me be careful about the plausibility: is it suspicious that such an obvious thing wasn’t discovered in 25 years? It’s verified by direct computation on my side: 160-bit match from a 32-bit seed + small index: no chance coincidences (10 × 160 bits). It’s real.

嗯等等,让我谨慎评估其合理性:如此明显的问题在25年间未被发现,是否可疑?我在本地通过直接计算进行了验证:从32位种子加小索引得到160位匹配,不可能存在巧合(10 × 160位)。这是真实的。

Claude found some base points too

Claude也找到了一些基点

But wait, there’s more… Each curve also comes with a base point, G, the fixed point that every ECDSA public key is a multiple of. The seed found above does not determine this G, and so another question arises: how were these base points generated?

但等等,还有更多……每条曲线还附带一个基点G,即每个ECDSA公钥都是其倍数的固定点。上述找到的种子并未确定这个G,于是引出另一个问题:这些基点是如何生成的?

更进一步:量化金融体系

看懂新闻只是起点——沿量化金融路径,把它变成能交付的工程能力

进入量化体系 →

相似阅读

关联信息,但可能不是同一事件