17 de octubre de 2026
El origen secreto de las curvas ECDSA
“The Reality: It’s just timestamps.”
Así arranca el informe que Anthropic publicó el 16 de octubre de 2026, y con esa frase se cierra una discusión de veinticinco años. Las semillas con las que se construyeron las curvas elípticas que protegen casi todo el tráfico de internet no eran un hash sobre una frase graciosa ni un algoritmo secreto: eran la salida de lrand48, el generador pseudoaleatorio que venía con la biblioteca C de cualquier Unix de los noventa, inicializado con la hora del reloj.
Un srand48(time), veinte bytes por candidato, y el que pasaba el filtro se publicaba como semilla estándar.
La historia vale la pena, porque el valor no está en el resultado sino en cómo se llegó. Y porque el resultado es una buena noticia.
El sobre con semillas
En 2000, el NIST adoptó FIPS 186-2, el estándar de firmas digitales: P-192, P-224, P-256, P-384 y P-521. Para cada curva, el estándar publicaba una semilla de 160 bits cuyo hash SHA-1 define el coeficiente b, siguiendo el procedimiento de ANSI X9.62.
Las semillas las entregó la NSA. Sin justificación matemática. Sin explicaciones. Sin decir de dónde salían.
El esquema se llama nothing up my sleeve —nada en la manga— y la idea es razonable: si no podés elegir los parámetros, no podés esconder una debilidad en ellos. Pero la promesa tiene un agujero: la semilla se publica, sí, pero la semilla misma puede ser cualquiera. El hash prueba que la curva se derivó de ese número; no prueba nada sobre cómo se eligió el número.

Veinticinco años de sospecha
El rumor oficial decía que eran el hash de una broma interna militar. La versión más citada venía del propio Jerry Solinas, empleado de larga data de la NSA, en 2015:
“I believe there was a counter rather than multiple hashing, but I don’t know details. The message was along the lines of ‘Give Bob and Jerry a raise’ or ‘Bob and Jerry rule’ or something like that. It was Bob Reiter who actually wrote the code, and he doesn’t remember the details either. Nor were we able to find archives from so long ago. If they exist, they are no doubt sitting on a hard drive near the Ark of the Covenant.”
— Jerry Solinas, ex-empleado de la NSA, 2015
Solinas murió en 2023 sin poder aclararlo. Koblitz y Menezes publicaron A Riddle Wrapped in an Enigma (2015) argumentando que era implausible esconder una debilidad que resistiera quince años de criptoanálisis —pero registrando también la objeción contraria: Bernstein y Lange les describieron una técnica que podría haber usado 70 bits de libertad en la elección de la semilla para apuntar a una clase hipotética de curvas débiles. Bernstein es el autor de Curve25519, la curva competidora.
En 2023, Filippo Valsorda puso plata: una recompensa para quien encontrara el origen. Tres años después, nadie la había cobrado.

Media hora
En octubre de 2026, un empleado curioso de Anthropic le preguntó a un modelo de investigación interno si podía averiguar cómo se habían generado esas semillas, con una condición: sin darle la pista de la frase humorística. Esa pista ya la habían seguido varios empleados sin éxito, y era falsa.
En menos de media hora, el modelo encontró el origen de las cinco semillas del NIST. No era ningún hash.
Del registro quedó un detalle lindo: el momento en que el modelo sospecha de lo que está viendo.
“Hmm wait. Let me be skeptical: am I in some sort of simulated environment? … 160-bit match from a 32-bit seed + small index: no chance coincidences (10 × 160 bits). It’s real.”

Cómo se resuelve un misterio de 1997
Pensar como en los 90
En lugar de buscar qué mensaje se hasheó, el modelo intentó anticipar cómo tuvo que funcionar el software. El código se escribió a fines de los noventa, en C: lo más probable es que hayan usado un generador pseudoaleatorio estándar de las bibliotecas de la época. Y esos generadores son tan débiles que su salida se puede reconocer.

El método fue un escáner que recorrió cada semilla publicada, bit por bit, probando si trozos adyacentes se comportaban como salidas consecutivas de un generador de los noventa: 34 combinaciones de generador y recorte.

El bit de arriba en cero
En cuatro de las diez semillas, el bit superior de cada palabra era cero. Siempre. La probabilidad de que eso ocurra por azar es de 1 en 5.810, y no es azar: es la firma exacta de lrand48, un generador congruencial lineal que solo devuelve los 31 bits superiores de un estado de 48 bits.

Para las curvas primas, que mostraban menos bits de cada salida (estaban truncadas), recuperar el estado interno es un problema clásico de retículos matemáticos, y se resuelve con el algoritmo LLL. La prueba de que el truco era correcto: cada estado de 48 bits recuperado regenera los 160 bits completos de su semilla, y eso no pasa por accidente.

Rebobinar el reloj
Un generador congruencial lineal funciona hacia atrás igual de bien que hacia adelante. Para cada semilla, el modelo retrocedió el estado hasta la forma que le habría dejado srand48 al inicializarlo: los 16 bits inferiores en 0x330E. Ese estado aparece una vez cada 65.536 pasos, así que llegar a uno no prueba nada.
Lo que prueba todo es el paso siguiente: en las diez semillas de curvas primas, cada inicialización era un timestamp Unix entre mayo de 1997 y abril de 1998. Nadie había elegido nada. Alguien había corrido un programa y el programa leyó el reloj.

El gran secreto de la NSA
No hubo hashes ocultos. No hubo contraseñas. Todo salió del reloj de una computadora, y se reproduce hoy en seis líneas de Python:
| Curva | srand48(t) (UTC) | Candidato aceptado |
|---|---|---|
| prime239v1 | 1997-05-15 15:49:03 | 2185 |
| prime239v2 | 1997-05-15 15:49:03 | 2320 |
| prime239v3 | 1997-05-15 15:49:03 | 3048 |
| P-192 (prime192v1) | 1997-05-18 14:45:34 | 139 |
| prime192v3 | 1997-05-18 14:45:34 | 5228 |
| prime192v2 | 1997-05-18 14:45:34 | 6013 |
| P-521 | 1997-08-08 01:12:04 | 1136 |
| P-256 (prime256v1) | 1997-08-16 01:52:34 | 1842 |
| P-384 | 1997-08-30 14:50:08 | 2688 |
| P-224 | 1998-04-03 12:52:07 | 7026 |
Mirá las fechas: tres curvas de ejemplo salieron de una misma corrida del 15 de mayo; P-192 y dos más, de una del 18. P-224, la que llegó última al estándar, es también la última semilla. Son los tiempos de un grupo de personas trabajando, no los de una operación encubierta.
Y el remate: las cuatro semillas de las curvas binarias, leídas como timestamp, daban febrero de 1984. Duplicadas, caían el 17 de abril de 1998, dos semanas después de P-224. Probablemente el programa dividía el reloj por la mitad.

Como propina, los puntos base (G) de seis curvas vinieron de otra librería estándar: FreeLIP, el paquete de enteros largos de Arjen Lenstra. Se sembraba con un número chico (20000 para P-192), se descartaban siete salidas y se probaban coordenadas de 26 bits hasta que cayeran sobre la curva.

Expectativa vs. realidad
Toda la teoría se sostenía en una intuición razonable: si te entregan parámetros criptográficos sin explicar su origen, la respuesta sana es desconfiar.
Pero la realidad fue mucho más aburrida que el mito, y esa es justamente la prueba: nadie construye una puerta trasera tan torpe.

¿Y mi criptomoneda?
Esta historia es sobre el ecosistema, no sobre las cadenas. Vale separar dos mundos que se confunden todo el tiempo.
Bitcoin no está afectado. No usa curvas del NIST: usa secp256k1. Y ahí está la diferencia de fondo. Satoshi eligió una curva con parámetros simples y públicos, justamente para no tener que confiar en nadie: a = 0, b = 7, un primo p con una forma matemática clara y justificable, sin ninguna seed secreta ni proceso opaco detrás. Cualquiera puede verificar que esos números producen una curva segura de orden primo. Ethereum siguió el mismo camino: secp256k1, no P-256.
Monero tampoco. No usa ni secp256k1 ni P-256: usa Ed25519, otra familia, sin semillas.
P-256 (secp256r1) es la que sí está en todas partes, y la que cargó con la sospecha durante veinticinco años:
| Ámbito | Uso concreto |
|---|---|
| Internet / Web | TLS/HTTPS, la mayoría de las conexiones seguras, certificados digitales |
| Autenticación moderna | Passkeys / WebAuthn / FIDO2 |
| Apple | Secure Enclave (iPhone, Mac, Apple Pay, Face ID / Touch ID) |
| Android | StrongBox / Keystore, claves protegidas por hardware |
| Gobierno y empresa | FIPS 140, HSMs, tarjetas inteligentes, firma digital oficial |
| Navegadores y sistemas operativos | Chrome, Firefox, Windows, macOS, iOS (soporte nativo) |
| Otros protocolos | JWT, OAuth, DNSSEC, sistemas de identidad |
O sea: cuando mirabas el candadito del navegador, ahí estaba esta semilla. Por eso importa que sea aburrida.
¿Es la prueba de que no hay puertas traseras?
No del todo, y conviene decirlo antes de cerrar el caso con un sello.
Esto no es una prueba matemática absoluta de que las curvas no tienen puertas traseras. Lo que demuestra es más específico y más útil: que las semillas se generaron de una manera banal, reproducible y con muy poco margen de elección. Hace que una puerta trasera deliberada sea enormemente menos plausible, y resuelve la sospecha principal que rodeó a estas curvas durante más de veinticinco años.
El argumento central es de conteo. Aun siendo generosos —suponiendo que la NSA hubiera podido elegir cualquier timestamp de 1997–98 y cualquiera de los primeros 16 candidatos, lo que cubre de sobra los candidatos salteados— habrían tenido apenas 30 bits de libertad. Eso no alcanza para apuntar a una clase hipotética de curvas débiles ni para incrustar una puerta trasera de tipo NOBUS (nobody but us: solo nosotros podemos abrirla). La técnica de 70 bits de Bernstein y Lange queda descartada.
Y quedan cabos sueltos, que el informe enumera:
- Candidatos salteados. Para P-256 se publicó el 1842, pero el 876 de la misma corrida también daba una curva válida de orden primo. Sobran candidatos: hay más o menos el doble de los publicados. Pudo ser un criterio no documentado o un bug que devolvía mal el resultado la mitad de las veces. En 1997 estos cálculos eran estado del arte; hoy se hacen en minutos.
- Una semilla perdida. B-163 no encaja con ningún patrón probado.
- Bases faltantes. Los puntos base de P-224, P-256, P-384 y P-521 no siguen la receta de FreeLIP.
Ninguna de las tres es una alarma. Son, literalmente, las preguntas que quedaron abiertas después de que se contestara la grande.

Caso cerrado
El botín de 36.864 dólares fue donado íntegramente al Internet Security Research Group, la ONG detrás de Let’s Encrypt. Valsorda había triplicado el valor de la recompensa; el equipo de Anthropic (John Wood, Henry de Valence, Ava Howell, Zack Voase, Lucy Sweet, Amir Omidi, Paul Crowley, Iain McGinniss, Nicholas Carlini y Steve Weis) la cobró el 15 de octubre de 2026 a las 01:07:51 UTC.

La simetría se explica sola: la plata que se puso para averiguar el origen de P-256 terminó financiando la infraestructura que emite certificados con P-256. Valsorda lo resumió con una ironía perfecta: la rehabilitación de las curvas del NIST llega “justo a tiempo para que las retiren en favor de las firmas post-cuánticas”. Hoy las recomienda por encima de Curve25519 —curiosa inversión para el bando que llevaba una década acusándolas.
Y para el final, lo que me interesa de esta historia. Durante veinticinco años, la semilla de P-256 estuvo ahí, publicada en el estándar, verificable por cualquiera. Nadie la verificó, porque nadie sabía qué buscar, y porque el hash probaba la derivación pero no la elección. La confianza era verificable en teoría, y por eso mismo nadie la verificaba.
Necesitó que apareciera alguien —o algo— con la paciencia de preguntarse cómo se escribe un programa, en vez de qué frase olvidó un hombre. La verificación no es un documento firmado que se guarda: es trabajo que se puede rehacer. Y a veces hay que rehacerlo, veinticinco años después, para que la respuesta valga lo mismo que habría valido el primer día.
