News · SI

Claude cracks the decades-old mystery of where the NIST curve seeds came from

Anthropic says Claude worked out in under half an hour that the seeds behind NIST's P-192, P-224, P-256, P-384 and P-521 elliptic curves weren't hashes of a secret phrase but output from the C library's lrand48 random number generator, seeded with Unix timestamps from 1997 and 1998. Bounty organiser Filippo Valsorda reproduced the result, and the US$36,864 prize is going to the non-profit behind Let's Encrypt.

AnthropicClaudeCryptographyECDSANISTSecurity research

For more than two decades, nobody could say where the seeds behind the NIST elliptic curves came from. Anthropic now says Claude worked it out in under half an hour, and the answer is far more mundane than the theories: a stock C random number generator, started with the clock[1].

01 / 04

Why the seeds mattered

The NIST curves P-192, P-224, P-256, P-384 and P-521 were published in FIPS 186-2 in 2000 and now sit under a huge share of the internet's signatures and key exchanges. Each curve's parameters were derived by hashing a 20-byte seed, but the NSA handed over those seeds with no account of how they were picked[1]. That gap fed years of suspicion that the curves could have been chosen to carry a hidden weakness.

The best-known explanation came from NSA cryptographer Jerry Solinas, who recalled hashing a humorous phrase along the lines of "Give Bob and Jerry a raise". Solinas died in 2023, and the trail went cold[1]. Filippo Valsorda set up a public bounty for the answer three years ago[2].

02 / 04

What Claude found

Several Anthropic staff had chased the passphrase story without luck. This month an employee asked an internal research model to figure out how the seeds were generated, without pointing it at that clue[1].

Claude guessed the software had used one of the weak random number generators that shipped with 1990s C libraries, then wrote a scanner to test whether chunks of each seed looked like consecutive outputs from such a generator. It noticed that, written as 32-bit words, four seeds had a zero top bit in every word, a pattern with odds of about 1 in 5,810 by chance and a fingerprint of lrand48[1]. For the prime-curve seeds, which kept fewer bits of each output, it recovered the generator's internal state with LLL lattice reduction, a textbook technique for this kind of problem[1].

Stepping each recovered state backwards led to starting values that decode as Unix timestamps between May 1997 and April 1998. P-256's published seed is the 1,842nd 20-byte candidate from a run started at 01:52:34 UTC on 16 August 1997[1]. Anthropic published the Python to reproduce it; we ran it and got P-256's seed back exactly.

Valsorda says he reimplemented the algorithm in Go to verify the claim. In his words, the seeds are "not the hash of some saucy sentence, but the output of drand48 seeded with the time"[2].

03 / 04

Is P-256 safe?

Yes, and arguably safer-looking than before. Anthropic says this is not a break, attack or weakness, and that seeds drawn from an ordinary, reproducible generator leave "much less room for subversion"[1]. Its framing is that readers should treat it as a "fun closing chapter", with nothing to change.

There are loose ends. Some candidate seeds that would have produced valid curves were skipped; for P-256, candidate 876 of the same run also works. Anthropic says the number of skips is too small to make deliberately weakened curves plausible, but it doesn't know the selection rule[1]. Valsorda identified one extra rejection rule and says a second still escapes them, roughly halving the valid seeds[2]. The B-163 seed remains unexplained, as do the base points of P-224, P-256, P-384 and P-521, though Claude did trace the base points of P-192 and five ANSI example curves to the random generator in Arjen Lenstra's FreeLIP library[1].

The team claimed the bounty on 15 October and donated it to ISRG, the non-profit behind Let's Encrypt, tripling it to US$36,864[2].

04 / 04

Why it matters

The cryptography result is reassuring rather than urgent. The bigger signal is the method: a model that wasn't told where to look formed its own hypothesis about 1990s tooling, built the statistical tests, ran a lattice attack and checked its own work, closing a question humans had picked at for years. Expect more of this kind of archaeology on old standards, protocols and codebases where the original authors are gone.

FAQ

Questions, answered.

01

What exactly was the mystery?

The NIST elliptic curves published in FIPS 186-2 in 2000 were derived by hashing a 20-byte 'seed', but the NSA supplied those seeds with no explanation. That left people wondering whether the seeds had been chosen to plant a weakness. The long-running story was that the late NSA cryptographer Jerry Solinas had hashed a joke phrase he later forgot.

02

So where did the seeds come from?

According to Anthropic, they came from lrand48, the random number generator in standard C libraries, started with the then-current Unix time. The program drew 20 bytes at a time as candidate seeds. P-256's published seed is candidate 1,842 from a run started at 01:52:34 UTC on 16 August 1997.

03

Does this mean P-256 or ECDSA is broken?

No. Anthropic says it is not a break, attack or weakness, and that it makes a deliberate backdoor much less plausible, because the seeds came from an ordinary generator anyone can now reproduce. Its own advice is that there's nothing to do differently.

04

Has anyone checked the result?

Yes. Filippo Valsorda, who ran the seeds bounty, says he reimplemented the algorithm in Go to verify it. Anthropic also published short Python scripts that regenerate the seeds. We ran the seed script and it reproduced P-256's published seed exactly.

05

Is anything still unexplained?

A few things. Some valid candidate curves were skipped for reasons nobody can pin down, the B-163 binary-curve seed fits nothing tried so far, and the base points for P-224, P-256, P-384 and P-521 remain unexplained. Claude did trace the base points of P-192 and five ANSI X9.62 example curves to the random generator in Arjen Lenstra's FreeLIP library.

06

Who gets the bounty?

Valsorda says the Anthropic team claimed the full bounty on 15 October 2026 and chose to donate it to ISRG, the non-profit that runs Let's Encrypt, which tripled its value to US$36,864.