Aller au contenu

Les graines de la courbe NIST P-256 viennent d'une exécution de lrand48 en 1997

Anthropic a retracé la graine de la courbe NIST P-256 jusqu'à une exécution de lrand48 lancée le 16 août 1997, et a réclamé une prime de 36 864 $. Cette découverte ne casse pas les courbes.

Par Tech AI Wire Team

3 min de lecture

XLinkedIn
Le collage d'Anthropic pour ses recherches sur les graines des courbes : une graine de tournesol sur du papier déchiré vert et anthracite, à côté d'une bande de papier violette, sur un fond rose en demi-teinte.
Photo: Anthropic

En chiffres

bounty, donated to Let's Encrypt's nonprofit ISRG
$36,864
candidate number of the published P-256 seed
1,842
year the P-256 generator run started
1997

Une équipe d'Anthropic a découvert d'où venaient les graines d'apparence aléatoire derrière la courbe P-256 du NIST et d'autres courbes elliptiques standard. Les graines ont été produites en 1997 et 1998 par un ancien générateur de nombres aléatoires en C, lrand48, initialisé à partir de l'horloge de l'ordinateur. La découverte, revendiquée le 15 octobre 2026, clôt une question dont les cryptographes débattent depuis des années. Elle n'affaiblit pas les courbes.

La prime et qui l'a réclamée

Filippo Valsorda, ingénieur en cryptographie, a offert il y a trois ans une prime à quiconque saurait expliquer les graines. Son billet annonçant la revendication indique que des chercheurs d'Anthropic l'ont réclamée à 01:07:51 UTC le 15 octobre 2026. La prime a été triplée pour atteindre 36 864 $ et revient à ISRG, l'organisation à but non lucratif qui gère le service de certificats Let's Encrypt.

Anthropic a publié son propre compte rendu le 16 octobre. Il cite dix chercheurs, dont Nicholas Carlini et Steve Weis. Anthropic indique que son modèle Claude a repéré le motif en moins d'une demi-heure.

Pourquoi les graines comptaient

Les courbes premières du NIST, de P-192 à P-521, servent à ECDSA, une méthode courante de signature numérique. Chaque courbe a été générée à partir d'une graine de 20 octets. Selon la norme ANSI X9.62, la graine est hachée avec SHA-1 pour produire les nombres de la courbe. Une graine d'apparence aléatoire est censée prouver que personne n'a choisi une courbe arrangeante.

Le problème, c'est que personne ne savait d'où venaient les graines. Elles avaient été remises en 1997 par Jerry Solinas, un mathématicien de la NSA mort en 2023. La version racontée pendant des années voulait qu'il s'agisse de hachages de phrases en anglais. L'inquiétude était simple : si les graines avaient été choisies librement, quelqu'un aurait pu en essayer beaucoup jusqu'à obtenir une courbe faible. Valsorda écrit désormais que ces résultats « excluent complètement la technique décrite par Bernstein et Lange », deux chercheurs qui ont étudié ce risque.

Comment les graines ont été produites

La méthode était simple, selon les deux comptes rendus. Un programme transmettait l'horodatage Unix courant, le nombre de secondes écoulées depuis 1970, à srand48(). Il tirait ensuite du générateur des candidats de 20 octets et testait chacun d'eux. Les candidats qui ne respectaient pas les règles d'ANSI X9.62 étaient écartés.

Le premier indice de Claude était statistique. Selon Anthropic, quatre des graines avaient un bit de poids fort à zéro dans chacun de leurs 20 mots, une chance sur 5 810 pour des données vraiment aléatoires. Ce motif désignait un générateur faible des années 1990, lrand48. L'équipe a ensuite utilisé la réduction de réseaux, une technique mathématique qui permet de retrouver des nombres cachés, pour reconstruire l'état du générateur.

CourbeDémarrage du générateur (UTC)Candidat utilisé
P-19218 mai 1997, 14:45:34139
P-5218 août 1997, 01:12:041 136
P-25616 août 1997, 01:52:341 842
P-38430 août 1997, 14:50:082 688
P-2243 avril 1998, 12:52:077 026

Crypto Briefing rapporte les mêmes chiffres pour P-256 : l'horodatage 871696354 et la graine C49D360886E704936A6678E1139D26B7819F7E90. Valsorda a écrit sa propre version de l'algorithme en Go, et Anthropic a publié son code sous la licence de domaine public CC0.

Ce qui reste inexpliqué

La réponse n'est pas complète. Valsorda a trouvé une règle supplémentaire au-delà d'ANSI X9.62 : une courbe est rejetée si son ordre compte plus de bits que le corps sur lequel elle est construite. Une seconde règle lui échappe encore, écrit-il. La méthode laisse environ deux fois plus de graines valides que celles qui ont été publiées.

Anthropic liste les mêmes lacunes. Le candidat 876 de l'exécution P-256 donne lui aussi une courbe valide, et pourtant c'est le candidat 1 842 qui a été utilisé. Les points de base de P-224, P-256, P-384 et P-521 restent inexpliqués, tout comme la graine de la courbe binaire B-163. Anthropic a bien expliqué six points de base, dont celui de P-192, grâce à un autre générateur issu d'une bibliothèque appelée FreeLIP.

Ce que cela signifie pour les développeurs

Rien dans votre code ne doit changer. Anthropic précise que ce travail n'est ni une cassure cryptographique, ni une nouvelle attaque, ni une faiblesse des courbes. Valsorda ajoute que les praticiens n'avaient pas d'inquiétude sérieuse, même avant cela.

Ce qui change, c'est le débat. Les équipes qui évitaient P-256 parce que ses graines étaient un mystère peuvent revoir ce choix avec de meilleures preuves. Anthropic indique que ces résultats rendent une porte dérobée moins plausible. Les candidats sautés montrent que le choix n'est toujours pas entièrement expliqué, donc le débat se resserre au lieu de se clore.

Si vous travaillez en cryptographie, le code de reproduction vaut la lecture. Il montre comment un test statistique combiné à la réduction de réseaux peut reconstruire l'état d'un générateur à partir de sa seule sortie. C'est un bon rappel de ne jamais utiliser lrand48 pour quoi que ce soit de secret.

Les questions ouvertes sont une belle énigme pour les curieux. La seconde règle de rejet et les points de base manquants sont des problèmes que personne n'a encore résolus.

Sources

  1. The NIST Elliptic Curves Seeds Bounty Has Been Claimed - Filippo Valsorda
  2. Claude reveals ECDSA curve origins - Anthropic
  3. Claude traces NIST P-256 seed to a 1997 random number generator run - Crypto Briefing

Articles liés