1. Sustitución
  2. Enigma
  3. Shannon
  4. DES y AES
  5. Modos
  6. Hashes
  7. Contraseñas
  8. RSA y DH
  9. ECC
  10. Poscuántica

Capítulo 09 · Curvas elípticas

La aritmética de las curvas: ECDH, ECDSA, Ed25519

Los puntos de una curva cúbica se pueden sumar con una regla: se traza la recta, se busca el tercer punto y se refleja. Sobre un cuerpo finito esta geometría se convierte en un grupo en el que los logaritmos son aún más difíciles que en los números de RSA, así que una clave de 256 bits hace el trabajo de una de 3.072. Es la criptografía que llevan dentro hoy todos los móviles, las passkeys y las conexiones TLS.

Diffie–Hellman y RSA necesitan números de miles de bits, porque hay algoritmos subexponenciales (la criba del cuerpo de números y sus parientes para el logaritmo discreto) que atacan la estructura multiplicativa de los enteros. En 1985 Neal Koblitz y Victor Miller propusieron, por separado, hacer la misma criptografía en otro grupo en el que no se conocía ningún atajo así: los puntos de una curva elíptica sobre un cuerpo finito. Cuarenta años después sigue sin conocerse, y la criptografía de curva elíptica (ECC) ha sustituido a RSA casi en todas partes.

Sumar puntos con una regla

Una curva elíptica, en la forma que usan los criptógrafos, es el conjunto de soluciones de

E:y2=x3+ax+b,4a3+27b2≠0,

junto con un punto extra 𝒪, «en el infinito». La condición descarta las cúspides y los autocruces. La curva es simétrica respecto al eje x. Sus puntos se pueden sumar: se traza la recta que pasa por P y Q; corta a la curva exactamente en un punto más, R′; su reflejo respecto al eje x es P+Q. Para duplicar un punto se usa la tangente. Una recta vertical corta la curva en el infinito, así que P+(−P)=𝒪, donde −P es el reflejo de P.

La ley de la cuerda y la tangente sobre los números reales. Cambia la curva con a y b y mueve P y Q por ella. La recta que los une corta la curva en un tercer punto, −(P+Q); su reflejo es P+Q. Cuando P=Q, la recta es la tangente. Con a=−2 y b pequeño, la curva se parte en dos trozos, y la ley sigue funcionando.

En coordenadas, para P=(x1,y1) y Q=(x2,y2) con P≠−Q, sea λ la pendiente de la recta, λ=(y2−y1)/(x2−x1), o λ=(3x12+a)/(2y1) para la tangente. Entonces

x3=λ2−x1−x2,y3=λ(x1−x3)−y1.
Teorema (la ley de grupo)

Con esta suma y 𝒪 como elemento neutro, los puntos de E forman un grupo abeliano. Las mismas fórmulas, calculadas en cualquier cuerpo K, hacen de E(K), los puntos con coordenadas en K, un grupo.

Sobre la demostración

La conmutatividad es clara (la recta que pasa por P y Q es la que pasa por Q y P), el neutro y los opuestos vienen de las rectas verticales, y el cierre de que una recta corta a una cúbica en tres puntos contados con multiplicidad. La asociatividad es lo difícil: se puede comprobar por fuerza bruta algebraica con las fórmulas, demostrar con elegancia con el teorema de Cayley–Bacharach sobre cúbicas que pasan por ocho puntos comunes, o mediante el teorema de Riemann–Roch, que identifica E con su propio grupo de Picard.

Curvas sobre un cuerpo finito

La criptografía necesita aritmética exacta y finita, así que las coordenadas viven en 𝔽p, los enteros módulo un primo p. La «curva» se convierte en una nube de puntos sin forma visible, pero las fórmulas, y el grupo, son los mismos.

Teorema (Hasse, 1933)

El número de puntos de E sobre 𝔽p (contando 𝒪) cumple |#E(𝔽p)−(p+1)|≤2p.

Así que una curva sobre un cuerpo primo de 256 bits tiene unos 2256 puntos; el algoritmo de Schoof (1985) los cuenta exactamente, y se eligen curvas cuyo número de puntos es un primo grande (o un múltiplo pequeño de uno), para que el grupo sea cíclico y no tenga subgrupos pequeños en los que esconderse.

La curva y2=x3+2x+3 sobre 𝔽97: todos sus puntos y los múltiplos G,2G,3G,… de un generador G. Pulsa reproducir: los múltiplos saltan por la cuadrícula sin ningún patrón que se pueda seguir hacia atrás. Conociendo solo el punto final, recuperar k es el problema del logaritmo discreto en curvas elípticas. Aquí un ordenador lo encuentra al instante probando todos los k; con números de 256 bits, ningún ordenador puede.

El logaritmo discreto en una curva

Multiplicar un punto por un escalar, kP=P+P+…+P, es rápido con duplicar y sumar (la versión aditiva de elevar al cuadrado y multiplicar). Deshacerlo es el problema del logaritmo discreto en curvas elípticas (ECDLP): dados P y Q=kP, encontrar k.

Teorema (algoritmos genéricos, Pollard 1978; Shoup 1997)

En un grupo cíclico de orden primo n, el algoritmo rho de Pollard encuentra logaritmos discretos en unas πn/2 operaciones de grupo y memoria constante. Recíprocamente, cualquier algoritmo que use el grupo solo a través de sus operaciones (un algoritmo genérico) necesita unas n.

El rho de Pollard es otra vez la paradoja del cumpleaños: un paseo pseudoaleatorio por el grupo acaba repitiendo un punto, y una repetición revela k. Para las buenas curvas elípticas no se conoce nada mejor que estos ataques genéricos. Así que la seguridad crece con la mitad del tamaño en bits del orden del grupo, y las claves son cortas:

SeguridadSimétricaRSA / DH en cuerpo finitoCurva elíptica
112 bits3DES2.048 bits224 bits
128 bitsAES-1283.072 bits256 bits
192 bitsAES-1927.680 bits384 bits
256 bitsAES-25615.360 bits512 bits

ECDH y X25519

El Diffie–Hellman de curva elíptica es el protocolo del capítulo 08 con el grupo nuevo: Alicia envía aG, Bob envía bG y los dos calculan abG. En 2006 Daniel J. Bernstein publicó Curve25519, la curva y2=x3+486662x2+x sobre el primo 2255−19, diseñada para que la implementación rápida y sencilla sea también la segura: cualquier cadena de 32 bytes es una clave pública válida, el cálculo (la escalera de Montgomery) es de tiempo constante y no hay casos especiales que olvidar. Su acuerdo de claves, X25519, es hoy el predeterminado de TLS 1.3, SSH, Signal y WireGuard. «X25519 + AES-GCM», en la aplicación de escritorio, genera un par de claves efímero para cada mensaje, acuerda un secreto con la clave pública del destinatario y cifra con AES-GCM: el patrón ECIES.

ECDSA y el nonce

El algoritmo de firma digital de curva elíptica, propuesto por Scott Vanstone en 1992 y estandarizado por ANSI (1999) y el NIST (2000), firma el hash h de un mensaje con la clave privada d (clave pública Q=dG) en una curva cuyo punto base G tiene orden primo n:

  1. elegir un nonce aleatorio k∈[1,n−1] y tomar r=(kG)xmodn;
  2. tomar s=k−1(h+rd)modn; la firma es (r,s).

El verificador calcula u1=hs−1, u2=rs−1 y acepta si (u1G+u2Q)x≡r. ECDSA sobre la curva P-256 del NIST firma la mayoría de los certificados TLS, las passkeys y las tarjetas bancarias. Su punto débil es el nonce.

Proposición (un nonce repetido filtra la clave)

Si se firman dos mensajes con hashes h1≠h2 con el mismo nonce k (se nota porque r es el mismo), entonces

k=h1−h2s1−s2modn,d=s1k−h1rmodn.
Demostración

s1k=h1+rd y s2k=h2+rd. Restando, (s1−s2)k=h1−h2, que da k; después la primera ecuación da d. Incluso unos pocos bits sesgados de k en muchas firmas bastan para recuperar d con técnicas de retículos.

En 2010 el grupo fail0verflow mostró que Sony firmaba el software de la PlayStation 3 con el mismo k siempre, recuperó la clave privada de Sony y pudo firmar cualquier cosa. En 2013 un fallo en el generador de números aleatorios de Android hizo que los monederos de Bitcoin repitieran nonces, y les robaron las monedas. La solución es no sacar nunca k al azar: derivarlo de la clave y del mensaje (RFC 6979, 2013).

Ed25519

Bernstein, Niels Duif, Tanja Lange, Peter Schwabe y Bo-Yin Yang diseñaron Ed25519 (2011) sobre una versión en forma de Edwards de Curve25519, con fórmulas de suma completas (sin casos excepcionales) y un nonce derivado de forma determinista de un hash de la clave privada y del mensaje. Es rápido, sus claves ocupan 32 bytes y sus firmas 64, y no hay un nonce aleatorio que pueda salir mal. Lo usan SSH, Signal, Tor, Git y la firma de módulos del núcleo de Linux; lo estandarizan la RFC 8032 (2017) y FIPS 186-5 (2023).

En qué curvas confiar

Las curvas P-256 y P-384 del NIST se generaron en 1999 a partir de semillas que nunca se explicaron. En 2013 los documentos de Snowden confirmaron que la NSA había puesto una puerta trasera en Dual_EC_DRBG, un generador de números aleatorios de curva elíptica estandarizado por el NIST en 2006: quien conociera la relación secreta entre sus dos puntos podía predecir su salida. No se ha encontrado ninguna debilidad en la propia P-256, pero el episodio convirtió los parámetros «rígidos» y explicables, como los de Curve25519, en un requisito de diseño (el proyecto SafeCurves de Bernstein y Lange). La aplicación de escritorio ofrece las dos familias: ECDSA P-256 por compatibilidad, Ed25519 y X25519 como primeras opciones. Todas ellas, igual que RSA, caen ante el algoritmo de Shor.

Para saber más

  1. Neal Koblitz, «Elliptic Curve Cryptosystems», Mathematics of Computation 48, 1987; Victor Miller, «Use of Elliptic Curves in Cryptography», CRYPTO 1985.
  2. Joseph Silverman y John Tate, Rational Points on Elliptic Curves (1992; 2.ª ed. 2015).
  3. Daniel J. Bernstein, «Curve25519: new Diffie-Hellman speed records», PKC 2006; Bernstein et al., «High-speed high-security signatures», CHES 2011.
  4. fail0verflow, «Console Hacking 2010: PS3 Epic Fail», 27.º Chaos Communication Congress.