Modelli e piattaforme di IA
Anthropic afferma che Claude ha ricondotto i valori iniziali delle curve ECDSA di NIST a un generatore di numeri casuali degli anni Novanta

Il 16 ottobre 2026, il Frontier Red Team di Anthropic ha riferito in una pubblicazione di ricerca che un modello di ricerca interno di Claude aveva ricondotto l’origine dei valori iniziali delle curve ECDSA di NIST al generatore di numeri casuali lrand48 della libreria C, inizializzato con timestamp Unix, rispondendo così a una domanda sulla provenienza rimasta aperta da quando la NSA aveva fornito quei valori senza spiegarne l’origine.
I valori iniziali della NSA rimasti senza spiegazione
ECDSA è lo standard di crittografia a curve ellittiche più utilizzato. NIST lo ha adottato nel 2000 nell’ambito del Digital Signature Standard FIPS 186-2, che elenca curve ellittiche standard di diverse dimensioni e livelli di sicurezza. Per le curve su campi primi e binari, la specifica pubblicava un parametro iniziale il cui valore hash definisce il coefficiente b della curva. La NSA ha fornito quei valori iniziali senza spiegazioni né giustificazioni; l’articolo riporta come esempio il valore iniziale della curva P-256, C49D3608 86E70493 6A6678E1 139D26B7 819F7E90, pubblicato senza alcuna informazione sulla sua provenienza.
Neal Koblitz e Alfred Menezes hanno riassunto la controversia nel saggio «A Riddle Wrapped in an Enigma»; in seguito, la questione ha suscitato un’indagine amatoriale sull’origine dei valori iniziali e l’offerta di una ricompensa a chi fosse riuscito a scoprirla. L’ipotesi più accreditata sosteneva che Jerry Solinas, dipendente di lunga data della NSA, avesse generato i valori iniziali usando l’hash di una frase umoristica. In una dichiarazione del 2015 riportata nell’articolo, Solinas ricordò: «Il messaggio era più o meno del tipo “Diamo un aumento a Bob e Jerry” oppure “Bob e Jerry spaccano”, o qualcosa del genere». Disse che Bob Reiter aveva scritto il codice e che non era stato possibile trovare archivi di quel periodo. Solinas è morto nel 2023 e gli altri colleghi non hanno risposto, lasciando aperta la questione di come fossero stati generati i valori.
Come Claude ha recuperato i valori iniziali
Diversi dipendenti di Anthropic avevano cercato senza successo di ricostruire i valori iniziali seguendo la pista della frase umoristica, che, secondo l’articolo, si è rivelata sbagliata. Nell’ottobre 2026, un dipendente di Anthropic ha chiesto a un modello di ricerca interno se fosse in grado di capire come fossero stati generati i valori, senza indicargli l’indizio ipotizzato. Secondo Anthropic, in meno di mezz’ora Claude ha individuato l’origine dei valori iniziali delle curve NIST P-192, P-224, P-256, P-384 e P-521: erano output del generatore di numeri casuali lrand48 della libreria C, inizializzato con un timestamp Unix, senza alcun algoritmo di hash. A ogni iterazione, il programma generava 20 byte come valore iniziale candidato; quello pubblicato per P-256 era il candidato numero 1842 della sequenza.
Esaurite le ricerche basate sulle frasi, Claude ha affrontato il problema dal punto di vista del generatore, ipotizzando l’uso di un software basato su un generatore di numeri pseudocasuali distribuito con le librerie C degli anni Novanta, con output abbastanza deboli da poter essere riconosciuti. Il suo strumento di scansione avanzava bit per bit lungo ciascun valore iniziale pubblicato, verificando gruppi di bit adiacenti come possibili output consecutivi di un generatore degli anni Novanta in 34 combinazioni di generatori e porzioni di output. Tra i valori iniziali è emerso uno schema: rappresentandoli come cinque parole da 32 bit, in quattro dei dieci casi il bit più significativo è zero in tutte e 20 le parole, una configurazione che si verifica casualmente con probabilità pari a 1/5810. Questo ha indicato lrand48, un generatore congruenziale lineare che restituisce soltanto i 31 bit più significativi di uno stato a 48 bit. Per quei quattro valori iniziali, Claude ha recuperato lo stato del generatore provando tutti i 2^17 valori possibili dei 17 bit nascosti della prima parola e verificando che le quattro parole successive fossero coerenti; il metodo ha funzionato per tutti e quattro i valori.
I valori iniziali delle curve prime erano stati generati dallo stesso generatore lrand48, anche se ogni output conservava meno bit. Ricostruire lo stato interno di un generatore congruenziale lineare troncato è un classico problema reticolare, che Claude ha risolto riducendo la base con l’algoritmo di Lenstra–Lenstra–Lovász (LLL) e applicando il risolutore a tutte le finestre possibili. Tutti e cinque i valori iniziali delle curve prime di NIST, insieme ad altri cinque dello standard ANSI X9.62, corrispondevano allo stesso schema, lrand48() >> 23, e ciascuno stato recuperato a 48 bit rigenera tutti i 160 bit del relativo valore iniziale.
L’articolo riporta anche il ragionamento interno registrato da Claude durante la sessione: il modello ha verificato se potesse trovarsi in un ambiente di test simulato prima di concludere: «È verificato con un calcolo diretto da parte mia: corrispondenza di 160 bit a partire da un seed di 32 bit e un piccolo indice: nessuna coincidenza possibile (10 × 160 bit). È reale».
Timestamp e punti base
Poiché il generatore può essere eseguito all’indietro con la stessa facilità che in avanti, Claude ha fatto retrocedere lo stato di ciascun valore iniziale finché non ha raggiunto uno stato di inizializzazione srand48, riconoscibile dai 16 bit meno significativi uguali a 0x330E, una condizione che si verifica ogni 65.536 passi. Per tutti e dieci i valori iniziali delle curve prime, le inizializzazioni corrispondevano a timestamp Unix compresi tra maggio 1997 e aprile 1998. Le inizializzazioni delle quattro curve binarie indicavano invece febbraio 1984; raddoppiando quei timestamp si arriva al 17 aprile 1998, due settimane dopo l’esecuzione relativa a P-224. Questo ha portato il team a ipotizzare che il programma potesse aver dimezzato l’orario.
Claude ha individuato anche la provenienza di alcuni punti base delle curve. Ogni curva specifica un punto base G, del quale ogni chiave pubblica ECDSA è un multiplo, e il seed recuperato non determina tale punto. Per le sei curve generate nel maggio 1997 — P-192 e le curve di esempio ANSI X9.62 prime192v2, prime192v3 e prime239v1, prime239v2 e prime239v3 — i punti base risalgono al generatore di numeri casuali di FreeLIP, il pacchetto di aritmetica per interi lunghi di Arjen Lenstra, il cui codice era incluso anche nelle prime versioni della libreria NTL di Victor Shoup. In base a questa procedura, il generatore viene inizializzato con un piccolo intero, si scartano sette valori generati e si estraggono coordinate x candidate da valori a 26 bit ridotti modulo p; l’estrazione si ripete finché x non appartiene alla curva. I seed del generatore individuati da Claude sono 20000 per P-192; 20420, 20507 e 20509 per prime239v1, prime239v2 e prime239v3; e 20512 e 20517 per prime192v2 e prime192v3. Anthropic afferma che, per quanto ne sa, finora nessuno ha spiegato la provenienza di un punto base NIST e che i punti base di P-224, P-256, P-384 e P-521 non seguono questa procedura.
Valutazione della sicurezza e questioni aperte
Anthropic afferma che i risultati non costituiscono una violazione crittografica, un nuovo attacco o una debolezza delle curve ECDSA. Il team ha dichiarato che i seed erano stati generati da un comune generatore di numeri pseudocasuali inizializzato a partire dall’orologio, un metodo che chiunque può ora riprodurre e che, a suo avviso, lascia molto meno spazio alla manipolazione e rafforza la fiducia nella sicurezza dei parametri. Il post presenta il risultato come il capitolo conclusivo e la fine di anni di speculazioni, spiegando ai lettori che non è necessario fare nulla, perché la maggior parte dei ricercatori si fidava già delle curve.
Alcune questioni restano aperte. Non tutti i seed candidati di 20 byte potevano produrre una curva valida e il team ha osservato che alcuni candidati potenzialmente validi erano stati scartati. Il seed pubblicato per P-256 è il candidato 1842, ma anche il candidato 876 della stessa esecuzione produce una curva di ordine primo delle dimensioni giuste, con parametri scelti nello stesso modo di quelli della curva pubblicata. L’esecuzione di P-224 ha scartato tre candidati di questo tipo, mentre le due esecuzioni alla base delle curve di esempio ANSI X9.62 ne hanno scartati altri sette. Poiché il numero di candidati scartati è esiguo, il team ha dichiarato di non ritenere plausibile una selezione di curve indebolite, anche se in linea di principio resta concepibile che curve con una proprietà specifica siano state scelte cercando tra i timestamp. Un seed si è rivelato impossibile da recuperare: il quinto seed binario, B-163, non corrisponde a nulla di ciò che Claude ha provato. I punti base di P-224, P-256, P-384 e P-521, insieme a quelli delle curve binarie NIST, restano sconosciuti.
La ricompensa di 36.864 $ per aver individuato i seed sarà devoluta all’Internet Security Research Group. Nel post si ringrazia Filippo Valsorda per aver organizzato la ricompensa e si rende omaggio postumo a Solinas. Il lavoro è attribuito a John Wood, Henry de Valence, Ava Howell, Zack Voase, Lucy Sweet, Amir Omidi, Paul Crowley, Iain McGinniss, Nicholas Carlini e Steve Weis. Il codice per riprodurre i risultati disponibile sulla pagina è dedicato al pubblico dominio secondo la licenza CC0 1.0 Universal.












