Este artículo describe cómo funciona la suma en curvas elípticas sobre los números reales.
La criptografía utiliza curvas elípticas sobre campos finitos, pero las curvas elípticas son más fáciles de conceptualizar en un plano cartesiano real. Este artículo está dirigido a programadores e intenta encontrar un equilibrio entre ser demasiado denso matemáticamente y poco riguroso.
Definición de las curvas elípticas desde la teoría de conjuntos
El conjunto de puntos en una curva elíptica forma un grupo bajo la suma de puntos en curvas elípticas.
Con suerte, si has estado siguiendo nuestra introducción a la teoría de grupos, entonces realmente entendiste la mayor parte de esto, aparte de lo que es la “suma de puntos”. Pero esa es la belleza del álgebra abstracta, ¿verdad? No necesitas saber qué es eso, y aun así entiendes la oración anterior.
Las curvas elípticas son una familia de curvas que tienen la fórmula
Dependiendo de qué valor de y elijas, obtendrás una curva que se ve como alguna de las siguientes:

Un punto en una curva elíptica es un par que satisface para un y dados.
Por ejemplo, el punto está en la curva porque . En términos de la teoría de grupos, es un miembro del conjunto definido por . Dado que estamos tratando con números reales, el conjunto tiene cardinalidad infinita.
La idea aquí es que podemos tomar dos puntos de este conjunto, aplicar un operador binario, y obtendremos otro punto que también está en el conjunto. Es decir, es un par que también se encuentra en la curva.
En lugar de pensar en las curvas elípticas como un trazado en un gráfico, piensa en ellas como un conjunto infinito de puntos. Los puntos están en el conjunto si y solo si satisfacen la ecuación de la curva elíptica.
Una vez que vemos estos puntos como un conjunto, verlos como un grupo no es ningún misterio. Simplemente tomamos dos puntos y producimos un tercero de acuerdo con las reglas de un grupo.
Específicamente, para ser un grupo, el conjunto de puntos necesita tener:
- un operador binario que sea cerrado y asociativo, es decir, que produzca otro punto en el conjunto
- el conjunto debe tener un elemento de identidad
- cada punto en el conjunto debe tener un inverso tal que, cuando los dos se combinan con el operador binario, el resultado es
Las curvas elípticas forman un grupo abeliano bajo la suma
Aunque no sabemos cómo funciona el operador binario, sí sabemos que toma dos puntos en la curva y devuelve otro punto en la curva. Debido a que el operador es cerrado, sabemos que el punto será de hecho una solución válida a la ecuación de la curva elíptica, no un punto en algún otro lugar.
También sabemos que este operador binario es asociativo (y conmutativo, según el título de la sección).
Así que, dados tres puntos en la curva elíptica , y (o , y si lo prefieres), sabemos que lo siguiente es cierto:
Estoy usando porque sabemos que este operador binario no es una suma en ningún sentido normal, sino un operador binario (de nuevo, recuerda de la teoría de conjuntos: un operador binario toma dos elementos de un conjunto y devuelve otro elemento en un conjunto; cómo lo hace no es fundamental para la definición).
También sabemos que tiene que haber un elemento de identidad en algún lugar. Es decir, cualquier punto que se encuentre en la curva, al combinarse con el elemento de identidad, da como resultado el mismo punto sin cambios.
Y debido a que esto es un grupo y no solo un monoide, cada punto necesita tener un inverso tal que , donde es el elemento de identidad.
El elemento de identidad
Intuitivamente, podríamos pensar que o es el elemento de identidad, ya que algo así suele ocurrir en otros grupos, pero puedes ver en los gráficos anteriores que esos puntos generalmente no caen en la curva. Dado que no pertenecen al conjunto de puntos de , no son parte del grupo.
Pero recuerda de la teoría de conjuntos que podemos definir operadores binarios como queramos sobre conjuntos definidos arbitrariamente. Esto nos permite agregar un elemento especial que técnicamente no está en la curva pero que, por definición, es el elemento de identidad.
Me gusta pensar en el elemento de identidad como “el punto que no está en ninguna parte”, porque si combinas la nada con cualquier punto real, nada cambia. Resulta un poco molesto que los matemáticos llamen a este punto, el elemento de identidad, “el punto en el infinito”.
Oye, espera, ¿no se supone que este punto satisface ? La nada (o el infinito) no es un valor válido para .
¡Ah, pero recuerda, podemos definir conjuntos como queramos! Definimos el conjunto que compone la curva elíptica como los puntos en la curva elíptica y el punto que no está en ninguna parte.
Porque los operadores binarios son solo subconjuntos de un producto cartesiano (una relación), y podemos definir la relación como queramos. Podemos tener tantas sentencias if poco ortodoxas en nuestra aritmética como nos plazca y seguir cumpliendo con las leyes de grupo.
La suma es cerrada.
Sin pérdida de generalidad, tomemos la curva elíptica
Para ilustrar cómo se intersecan las líneas en las curvas elípticas, tracemos una línea casi vertical
(Podría ser 1000x para hacerla más vertical, pero tendríamos inestabilidad numérica como verás más adelante)
Obtenemos el siguiente conjunto de gráficos.

Resulta que, aunque parezca que la línea morada () sube más rápido que la curva azul (), siempre terminarán cruzándose.
Si nos alejamos lo suficiente, podemos ver la intersección. Esto es cierto en general.
Siempre y cuando x no sea “perfectamente vertical”, si cruza dos puntos en la curva, siempre cruzará un tercero. Dos de esos puntos podrían ser el mismo punto si uno de los puntos de intersección es un punto tangente.
La parte de “si intersecamos dos puntos” es importante. Si desplazamos nuestra línea morada hacia la izquierda para que no cruce la “vuelta en U” de la curva elíptica, entonces solo se cruzará en un punto.
Otra forma de entenderlo:
Si una línea recta cruza una curva elíptica en exactamente dos puntos, y ninguno de los puntos de intersección son intersecciones tangentes, entonces debe ser perfectamente vertical.
Podrías elaborar una prueba algebraica a partir de las fórmulas anteriores, pero creo que el argumento geométrico es más intuitivo.
Te recomiendo que te detengas aquí, dibujes algunas curvas elípticas y líneas, y te convenzas de esto visualmente.
Nuestra excepción para las líneas verticales en realidad hace que los elementos inversos y de identidad encajen maravillosamente.
El inverso de un punto de la curva elíptica es el negativo del valor y del par. Es decir, el inverso de es y viceversa. Trazar una línea a través de dichos puntos crea una línea perfectamente vertical.
El elemento de identidad es el “punto en el infinito” al que aludimos anteriormente, y es simplemente el punto “allá arriba” cuando trazamos una línea vertical.
Grupo Abeliano
El hecho de que los puntos de la curva elíptica sean un grupo bajo nuestra regla de “2 puntos siempre dan como resultado un tercero, excepto para la identidad” hace que su naturaleza conmutativa sea obvia.
Cuando elegimos dos puntos, solo hay un tercer punto posible. No se pueden obtener cuatro intersecciones en una curva elíptica. Dado que solo tenemos una solución posible, entonces está claro que .
Por qué la suma en curvas elípticas se invierte sobre el eje x
Pasamos por alto un detalle muy importante en la última sección, porque realmente merece una sección propia.
En su forma actual, tiene un error si sumamos dos puntos donde la intersección ocurre en el medio.

Usando nuestras definiciones anteriores, lo siguiente debe ser cierto
Con un poco de álgebra, derivaremos una contradicción
Esto dice que es igual a su inverso. Pero no es el elemento de identidad (que es el único elemento que puede ser el inverso de sí mismo), por lo que tenemos una contradicción.
Afortunadamente, hay una forma de rescatar esto. Simplemente define la suma de puntos como el tercer punto invertido sobre el eje x. Una vez más, se nos permite hacer esto porque los operadores binarios se pueden definir como queramos, solo nos importa que nuestras definiciones satisfagan las leyes de grupo.
Así que la forma correcta de sumar puntos en curvas elípticas se representa gráficamente a continuación

Fórmula para la suma
Usando un poco de álgebra, y dados dos puntos
Uno puede derivar cómo calcular donde usando la siguiente fórmula.
Demostrando algebraicamente la conmutatividad y la asociatividad
Debido a que tenemos una ecuación de forma cerrada, podemos demostrar algebraicamente que dados los puntos y .
Lo hacemos de la siguiente manera
var('y_t', 'y_u', 'x_t', 'x_u')
lambda_p = (y_u - y_t)/(x_u - x_t)
x_p = lambda_p^2 - x_t - x_u
y_p = (lambda_p*(x_t - x_p) - y_t)
lambda_q = (y_t - y_u)/(x_t - x_u)
x_q = lambda_q^2 - x_u - x_t
y_q = (lambda_q*(x_u - x_q) - y_u)
Aquí hay una captura de pantalla de la ejecución del código anterior en un cuaderno de Jupyter y la impresión con formato de la salida. El sistema de álgebra computacional necesita un poco de persuasión, pero podemos ver claramente x_q == x_p y y_q == y_p.

para todos los valores de y . Obtenemos un error de división por cero si , pero esto significa que son el mismo punto y eso es obviamente conmutativo.
Podemos usar técnicas similares para demostrar la asociatividad, pero desafortunadamente esto es extremadamente engorroso, por lo que remitimos al lector interesado a otra prueba de asociatividad.
Las curvas elípticas cumplen con la propiedad del grupo abeliano
Veamos que las curvas elípticas cumplen con la propiedad de grupo.
- El operador binario es cerrado. O bien se interseca con un 3.º punto en la curva o con el punto en el infinito (identidad). Se nos garantiza obtener un tercer punto válido cuando intersecamos dos puntos. El operador binario es asociativo.
- El grupo tiene un elemento de identidad.
- Cada punto tiene un inverso.
- El grupo es abeliano porque A ⊕ B = B ⊕ A
Un operador binario debe aceptar cada par posible del conjunto. ¿Qué pasa si el par es el mismo elemento, es decir, A ⊕ A?
Multiplicación de puntos: sumar un punto consigo mismo
Pensemos en esto en términos de límites. Sumar un punto consigo mismo es como acercar infinitesimalmente dos puntos entre sí hasta que se convierten en el mismo punto. Cuando ocurre esta convergencia, la pendiente de la línea será tangente a la curva.
Por lo tanto, sumar un punto consigo mismo es simplemente tomar la derivada en ese punto, obtener la intersección, y luego invertir el eje .
La siguiente imagen demuestra gráficamente .

Atajo para la multiplicación de puntos
¿Qué pasaría si quisiéramos calcular en lugar de ? Parecería que esta es una operación , pero no lo es.
Debido a la asociatividad, podemos escribir como
(y los otros términos) se pueden calcular rápidamente porque 512A es simplemente duplicado 9 veces.
Así que en lugar de hacer 1000 operaciones, podemos hacerlo en 14 (9 para calcular 512A, almacenando en caché los resultados intermedios, y luego 5 sumas).
Esta es en realidad una propiedad importante cuando llegamos a la criptografía:
Podemos multiplicar eficientemente un punto de una curva elíptica por un número entero grande.
Detalles de implementación de la suma
No es muy difícil derivar la fórmula para la suma de puntos usando álgebra simple. Cuando intersecamos dos puntos, conocemos la pendiente y los puntos por los que cruzó, de modo que podemos calcular el punto de intersección.
Prefiero no hacerlo aquí porque no quiero perderme en un montón de manipulación simbólica.
Todo el poder de la teoría de grupos es que no nos importa cómo se vea esa manipulación simbólica. Sabemos que si aplicamos nuestro operador binario a dos puntos, obtendremos otro punto en nuestro conjunto, y nuestro conjunto sigue las leyes de grupo.
Si lo piensas de esa manera, las curvas elípticas son mucho más fáciles de entender.
En lugar de intentar entender las curvas elípticas de forma aislada desde cero, estudiamos un montón de otros grupos algebraicos, y luego transferimos ese conocimiento e intuición a las curvas elípticas.
Los números racionales bajo la suma son un grupo. Los enteros módulo un primo son un grupo bajo la multiplicación. Las matrices con determinante distinto de cero bajo la multiplicación son un grupo.
Aplicas el operador binario y obtienes otro elemento en el conjunto. El grupo tiene un elemento de identidad y cada elemento tiene un inverso. La ley asociativa se cumple. Teniendo todo eso en cuenta, no debería importarte lo que hace el operador ⊕ detrás de escena.
En mi opinión, si intentas entender la matemática de las curvas elípticas de forma aislada a partir de los primeros principios de la teoría de grupos, lo estás haciendo de la manera difícil. Es mucho más fácil entenderla en el contexto de sus parientes.
Eso hace que la experiencia de aprendizaje sea más fluida.
La manipulación algebraica es en realidad solo una suma asociativa.
Sea un punto de una curva elíptica. ¿Qué pasa si hacemos algo como esto?
Al principio, puede parecer extraño que podamos hacer eso, porque si intentamos visualizar qué está pasando con la curva elíptica, seguramente nos perderemos.
Recuerda, lo que arriba parece una multiplicación es en realidad solo un punto sumándose a sí mismo repetidamente, así que esto es lo que realmente sucede en el fondo cuando se mira como un grupo
La “multiplicación” escalar no es “distributiva” de la forma en que pensaríamos en el álgebra normal. Es solo una abreviatura para reorganizar el orden en el que sumamos P a sí mismo.
En el fondo, simplemente sumamos a sí mismo veces. El orden en que lo hagamos no importa debido a la asociatividad.
Así que cuando ves una manipulación como esa, nuestro grupo no ha ganado repentinamente un operador binario de multiplicación; es solo una abreviatura engañosa.
Curvas elípticas en campos finitos
Si tuviéramos que usar curvas elípticas sobre números reales para una aplicación real, serían muy inestables numéricamente porque el punto de intersección podría requerir una gran cantidad de lugares decimales para su cálculo.
Así que, en realidad, hacemos todo con aritmética modular.
Pero no perdemos nada de la intuición que hemos adquirido anteriormente al usar números reales como ejemplo visual.
Aprende más con RareSkills
Este material pertenece a nuestro curso de zero knowledge, consúltalo para aprender más. Esta publicación forma parte de una serie sobre Zero Knowledge Proofs.
Publicado originalmente el 1 de septiembre de 2023