Il numero sospettato per venticinque anni era l’orologio del computer
I semi da cui nascono le curve ellittiche del NIST, su cui poggia buona parte della crittografia moderna, erano arrivati senza spiegazioni, e l’uomo che li aveva forniti ricordava di averli ricavati da una frase scherzosa, poi dimenticata. Una squadra di Anthropic, con l’aiuto di uno dei suoi modelli, ha trovato qualcosa di più semplice: un comune generatore di numeri casuali degli anni Novanta, avviato dall’orologio. Per la curva P-256 l’orologio segnava le 01:52:34 UTC del 16 agosto 1997.

Nel settembre 2014 il crittografo Daniel J. Bernstein chiese a Jerry Solinas, matematico della NSA, da dove venissero i semi delle curve del NIST. Sono i numeri di partenza di una famiglia di curve ellittiche che dal 2000 sono standard ufficiali negli Stati Uniti e su cui poggia buona parte della crittografia moderna; la NSA li aveva forniti alla fine degli anni Novanta senza dire come li avesse scelti. Solinas rispose che erano stati ricavati da «un messaggio scherzoso», passato in una funzione di hash, una specie di frullatore matematico che trasforma qualsiasi testo in una stringa di cifre di lunghezza fissa, e che nessuno ricordava più il messaggio: «Peccato, perché potremmo dimostrare la nostra innocenza rivelando i dettagli, se solo li ricordassimo». Nel giugno seguente aggiunse che suonava più o meno come «Date un aumento a Bob e Jerry», e chiuse così: «Davvero non pensavamo che un giorno avrebbe avuto importanza».
E invece sì. Un seme che nessuno sa spiegare è anche un seme che nessuno può scagionare, e per anni è rimasto il sospetto che l’agenzia li avesse scelti per nascondere una debolezza nota soltanto a lei. Bernstein e Tanja Lange provarono a passare nella funzione di hash moltissime frasi del tipo indicato da Solinas, poi lasciarono perdere. Solinas è morto all’inizio del 2023. Nel settembre di quell’anno il ricercatore di sicurezza Steve Weis raccolse tutte le testimonianze indirette sulla frase perduta («Jerry si merita un aumento», due nomi, forse un contatore), e a ottobre Filippo Valsorda mise in palio 12.288 dollari, triplicati in caso di donazione in beneficenza, per chi avesse ritrovato le frasi.
La frase non c’era. Il 16 ottobre Anthropic ha raccontato come una squadra di dieci persone, tra cui lo stesso Weis, abbia trovato la risposta con l’aiuto di uno dei suoi modelli. Alcuni dipendenti dell’azienda avevano già inseguito la pista della frase senza risultati; questo mese uno di loro ha chiesto a un modello di ricerca interno di capire come fossero stati generati i semi, senza accennare alla voce che circolava. Secondo Anthropic, in meno di mezz’ora il modello ha cambiato la domanda: invece di indovinare parole, ha supposto che i semi fossero il risultato diretto di uno dei deboli generatori di numeri casuali che accompagnavano le librerie del linguaggio C negli anni Novanta, e ne ha cercato le impronte. C’erano. I cinque semi delle curve prime del NIST, e altri cinque di curve d’esempio dello standard ANSI X9.62, si poteva risalire passo dopo passo al numero che aveva avviato il generatore, e ciascuno di quei numeri di partenza si è rivelato un timestamp Unix, cioè un conteggio di secondi, compresa tra maggio 1997 e aprile 1998. P-256 viene dal 1.842° tentativo di una serie avviata alle 01:52:34 UTC del 16 agosto 1997.
Anthropic ha pubblicato anche alcuni passaggi del ragionamento del modello nel momento della scoperta, e l’effetto è strano. «È sbalorditivo: risolve il mistero di venticinque anni», scrive, e subito dopo: «Fammi essere scettico: sono in una specie di ambiente simulato, di prova?». Si chiede se non sia sospetto che una cosa così evidente sia sfuggita per venticinque anni, e chiude la questione con l’aritmetica: 160 bit di ogni seme rigenerati da un valore iniziale di 32 bit e da un piccolo indice, per dieci volte, non possono essere una coincidenza. La taglia è stata riscossa il 15 ottobre e donata all’Internet Security Research Group, l’organizzazione non profit che gestisce Let’s Encrypt; prima di annunciarlo, Valsorda ha reimplementato il metodo per conto suo. Il suo commento: «A quanto pare la memoria può giocare brutti scherzi a chiunque».
La risposta chiude una porta e ne lascia socchiuse altre. Valsorda scrive che il risultato esclude del tutto la tecnica descritta da Bernstein e Lange per truccare i semi, che richiedeva circa 70 bit di libertà nella scelta: un orario ricavato dall’orologio di sistema tra il 1997 e il 1998 ne lascia appena 30. Anthropic insiste che nei sistemi in uso non c’è niente da cambiare. Ma ricostruendo la vecchia procedura si ottengono circa il doppio delle curve valide poi pubblicate, e nessuno sa perché siano state tenute proprio quelle: nella stessa serie da cui è uscita P-256, il 876° tentativo aveva già dato una curva che rispetta tutti i criteri noti. Un altro seme, quello della curva binaria B-163, non corrisponde a nulla di ciò che si è provato finora, e restano senza spiegazione i punti base di P-224, P-256, P-384 e P-521, i punti fissi da cui si calcola ogni chiave pubblica su quelle curve.
Per dieci anni l’enigma è stato trattato come un problema di memoria: quale frase aveva digitato Solinas? La traccia era altrove. Il numero che aveva consegnato portava con sé, da sempre, il secondo in cui era stato avviato il suo generatore.
Che cosa ho verificato e che cosa no. Ho eseguito il codice pubblicato da Anthropic: dalla marca temporale 871696354 e dal tentativo 1.842 riproduce il seme di P-256 cifra per cifra, e passando quel seme nella procedura SHA-1 prevista dallo standard si ottiene la curva pubblicata. Ho anche contato i punti della curva nata dal tentativo 876 della stessa serie, con la libreria PARI/GP: il risultato è un numero primo di 256 bit, quindi una curva valida è stata davvero scartata. Non ho potuto verificare quanto tempo abbia impiegato il modello, quale modello fosse, né come il lavoro si sia diviso tra il modello e le dieci persone che firmano il testo: è il resoconto di Anthropic, e i brani di ragionamento sono una sua selezione. Chi abbia eseguito il programma nel 1997, e su quale macchina, resta ignoto; Solinas indicava in Bob Reiter l’autore del codice, e il nuovo risultato non lo conferma né lo smentisce. Non esiste un articolo sottoposto a revisione paritaria: le verifiche indipendenti sono la reimplementazione di Valsorda e la mia.
Claude reveals ECDSA curve origins — Anthropic (Wood, de Valence, Howell, Voase, Sweet, Omidi, Crowley, McGinniss, Carlini, Weis)
Testo di ricerca di Anthropic, 16 ottobre 2026: i semi delle curve prime del NIST (FIPS 186-2) e delle curve prime d’esempio dello standard ANSI X9.62 sono l’output del generatore lrand48, ottenuto da serie avviate con timestamp Unix comprese tra maggio 1997 e aprile 1998, e non hash di una frase; codice di riproduzione pubblicato con licenza CC0. La taglia è stata riscossa il 15 ottobre e confermata dal suo organizzatore, Filippo Valsorda, con una reimplementazione propria. Letto il 17 ottobre; seme di P-256 riprodotto e punti della curva scartata al 876° tentativo contati in modo indipendente.
Leggi il resoconto di Anthropic sull’origine dei semi Leggi la conferma dell’organizzatore della taglia Vedi le email di Solinas del 2014–15 (Bernstein e Lange, appendice C) Leggi la ricostruzione di Steve Weis sulla frase perduta