Curvas Elípticas En Profundidad (Parte 1)
La criptografía está en constante evolución.
Nuevas técnicas se desarrollan todo el tiempo. Especialmente en algunos campos que parecen estar de moda últimamente, como las Pruebas de Conocimiento Cero, la Encriptación Totalmente Homomórfica, y la Criptografía Post-Cuántica.
Métodos mejores, más rápidos y más seguros están siendo constantemente investigados. La cantidad de técnicas criptográficas que existen es abrumadora.
Sin embargo, las estructuras matemáticas fundamentales sobre las que se basa este mundo de diversas técnicas son bastante invariantes.
Aunque quizás hay algunas caras nuevas como anillos polinomiales e ideales, y algunas investigaciones sobre alternativas más exóticas como los números p-ádicos.
La mayoría de los métodos criptográficos que usamos todos los días (a menudo sin siquiera notarlo) se basan en una única construcción: una curva elíptica.
Es posible que pronto se vuelvan obsoletas. Pero al menos en el futuro muy cercano, ¡no van a desaparecer!
Recientemente hablé sobre ellas en la serie Criptografía 101. A decir verdad, eso fue solo una breve y amigable descripción general del tema. Suficientemente buena como primera aproximación, pero ni de cerca la historia completa.
Esta vez, quiero intentar una inmersión más profunda en el mundo de las curvas elípticas. Hay mucho que cubrir, así que dividiré esto en varias partes.
¡Espero que lo disfrutes!
Curvas Elípticas
Naturalmente, la primera pregunta que se nos viene a la mente es ¿qué es una curva elíptica?
Sin más preámbulos, te presento — esto es una curva elíptica:
Lo que estás viendo es la ecuación general de Weierstrass para curvas elípticas — realmente es solo un polinomio cúbico (de grado tres). Nada de qué asustarse.
En general, usaremos la siguiente versión reducida, que es equivalente bajo ciertas condiciones que no cubriremos aquí:
Y así es como se ve una curva elíptica cuando se grafica en un plano cartesiano:

Mirando esta figura, podrías preguntarte qué hay de "elíptico" en estas curvas. Resulta que esto es en realidad un nombre inapropiado, como se explica aquí.
Lo que estamos representando aquí es la colección de puntos que satisfacen la ecuación que definimos anteriormente, al igual que una parábola satisface la ecuación .
Hay un par de cosas que podemos decir sobre estas curvas desde el principio.
En primer lugar, observa cómo son simétricas respecto al eje x. Es fácil ver que el culpable es ese término , porque cualquier valor positivo para tiene tanto una raíz cuadrada positiva como una negativa, que son ambas soluciones válidas para .
En segundo lugar, la curva es suave. Sin embargo, no todas las curvas que satisfacen la expresión son suaves — como esta:

Podemos ver cómo parece haber un punto de intersección. Si intentas graficar la curva , también notarás un comportamiento extraño.
Técnicamente no es una intersección, sino más bien dos partes puntiagudas de la curva que se tocan.
Llamamos a este tipo de curvas singulares. Las curvas singulares serán problemáticas cuando intentemos usarlas para nuestros propósitos — porque la derivada en esos puntos no está bien definida. Por esta razón, las curvas no suaves como esta no se consideran curvas elípticas.
¡Suficientes presentaciones! ¿Para qué sirven estas cosas de todos modos?
Definiendo Operaciones
Lo atractivo de estas curvas es que podemos usarlas para definir una operación. Quiero dedicar el resto de este artículo a entender dicha operación, lo que deja su utilidad fuera del panorama por ahora — pero lo cubriremos en los próximos artículos.
Aun así, me gustaría proporcionar algo de contexto antes de continuar.
Nuestra operación servirá como una pieza clave en la construcción de un grupo matemático. Hablaremos de ellos más adelante, pero la idea es que los grupos son la piedra angular para algunos problemas matemáticos extremadamente difíciles, que permiten la criptografía de clave pública que todos conocemos y amamos. Y más aún.
La operación de curva elíptica que vamos a presentar tiene una definición algo extraña. Por favor, tenme paciencia por ahora. Funciona así:
- Elige dos puntos y en la curva, y traza una línea a través de ellos.
- Encontrarás que esta línea intersecta otro punto en la curva. Llamémoslo .
- Ahora, refleja sobre el eje x. Como es un punto en la curva, y la curva es simétrica, llegarás a otro punto en la curva: .
Todo el proceso se ve algo así:

Siguiendo esta receta, hemos calculado un nuevo punto como resultado de "sumar" y . Podemos escribir esto como:
Es una forma extraña de definir la suma, sí, pero es útil pensar en la operación en esos términos. Usamos el símbolo para diferenciarlo de la suma "normal".
Sin embargo, ¿qué sucede si queremos sumar consigo mismo?
Imaginemos, en cambio, que tenemos algún otro punto que está muy cerca de en la curva — llamémoslo . A medida que movemos cada vez más cerca de , la línea que pasa por ellos se acerca lentamente a la tangente de la curva en . Muy naturalmente, podemos inferir que encontrar se hace con el mismo proceso de antes, pero usando la tangente en como nuestra línea en el primer paso.
¡Y por eso es importante tener una primera derivada bien definida!
Para sorpresa de absolutamente nadie, la receta que seguimos se llama la regla de la cuerda y la tangente. Sin embargo, ¿siempre funciona? ¿No hay escenarios límite que puedan ser problemáticos?
El Punto de Intersección
En el paso uno de nuestra regla de la cuerda y la tangente, una suposición importante es que podemos encontrar un tercer punto de intersección. ¿Es esto siempre posible? Echemos un vistazo más de cerca — ¡es hora de algunas sustituciones!
La ecuación para una línea es muy simple:
Lo bueno es que podemos sustituir esta expresión directamente en nuestra ecuación de curva elíptica, lo que resulta en esta igualdad polinómica de tercer grado en :
Un polinomio de tercer grado como este tiene como máximo tres raíces. Y como podrías adivinar, esas raíces serán las coordenadas x de los puntos donde nuestra línea intersecta la curva, si es que hay alguna intersección en absoluto.
Intentemos averiguar qué sucede cuando usamos esta expresión en los casos de la regla de la cuerda y la tangente.
La Cuerda
Si nuestro polinomio tiene tres raíces, entonces podemos factorizarlo en un producto de términos de la forma . Y con un poco de reorganización, terminamos con:
Aún no hemos descubierto cuáles son los valores de y , pero son bastante fáciles de calcular para una línea que pasa por dos puntos (P y Q), así que te dejaré esa parte a ti.
Es útil expandir el lado izquierdo de la expresión anterior, lo que da:
Y mira esto: comparando el término en ambos lados de la ecuación, obtenemos:

Al mover un par de términos a la derecha, hemos obtenido una expresión para la coordenada de este tercer punto de intersección. Para encontrar , todo lo que tenemos que hacer es introducirlo en la ecuación de la línea, y luego invertir el valor resultante. Y nos queda:
¡Eso es todo!
La Tangente
Encontrar es un poco más complicado ahora, porque necesitamos encontrar la línea que pasa por que es tangente a la curva. La tangente es simplemente la línea que pasa por cuya pendiente es igual a la primera derivada de la curva con respecto a .
Dado que no tenemos una fórmula explícita en la forma de , tenemos que desempolvar nuestras habilidades de cálculo y usar un pequeño viejo truco llamado la regla de la cadena, tratando a como una función implícita:
Al introducir las coordenadas de en la expresión anterior, encontramos la pendiente de la línea tangente a en - este era nuestro valor en el caso anterior.
Luego, procedemos como antes. Solo tenemos que tener cuidado de considerar una raíz con multiplicidad = 2. Con esto en mente, obtenemos casi exactamente el mismo resultado:
Sumar a sí mismo es como duplicarlo. Y entonces, en lugar de escribir , escribamos , ¡y nos referimos a esto como - lo adivinaste - duplicación de punto!
Un Caso Extremo
¡Genial! Todo funcionando bien hasta ahora.
Ahora podríamos intentar sumar y (su reflejo sobre el eje ). Sin embargo, la línea que pasa por ellos es una línea vertical, definida por . Esto significa que obtendremos:
Para un valor dado de , esto significa que obtenemos dos valores válidos para , no tres. No es bueno - el paso 1 de nuestro proceso requiere que exista un tercer punto de intersección. ¿O no?
Claramente, para que nuestra operación esté bien definida, necesitamos poder realizar . Si esto fuera una suma simple, esto resultaría, por supuesto, en cero. Esencialmente, lo que necesitamos es definir qué significa cero para nuestra operación.
Bueno, aquí está: te presento el punto en el infinito:

Te pido que estires un poco tu imaginación en este punto. En todo caso, piensa en esto como un "punto especial". Siempre que necesitemos sumar , sabemos que la regla normal de la cuerda no se aplica y, en su lugar, sabemos que el resultado es el punto en el infinito, .
Le daremos más sentido a esto cuando hablemos del espacio proyectivo.
Suma Rápida
Otra cosa particularmente genial sobre esta operación que definimos es que hay un algoritmo para la suma rápida. Es decir, si quisiéramos sumar:
Podríamos hacerlo paso a paso, sumando al resultado de cada suma subsiguiente, como ya sabemos hacer.
Sorprendentemente, podemos hacerlo mejor. Debido a que la operación es asociativa, es posible "agrupar" sumas, de una manera que podría ser conveniente para nosotros. Por ejemplo, se puede escribir como:
Observa que la expresión final requiere dos duplicaciones y una suma, en contraste con las cuatro sumas requeridas en la configuración inicial. Ahorrar una sola operación puede no parecer mucho, pero cuando multiplicamos por un mayor, los ahorros son sustanciales.
El algoritmo general para la multiplicación funciona en forma de duplicar y sumar. Para cualquier entero positivo por el que queramos multiplicar, primero necesitamos encontrar su representación binaria, y hacer el siguiente proceso:
- Establecer el valor inicial del resultado en .
- Luego, comenzando desde el segundo bit más significativo, asignar .
- Si el dígito actual es un , entonces también sumar .
- Moverse un dígito a la derecha y repetir desde el paso .
Por ejemplo, en binario es . El proceso tendría 3 iteraciones en total:
- Inicialización: - Primer dígito: - Segundo dígito: - Último dígito:
Un total de multiplicaciones y sumas - ya la mitad de las sumas necesarias si sumáramos un a la vez.
Típicamente, esto se llama multiplicación por en lugar de "suma rápida". Sin embargo, tenemos un algoritmo rápido y, lo que es importante, el problema inverso no es rápido en absoluto.
Con esto, quiero decir que dados dos puntos y , tales que , no hay un algoritmo rápido para recuperar el valor de .
¡Un problema tan simple es lo que permite una buena parte de la criptografía de clave pública que conocemos y amamos!
Pero ¿Por Qué Curvas Elípticas?
Vaya. Ya con las preguntas picantes.
Todavía no sabemos realmente mucho sobre cómo las curvas elípticas son útiles desde una perspectiva criptográfica. Todo lo que sabemos es cómo sumar puntos, siguiendo un proceso que, dado nuestro conocimiento actual, parece muy arbitrario y, honestamente, un poco forzado.
Por supuesto, quedan muchas cosas por decir sobre las curvas elípticas, pero al menos podemos tratar de imaginar un par de cosas.
Hay un teorema llamado teorema de Bézout que, en términos generales, dice que una línea interceptará una curva de grado tres en 3 puntos (contando el punto en el infinito y demás). Nuestra operación es entonces bastante natural: dados dos puntos en la curva, dibujar una línea a través de ellos garantiza que encontraremos un tercero, y esto es útil para obtener un resultado único.
¿Qué pasaría si intentáramos usar una curva de mayor grado? Debido al teorema de Bézout, tendríamos más de 3 puntos de intersección. Lo que significa que, si queremos sumar dos puntos y en la curva, tendremos múltiples candidatos como resultado. ¿Cuál elegimos?

Esto hace que definir una operación sobre estos tipos de curvas sea bastante complicado.
Es posible, usando un concepto llamado divisores. Pero todavía es demasiado pronto para hablar de eso.
Si de alguna manera tuviéramos una forma de definir una operación sobre curvas de mayor grado, el otro problema que tendríamos sería la impracticidad. Encontrar expresiones para los puntos de intersección fue simple con nuestras confiables curvas elípticas, pero puede ser un lío con curvas más complejas. Es posible que ni siquiera haya fórmulas explícitas disponibles, debido al teorema de Abel-Ruffini.
Dijimos que trabajaríamos con la forma de Weierstrass, pero esto no significa que no haya otras curvas de grado tres que podríamos usar. Por ejemplo, están las curvas de Montgomery y las curvas de Edwards, que también son útiles para la criptografía, pero quizás no son las que tienen la adopción más generalizada.
Además, podríamos pensar en curvas de grado tres ligeramente más complejas, como esta:

Por más que lo intentes, encontrarás que una línea intersecta esta curva como máximo en tres puntos. Pero esto no significa que sea muy práctico de usar; de hecho, las fórmulas explícitas no serán fáciles de derivar y probablemente serán más complejas computacionalmente que nuestros simples resultados de Weierstrass.
En este sentido, nuestra definición de curva elíptica se sitúa en una especie de zona "justo en el punto", equilibrando los bajos costos computacionales de las operaciones, mientras proporciona suficiente complejidad para ser útil en criptografía.
Y sobre esas fórmulas explícitas que sigo mencionando, vamos a necesitarlas con seguridad si queremos construir cualquier algoritmo a partir de nuestras curvas. Verás, estas visualizaciones son geniales como una forma de construir una comprensión inicial, pero no representan cómo se verá realmente una curva elíptica para nosotros, que se asemeja más a esto:

Tengo la sensación de que probablemente acabas de hacer:

No te preocupes — ¡todo tendrá sentido pronto!
Resumen
En esta primera parte de lo que (espero) será una breve serie de artículos, presentamos los conceptos básicos sobre las curvas elípticas.
Si ya leíste esto, o si tenías conocimiento previo del tema, probablemente encuentres esta introducción muy simple.
¡Pero apenas estamos comenzando! Tenemos muchas cosas divertidas por cubrir, desde problemas de millones de dólares hasta curvas en "dimensiones superiores".
Mantente despierto, ¡y te veré en la próxima parte!