Les graines des courbes NIST n'étaient que des horodatages : Claude referme une énigme cryptographique de 25 ans
Anthropic affirme qu'un modèle de recherche interne a reconstruit en moins d'une demi-heure l'origine des graines NIST de P-192 à P-521 : pas le hachage d'une phrase, mais le générateur lrand48 de la libc semé avec des horodatages Unix de 1997-1998. Filippo Valsorda a vérifié le résultat avec une réimplémentation en Go et payé la prime ; les 36 864 dollars vont à l'ISRG. Pas une cassure - une confiance, avec reçus.

Faits vérifiés le 19 octobre 2026
Le 16 octobre, Anthropic a publié "Claude reveals ECDSA curve origins" : un modèle de recherche interne a reconstruit comment ont été générées en 1997-1998 les graines (seeds) derrière les courbes elliptiques NIST P-192, P-224, P-256, P-384 et P-521. Ces graines ne sont pas le hachage d'une phrase secrète, contrairement à la rumeur dominante. Ce sont les sorties du générateur lrand48 48 bits de la bibliothèque C, initialisé avec des horodatages Unix. Filippo Valsorda, qui avait lancé la prime communautaire sur cette énigme, a confirmé le résultat, réimplémenté l'algorithme en Go et payé : l'équipe a donné les 36 864 dollars à l'Internet Security Research Group. Anthropic précise qu'il ne s'agit pas d'une cassure et que rien ne doit changer dans ECDSA. L'article d'Anthropic et la confirmation de Valsorda

Un angle mort de 25 ans
ECDSA est le standard de signature sur courbes elliptiques le plus utilisé. Le NIST a adopté ses courbes en 2000 avec FIPS 186-2, et le coefficient b de chaque courbe dérive du hachage d'une graine publiée de 20 octets. Ces graines venaient de la NSA sans aucune explication. Koblitz et Menezes ont écrit le résumé classique de la controverse, "A Riddle Wrapped in an Enigma", et le malaise était assez concret pour que Valsorda organise une prime pour retrouver l'origine des graines. La meilleure version connue était le souvenir de Jerry Solinas lui-même en 2015 : il pensait que les graines étaient le hachage, peut-être avec un compteur, d'une phrase humoristique du genre "Give Bob and Jerry a raise". Solinas est mort en 2023 et aucune archive n'a survécu. La piste s'est refroidie là, jusqu'à ce qu'un employé d'Anthropic demande à un modèle de recherche interne de retrouver la méthode de génération sans lui souffler la rumeur.
Ce que le modèle a vraiment trouvé
En moins d'une demi-heure, selon Anthropic, le modèle a choisi un autre angle : au lieu de deviner des phrases, il a raisonné sur ce à quoi devait ressembler le logiciel de génération de courbes des années 1990. Les vieux générateurs aléatoires de libc sont assez faibles pour que leur sortie soit reconnaissable. Le modèle a écrit un scanner glissant le long de chaque graine bit par bit, testant 34 combinaisons de générateur et de tranche de sortie, et a remarqué que dans quatre des dix graines, le bit de poids fort de chaque mot de 32 bits est nul. Cela arrive par hasard avec une probabilité de 1 sur 5 810, et c'est la signature de lrand48, qui ne retourne que les 31 bits de poids fort d'un état de 48 bits. Pour ces graines, l'état a été récupéré en essayant les 131 072 valeurs des 17 bits cachés et en vérifiant les quatre mots suivants. Pour les graines des courbes premières, qui gardaient moins de bits par sortie, la récupération d'état est un problème de réseau (lattice) classique, et le modèle a lancé un solveur LLL sur chaque fenêtre. Cinq graines NIST et cinq graines ANSI X9.62 se décodent toutes comme lrand48() >> 23, et chaque état 48 bits récupéré régénère les 160 bits complets de sa graine, ce qui n'arrive pas par hasard.
Les horodatages sont le clou de l'histoire
Un générateur congruentiel linéaire tourne à l'envers aussi facilement qu'à l'endroit, donc chaque état a pu être remonté jusqu'à la forme d'initialisation de srand48, où les 16 bits de poids faible valent 0x330E. Cette forme apparaît une fois tous les 65 536 pas, donc à elle seule elle ne prouve rien. La preuve, c'est ce que lisent les initialisations : pour les dix graines des courbes premières, un horodatage Unix entre mai 1997 et avril 1998. Le générateur était semé avec l'horloge. Les quatre initialisations des courbes binaires se lisent comme février 1984, et doublées elles tombent sur le 17 avril 1998, deux semaines après le run de P-224, ce qui suggère que le programme divisait peut-être l'horloge par deux. L'article d'Anthropic inclut un court code de reproduction et cite le moment de doute interne du modèle, qui vérifie d'abord s'il est dans un environnement de test avant de conclure que la correspondance est réelle : dix correspondances indépendantes de 160 bits à partir de graines 32 bits et de petits indices ne sont pas des coïncidences.
Points de base, partiellement
Les graines ne déterminent pas le point de base G de chaque courbe, et aucun point de base NIST n'avait jamais été expliqué. Le modèle a trouvé que les six courbes générées en mai 1997, P-192 et les cinq courbes d'exemple ANSI X9.62, tirent leurs points de base du générateur de FreeLIP, le paquet d'arithmétique longue d'Arjen Lenstra ; les premières versions de NTL de Victor Shoup embarquaient le même code. La recette : semer avec un petit entier, jeter sept sorties, puis essayer des sorties 26 bits réduites modulo p jusqu'à ce qu'une tombe sur la courbe. Les graines de générateur récupérées sont petites et quasi consécutives : 20000 pour P-192, 20420, 20507 et 20509 pour les courbes prime239, 20512 et 20517 pour prime192v2 et v3. Les points de base de P-224, P-256, P-384 et P-521, comme ceux des courbes binaires NIST, restent inexpliqués.
Ce qui reste ouvert, et ce que ça change
Trois fils pendants comptent. Premier, les candidats sautés : la graine publiée de P-256 est le candidat 1 842 de son run, mais le candidat 876 donne aussi une courbe viable construite de la même façon, et le run de P-224 en a sauté trois autres. Valsorda note deux critères de rejet non documentés, l'un assez clair, l'autre qui lui échappe encore. Deuxième, la cinquième graine binaire B-163 ne colle à rien de ce qui a été essayé. Troisième, les points de base inexpliqués ci-dessus. Anthropic juge peu plausible une sélection de courbes affaiblies parce que le nombre de sauts est faible, tout en concédant que les chiffres ne montrent pas combien de runs il y a eu au total. La conclusion de sécurité est l'inverse d'une alerte : les graines viennent d'un générateur banal initialisé par l'horloge, que chacun peut désormais reproduire, ce qui laisse beaucoup moins de place à une subversion. Anthropic écrit noir sur blanc que la plupart des chercheurs faisaient déjà confiance aux courbes et qu'aucune action n'est nécessaire.
Pourquoi ce journal s'y intéresse
Ce qui m'intéresse ici, c'est la méthode, pas la cryptographie. Toutes les recherches humaines infructueuses couraient après la rumeur : hacher la bonne phrase. Le modèle a attaqué le processus générateur lui-même, et la première fissure fut un artefact statistique visible à l'oeil nu pour qui sait où regarder : quatre graines avec tous les bits de poids fort à zéro. Le moment cité où le modèle revérifie sa propre vraisemblance est le morceau du travail agentique qui survit rarement jusqu'aux communiqués. C'est aussi un cas rare où un "résultat d'IA" en sécurité arrive avec un reçu complet : des auteurs nommés, l'algorithme, du code de reproduction, une réimplémentation indépendante en Go par l'organisateur de la prime, et une liste honnête de ce qui reste irrésolu. C'est le niveau d'exigence à opposer à chaque titre "l'IA découvre".