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.
En este capítulo
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
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 . Sus puntos se pueden sumar: se traza la recta que pasa por y ; corta a la curva exactamente en un punto más, ; su reflejo respecto al eje es . Para duplicar un punto se usa la tangente. Una recta vertical corta la curva en el infinito, así que , donde es el reflejo de .
En coordenadas, para y con , sea la pendiente de la recta, , o para la tangente. Entonces
Con esta suma y como elemento neutro, los puntos de forman un grupo abeliano. Las mismas fórmulas, calculadas en cualquier cuerpo , hacen de , los puntos con coordenadas en , un grupo.
Sobre la demostración
La conmutatividad es clara (la recta que pasa por y es la que pasa por y ), 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 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 , los enteros módulo un primo . La «curva» se convierte en una nube de puntos sin forma visible, pero las fórmulas, y el grupo, son los mismos.
El número de puntos de sobre (contando ) cumple .
Así que una curva sobre un cuerpo primo de 256 bits tiene unos 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.
El logaritmo discreto en una curva
Multiplicar un punto por un escalar, , 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 y , encontrar .
En un grupo cíclico de orden primo , el algoritmo rho de Pollard encuentra logaritmos discretos en unas 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 .
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 . 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:
| Seguridad | Simétrica | RSA / DH en cuerpo finito | Curva elíptica |
|---|---|---|---|
| 112 bits | 3DES | 2.048 bits | 224 bits |
| 128 bits | AES-128 | 3.072 bits | 256 bits |
| 192 bits | AES-192 | 7.680 bits | 384 bits |
| 256 bits | AES-256 | 15.360 bits | 512 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 , Bob envía y los dos calculan . En 2006 Daniel J. Bernstein publicó Curve25519, la curva sobre el primo , 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 de un mensaje con la clave privada (clave pública ) en una curva cuyo punto base tiene orden primo :
- elegir un nonce aleatorio y tomar ;
- tomar ; la firma es .
El verificador calcula , y acepta si . 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.
Si se firman dos mensajes con hashes con el mismo nonce (se nota porque es el mismo), entonces
Demostración
y . Restando, , que da ; después la primera ecuación da . Incluso unos pocos bits sesgados de en muchas firmas bastan para recuperar con técnicas de retículos.
En 2010 el grupo fail0verflow mostró que Sony firmaba el software de la PlayStation 3 con el mismo 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 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
- Neal Koblitz, «Elliptic Curve Cryptosystems», Mathematics of Computation 48, 1987; Victor Miller, «Use of Elliptic Curves in Cryptography», CRYPTO 1985.
- Joseph Silverman y John Tate, Rational Points on Elliptic Curves (1992; 2.ª ed. 2015).
- Daniel J. Bernstein, «Curve25519: new Diffie-Hellman speed records», PKC 2006; Bernstein et al., «High-speed high-security signatures», CHES 2011.
- fail0verflow, «Console Hacking 2010: PS3 Epic Fail», 27.º Chaos Communication Congress.