Curvas Elípticas En Profundidad (Parte 9)

EmparejamientosCurvas ElípticasDegeneraciónAlgoritmos
F
Frank Mangone
6 de octubre de 2025 · 15 min de lectura

¡Muy bien! Dejamos la entrega anterior con un resumen de la forma bastante específica en que se definen los emparejamientos.

Una vez terminamos nuestra discusión, nos quedaron un par de definiciones sospechosamente simples para los emparejamientos de Weil y Tate. Para construcciones tan complejas, es casi poético que terminemos con expresiones como esta:

tr(P,Q)=f(DQ)t_r(P,Q) = f(D_Q)

Sin embargo, y como probablemente ya te imaginas a estas alturas, las apariencias engañan: de hecho, no hemos dicho nada sobre cómo computar emparejamientos a partir de estas expresiones simples.

¡Y esa es en realidad la parte más importante, si queremos tener alguna esperanza de poner los emparejamientos a buen uso!

Hoy, veremos la técnica que hace posible la computación de emparejamientos, junto con algunos detalles más que finalmente darán cohesión a todos los elementos que hemos visto hasta ahora.

Estamos mucho más cerca de la meta. ¡Solo un poco más!

Computación

Enfoquémonos en el emparejamiento de Weil por un momento:

wr(P,Q)=f(DQ)g(DP)w_r(P,Q) = \frac{f(D_Q)}{g(D_P)}

En el artículo anterior, vimos que hay una forma natural de evaluar una función en un divisor — y eso es exactamente lo que necesitaríamos hacer para computar este emparejamiento. Es decir, para el divisor DD y la función ff:

f(D)=PE(Fq)f(P)nPf(D) = \prod_{P \in E(\mathbb{F}_q)} f(P)^{n_P}

Esas ff y gg ahí no son funciones cualquiera — dijimos que eran exactamente las funciones cuyos divisores eran:

(f)=rDP, (g)=rDQ(f) = rD_P, \ (g) = rD_Q

Lo que nunca mencionamos es cómo obtenerlas - la última vez, simplemente mencionamos que tales funciones pueden construirse, pero no cómo. Es claro que una vez que las tenemos, es solo cuestión de conectarlas en la definición. ¿Pero cómo las encontramos?

Veamos cómo podemos llegar ahí.

Construyendo las Funciones

Para empezar, necesitamos volver a una de las afirmaciones al inicio del artículo anterior: que podemos construir una función fm,Pf_{m,P} cuyo divisor (que es principal) es de esta forma:

(fm,P)=m(P)([m]P)(m1)(O)(f_{m,P}) = m(P) {-} ([m]P) {-} (m {-} 1)(\mathcal{O})

Lo que vamos a hacer es una especie de proceso inductivo: asumiendo que tenemos fm,Pf_{m,P}, ¿podemos construir fm+1,Pf_{m+1,P}?

La respuesta es — y de una manera bastante elegante.

Haremos uso de un par de trucos que ya hemos visto, que involucran dos funciones muy simples. Primero, tomemos la línea que pasa por PP y [m]P[m]P, cuyo divisor es simplemente:

([m]P,P)=(P)+([m]P)+([m+1]P)3(O)(\ell_{[m]P,P}) = (P) + ([m]P) + ({-}[m+1]P) {-} 3(\mathcal{O})

Segundo, tomemos la línea vertical que pasa por [m+1]P[m+1]P:

(v[m+1]P)=([m+1]P)+([m+1]P)2(O)(v_{[m+1]P}) = ({-}[m+1]P) + ([m+1]P) {-} 2(\mathcal{O})

Usando estos dos divisores, podemos encontrar una relación muy elegante entre fm,Pf_{m,P} y fm+1,Pf_{m+1,P}:

(fm+1,P)=(fm,P)+([m]P,P)(v[m+1]P)(f_{m+1,P}) = (f_{m,P}) + (\ell_{[m]P,P}) {-} (v_{[m+1]P})

Nuestro conocimiento previo de divisores revela algo asombroso sobre la observación anterior: la igualdad de divisores puede mapearse directamente a una expresión algebraica con la que podemos trabajar:

fm+1,P=fm,P[m]P,Pv[m+1]Pf_{m+1,P} = f_{m,P} \frac{\ell_{[m]P,P}}{v_{[m+1]P}}

¡Y eso es prácticamente todo! Dado cualquier valor de mm, podemos empezar en la función f1,Pf_{1,P}, y avanzar hasta la función deseada. Como dicen los yankees, "piece of cake", ¿verdad?

Una señora con un pastel gigante
Lo que tú digas, amigo

No tan rápido, vaquero.

Donde Se Pone Complicado

Recuerda que nuestro objetivo con todo esto era construir una función cuyo divisor es:

(fr,P)=r(P)r(O)(f_{r,P}) = r(P) {-} r(\mathcal{O})

Ese valor rr es exactamente el tamaño de la r-torsión. En la práctica, el valor de rr será enorme (estamos hablando de más de 21502^{150}), lo que significa que encontrar nuestras funciones realizando una actualización a la vez no nos llevará a ningún lado.

Dicho de otra manera, usando la estrategia anterior, la computación de emparejamientos sería inviable en la práctica, así que todo lo que tendríamos es una teoría bonita que no sirve para nada.

Sin embargo, los emparejamientos se usan en la práctica para varios protocolos criptográficos — así que debe haber algún truco en todo esto. Y por supuesto, la computación de emparejamientos fue posible gracias a las ideas de un tipo llamado Victor S. Miller.

Y eso es lo que veremos a continuación.

El Algoritmo de Miller

En lugar de tratar de agregar uno a mm en cada iteración, ¿qué pasaría si tratamos de duplicarlo?

Veamos. Empezamos con alguna función fm,Pf_{m,P}:

(fm,P)=m(P)([m]P)(m1)(O)(f_{m,P}) = m(P) {-} ([m]P) {-} (m {-} 1)(\mathcal{O})

Incluso cuando vamos una iteración a la vez, eventualmente llegaremos a la siguiente función:

(f2m,P)=2m(P)([2m]P)(2m1)(O)(f_{2m,P}) = 2m(P) {-} ([2m]P) {-} (2m {-} 1)(\mathcal{O})

La parte interesante ocurre cuando tratamos de elevar al cuadrado nuestra función original. Por las propiedades de divisores que ya conocemos, podemos calcular que el divisor resultante es:

(fm,P2)=2(fm,P)=2m(P)2([m]P)2(m1)(O)(f_{m,P}^2) = 2(f_{m,P}) = 2m(P) {-} 2([m]P) {-} 2(m {-} 1)(\mathcal{O})

¡Que es casi sospechosamente similar al divisor al que queremos llegar!

De hecho, podemos calcular que su diferencia es:

(f2m,P)(fm,P2)=2([m]P)([2m]P)(O)(f_{2m,P} ) {-} ({f_{m,P}}²) = 2([m]P) {-} ([2m]P) {-} (\mathcal{O})

Eso debería verse familiar ahora, ¿verdad?

Una mujer entornando los ojos intensamente
*Entornando intensamente

Déjame ahorrarte el problema: es el divisor de la línea tangente a [m]P[m]P, menos el divisor de la línea vertical a través de [2m]P[2m]P. En esencia, las funciones usadas para duplicar [m]P[m]P.

(f2m,P)(fm,P2)=([m]P)(v[2m]P)(f_{2m,P} ) {-} ({f_{m,P}}²) = (\ell_{[m]P}) {-} (v_{[2m]P})

Esta brillante intuición nos permite duplicar el valor actual de mm mediante:

  • Elevar al cuadrado la función actual,
  • Multiplicar por la línea tangente a [m]P[m]P,
  • Dividir por la línea vertical en [2m]P[2m]P (que es solo un valor escalar).

Podemos llegar a cualquier valor de rr en tiempo logarítmico mediante elevar-al-cuadrado-y-sumar, usando un solo paso cuando sea necesario.

Por ejemplo, para llegar a r=28r = 28, podríamos hacer duplicar, sumar, duplicar, sumar, duplicar, duplicar.

Esto debería recordarte mucho al algoritmo duplicar y sumar que usamos para la multiplicación rápida de puntos de curvas elípticas. Detrás de escena, ambos usan la regla de la tangente para duplicar — es solo que estamos construyendo funciones en el caso del algoritmo de Miller.

Como observación final, debe notarse que a medida que profundizamos en el algoritmo, las funciones resultantes tendrán alto grado, así que almacenarlas completamente se vuelve prohibitivamente costoso.

El truco es no almacenar la función completa, sino su evaluación en algún divisor. Naturalmente, ¡todo lo que tenemos que hacer es elegir el divisor en el que queremos computar las funciones de emparejamiento!

El elegante algoritmo de Miller es lo que finalmente permite la computación práctica de emparejamientos. Pero esto no es todo lo que hay sobre estas estructuras — hay algunas cosas más que necesitamos tomar en cuenta.

Tipos de Emparejamientos

Una cosa que hemos dejado un poco olvidada es la definición de los mapas de traza y anti-traza. Parecería que nos tomamos todo ese esfuerzo sin razón aparente.

Hasta ahora.

Verás, cuando definimos un emparejamiento como:

e:G1×G2G3e: \mathbb{G}_1 \times \mathbb{G}_2 \rightarrow \mathbb{G}_3

Necesitamos considerar quiénes son realmente estos grupos. Claro, sabemos que pertenecen a la r-torsión, pero ¿está bien que escojamos cualquier subgrupo de torsión? ¿O deberíamos ser cuidadosos con nuestras decisiones?

Como podrías esperar, efectivamente hay que tener cuidado al seleccionar esos grupos. Hacer lo contrario podría causar algunas complicaciones.

Esto finalmente nos llevará a la idea de tipos de emparejamientos, que esencialmente describen la relación entre G1\mathbb{G}_1 y G2\mathbb{G}_2. Pero para entender completamente lo que está en juego, primero debemos entender algunas cosas sobre para qué podríamos estar usando los emparejamientos.

Requisitos de Grupos

Al construir protocolos criptográficos con emparejamientos, hay dos operaciones fundamentales que necesitaremos realizar.

Primero, necesitaremos hacer hash hacia nuestros grupos de elección. Con esto, nos referimos a tomar datos arbitrarios — como el nombre de un usuario, dirección de email, algún mensaje, o prácticamente cualquier cosa — y mapearlo determinísticamente a un punto en G1\mathbb{G}_1 o G2\mathbb{G}_2.

Por ejemplo, esto es esencial para esquemas como encriptación basada en identidad, donde la identidad de una persona se convierte en su clave pública a través de hashing.

También queremos que este proceso de hashing sea eficiente. Algunas elecciones de grupos hacen que tal cosa sea muy difícil de hacer, así que en su lugar, nos vemos obligados a trabajar con generadores fijos y múltiplos escalares, lo que limita severamente qué protocolos podemos construir. Es decir, solo podemos crear puntos de la forma [k]P[k]P para algún generador fijo PP, y no podemos manejar entradas arbitrarias directamente — un factor decisivo para la mayoría de aplicaciones.

Segundo, ocasionalmente necesitamos homomorfismos eficientes entre grupos. Tener un mapa eficientemente computable como este:

ψ:G2G1\psi : \mathbb{G}_2 \rightarrow \mathbb{G}_1

puede resultar extremadamente útil.

La razón para esto es que algunos protocolos requieren verificar relaciones o realizar operaciones que solo tienen sentido cuando los elementos están en el mismo grupo. Adicionalmente, las operaciones en algunos grupos son mucho más rápidas que en otros — ¡así que si podemos movernos entre grupos para una computación más rápida, es una gran ventaja!

¡Como una especie de truco computacional!

Pero por supuesto, hay un problemita. Siempre lo hay.

En este caso, el problema es que no podemos conseguir ambas cosas fácilmente al mismo tiempo. Diferentes elecciones de grupos proporcionan diferentes balances en este intercambio. Y eso es exactamente de lo que tratan los diferentes tipos de emparejamientos.

Con esto, estamos listos para presentarlos formalmente.

Tipo 1: Emparejamientos Simétricos

El caso más simple que podríamos imaginar es cuando G1=G2=G1\mathbb{G}_1 = \mathbb{G}_2 = \mathcal{G}_1

Recuerdemos que G1\mathcal{G}_1 es el subgrupo del campo base.

Dado que usamos el mismo grupo para tanto G1\mathbb{G}_1 como G2\mathbb{G}_2, no es sorpresa que estos se llamen emparejamientos simétricos.

Veamos cómo se desempeñan contra nuestros requisitos. Primero, hacer hash hacia G1\mathcal{G}_1 es relativamente eficiente, ya que todo el grupo está en el campo base — así que empezamos bien. Y dado que ambos grupos son iguales, solo necesitamos una función hash.

En términos de mapas entre grupos, en realidad tenemos uno trivial — ¡el mapa identidad! ¿Supongo que eso realmente no cuenta? No importa - digamos que es otra pequeña victoria.

Entonces, ¿cuál es el intercambio? Todo parece bastante en orden...

Un pollo de caricatura con una mirada dudosa
Ya no confío en ti

Bueno, recuerda que para que los emparejamientos funcionen, los soportes de divisores deben ser disjuntos. Cuando tanto PP como QQ vienen de G1\mathcal{G}_1, asegurar soportes disjuntos se vuelve problemático — esencialmente estamos emparejando un grupo consigo mismo.

La solución a esto es usar lo que se llama el mapa de distorsión: un mapa eficientemente computable ϕ\phi que toma un punto en G1\mathcal{G}_1 y lo mueve a un subgrupo de r-torsión diferente. Con esto, podríamos computar:

e(P,ϕ(Q))e(P, \phi (Q))

Y la condición de soportes disjuntos sería más fácil de cubrir.

Así que aquí está el verdadero problema: los mapas de distorsión solo existen para curvas supersingulares.

Freddie Mercury en su pose icónica
¿Dijiste super singular? ¡Oh sí bebé!

Las curvas supersingulares tienen grados de inmersión pequeños, típicamente k6k \leq 6. Los grados de inmersión pequeños significan que las salidas del emparejamiento caen en una extensión de campo pequeña, lo que a su vez causa que el problema del logaritmo discreto en el grupo de salida se vuelva manejable, resultando en curvas que son vulnerables a ataques.

En resumen, la simplicidad del tipo 1 viene al costo de la seguridad. A medida que emergieron alternativas más seguras, los emparejamientos de tipo 1 han caído en desuso en la práctica.

Tipo 2: Asimétrico con Isomorfismo

Ahora pasamos a emparejamientos asimétricos para los tipos 2, 3 y 4. En los tres casos, tomaremos G1\mathbb{G}_1 como G1\mathcal{G}_1.

En los emparejamientos tipo 2, G2\mathbb{G}_2 se elige como uno de los otros subgrupos de r-torsión excepto G2\mathcal{G}_2 (el subgrupo de traza cero).

Nuevamente, revisemos nuestros requisitos:

  • En términos de isomorfismos disponibles, sí tenemos un mapa eficientemente computable ψ:G2G1\psi: \mathbb{G}_2 → \mathbb{G}_1, y ya lo has visto — ¡es el mapa de traza! Esto nos permite mover elementos de G2\mathbb{G}_2 hacia G1\mathbb{G}_1 cuando los protocolos lo requieren. Incluso podemos ir en la dirección inversa usando el mapa anti-traza para ciertas operaciones, aunque esto no mapea directamente de vuelta a G2\mathbb{G}_2.
  • Sin embargo, en términos de hashing, esta selección tiene dificultades. No hay una forma eficiente conocida de hacer hash directamente hacia estos otros subgrupos de r-torsión.

Así que hashing es el verdadero culpable aquí. Lo mejor que podemos hacer es, como mencionamos previamente, elegir un generador fijo P2G2P_2 ∈ \mathbb{G}_2 y crear elementos vía multiplicación escalar [k]P2[k]P_2. Pero esto significa que cada elemento tiene un logaritmo discreto conocido relativo a P2P_2, lo que rompe protocolos que requieren puntos aleatorios o derivados de hash.

Esta sola limitación es tan crítica que ha impedido que los emparejamientos tipo 2 vean uso práctico generalizado — la mayoría de protocolos simplemente necesitan la capacidad de hacer hash hacia ambos grupos, lo que inmediatamente descarta este tipo.

Tipo 3: Asimétrico sin Isomorfismo

Ahora para este tipo, tomamos G2\mathbb{G}_2 como G2\mathcal{G}_2 — el subgrupo de traza cero mismo.

Este cambio aparentemente pequeño tiene implicaciones profundas — en realidad voltea completamente el intercambio. Veamos:

  • A diferencia del tipo 2, podemos ahora hacer hash hacia G2\mathbb{G}_2. El mecanismo involucra primero hacer hash hacia toda la r-torsión, y luego simplemente aplicar el mapa anti-traza para moverse hacia G2\mathcal{G}_2.
  • Por supuesto, debemos pagar un precio por esta conveniencia. En este caso, eso se traduce en no tener una forma eficiente de computar un isomorfismo ψ que podamos usar.

Es importante señalar que tal isomorfismo debe existir — después de todo, tanto G1\mathbb{G}_1 como G2\mathbb{G}_2 tienen el mismo tamaño. El problema es que no hay una forma eficiente conocida de computarlo.

Irónicamente, el único grupo al que podemos hacer hash eficientemente (además de G1\mathcal{G}_1) es el único subgrupo del que no podemos mapear eficientemente hacia afuera.

Así, perdemos los atajos computacionales y la flexibilidad de protocolo que ofrecía el tipo 2. Y no menos importante es el hecho de que la mayoría de pruebas de seguridad dependen de tener tal mapa, así que para probar la robustez de los emparejamientos tipo 3, los protocolos necesitan diseñarse alrededor de diferentes suposiciones de dureza.

En la práctica, este intercambio ha resultado ser aceptable, ya que la capacidad de hacer hash hacia ambos grupos es el aspecto más crítico para la mayoría de protocolos.

El Tipo 3 es el estándar de oro para la criptografía moderna basada en emparejamientos.

Tipo 4: La Torsión Completa

Finalmente, el tipo 4 toma G2\mathbb{G}_2 como toda la r-torsión E[r]E[r].

  • Hacer hash hacia E[r]E[r] es posible, pero es menos eficiente que hacer hash hacia G1\mathcal{G}_1 o G2\mathcal{G}_2. Dado que el grupo es más grande (tiene orden r2r^2, como ya hemos visto), hay más sobrecarga computacional.
  • Entonces, podemos mirar la estructura de E[r]E[r]. En este sentido, tiene una característica distintiva: no es cíclico. Ya sabemos que es isomórfico a Zr×Zr\mathbb{Z}_r \times \mathbb{Z}_r, así que no hay un solo generador que pueda producir todos los elementos en el grupo. Algunos protocolos dependen de la ciclicidad para funcionar, así que no pueden usar emparejamientos tipo 4.

Curiosamente, al hacer hash hacia E[r], la probabilidad de caer en G1\mathcal{G}_1 o G2\mathcal{G}_2 es cercana a 2/r2 / rdespreciable para valores grandes de rr. Ciertos protocolos especializados podrían necesitar asegurar evitar subgrupos específicos, y en esos casos, los emparejamientos tipo 4 pueden ser útiles.

Los costos de eficiencia y la falta de ciclicidad significan que los emparejamientos tipo 4 rara vez se usan en la práctica.

En general, los emparejamientos tipo 3 son la variante predominante en la criptografía moderna basada en emparejamientos. Y a decir verdad, casi nunca nos preocupamos por qué tipo de emparejamiento estamos usando. Es solo que si tenemos que ponernos realmente técnicos en nuestro diseño de protocolo, ¡podríamos tener que considerar lo que implica usar cada elección de grupo!

Ahora que entendemos los diferentes tipos de emparejamientos y sus intercambios, abordemos una preocupación más crítica, antes de cerrar el capítulo sobre estas construcciones asombrosas.

Degeneración

Hemos hablado sobre tipos de emparejamientos y cómo construir las funciones necesarias para la computación, pero hay una propiedad más crítica que necesitamos asegurar: que nuestro emparejamiento realmente funcione.

La cita 'God damn it Gump! You're a God damn genius!' de Forrest Gump

¿Qué quiero decir con que funcione? Recuerdemos que los emparejamientos están destinados a ser mapas bilineales. Pero hay una forma trivial de satisfacer la bilinealidad: ¡simplemente mapear todo a 11!

e(P,Q)=1 P,Qe(P, Q) = 1 \ \forall P, Q

Mientras que tal emparejamiento técnicamente cumpliría con la bilinealidad, es completamente inútil. Llamamos a tal emparejamiento degenerado.

Y por supuesto, un emparejamiento es no degenerado si existen puntos PP y QQ tales que e(P,Q)1e(P, Q) \neq 1.

¿Debería Preocuparme?

Después de que pasamos por el problema de definir emparejamientos de estas formas enrevesadas y complejas, parecería bastante improbable que nuestros emparejamientos fueran degenerados, ¿verdad?

Bueno... No exactamente. Si no somos cuidadosos sobre cómo elegimos G1\mathbb{G}_1 y G2\mathbb{G}_2, podemos terminar con un emparejamiento degenerado incluso cuando seguimos todos los pasos de construcción correctamente. Las matemáticas podrían ser sólidas, pero el resultado es criptográficamente inútil.

Un ejemplo concreto de lo que puede salir mal ocurre cuando tratamos de usar el emparejamiento de Weil con G1=G2=G1\mathbb{G}_1 = \mathbb{G}_2 = \mathcal{G}_1, pero estamos trabajando con una curva ordinaria (no supersingular) que no tiene mapa de distorsión.

Cuando el emparejamiento de Weil opera en dos puntos del mismo espacio propio de Frobenius (en este caso, G1\mathcal{G}_1), el emparejamiento siempre evalúa a 11, sin importar qué puntos elijas. Al costo de pasar por alto algunos de los detalles, aquí está la explicación corta:

  • Primero, sabemos que el endomorfismo de Frobenius actúa trivialmente en puntos en G1\mathcal{G}_1, así que para cualquier PP y QQ en G1\mathcal{G}_1, tenemos π(P)=P\pi (P) = P y π(Q)=Q\pi (Q) = Q.
  • Entonces, para funciones racionales en la curva, el mapa de Frobenius tiene una propiedad especial:
f(π(R))=f(R)qf(\pi(R)) = f(R)^q
  • Podemos conectar esta propiedad en el emparejamiento de Weil mismo, y mirando los divisores resultantes, obtenemos:
wr(π(P),π(Q))=wr(P,Q)qw_r(\pi(P), \pi(Q)) = w_r(P, Q)^q
  • Pero dado que PP y QQ están en G1\mathcal{G}_1:
wr(P,Q)=wr(P,Q)qw_r(P, Q) = w_r(P, Q)^q

Lo que estamos diciendo es que cualquiera que sea la salida del emparejamiento, está fijada por el mapa de la q-ésima potencia. En otras palabras, tiene que ser un elemento en el campo base, porque si wr(P,Q)w_r(P, Q) pertenece a una extensión de campo, entonces elevarlo a la q-ésima potencia no producirá el mismo resultado.

También sabemos que wr(P,Q)w_r(P, Q) debe ser una raíz r-ésima de la unidad.

Recuerda que para que un campo contenga raíces r-ésimas de la unidad, rr debe dividir la cardinalidad del subgrupo multiplicativo del campo, así que en este caso, q1q {-} 1.

Ese es el clavo final en el ataúd: usualmente elegimos rr de manera que no divida q1q {-} 1, lo que significa que no hay raíces de la unidad — excepto por la trivial: el elemento identidad multiplicativo. Así, w1(P,Q)w_1(P, Q) debe ser igual a 11.

Esto es precisamente por qué los emparejamientos tipo 1 requieren curvas supersingulares con mapas de distorsión — sin ellos, la degeneración es inevitable.

Requisitos

¡Muy bien! Eso fue ciertamente mucho. ¡Perdón por eso!

Un niño llorando
¿Por qué me haces esto?

Más allá del ejemplo específico, hay algunas condiciones generales que deberíamos verificar para asegurar la no degeneración. Terminemos mirándolas.

  • Primero y más importante: G1\mathbb{G}_1 y G2\mathbb{G}_2 deben ser disjuntos (excepto por supuesto por la identidad, G1G2={O}\mathbb{G}_1 \cap \mathbb{G}_2 = \{\mathcal{O}\}). Si comparten puntos no triviales, el emparejamiento degenera en esos puntos. Ya vimos el caso extremo donde G1=G2\mathbb{G}_1 = \mathbb{G}_2 sin un mapa de distorsión — y el emparejamiento se vuelve completamente degenerado.

Esta es la razón por la que la descomposición de traza y anti-traza es tan valiosa: naturalmente nos permite usar G1\mathcal{G}_1 y G2\mathcal{G}_2, que son disjuntos por definición.

  • Segundo: los soportes de divisores deben ser disjuntos. Hemos mencionado esto antes, pero no hay daño en repetirlo: si los soportes no son disjuntos, la evaluación de función colapsa a 0 o explota a infinito, causando comportamientos indefinidos que pueden resultar en degeneración. Elegir G1\mathbb{G}_1 y G2\mathbb{G}_2 de diferentes espacios propios naturalmente asegura esto.
  • Tercero: el grado de inmersión debe ser suficientemente grande. Recuerda que el grado de inmersión kk es el entero positivo más pequeño tal que rr divide qk1q^k {-} 1, y determina dónde viven los valores del emparejamiento. Esencialmente, debemos asegurar que hay suficientes raíces r-ésimas independientes de la unidad para soportar un emparejamiento no degenerado.

En la práctica, elegir el tipo de emparejamiento correcto (especialmente tipo 3) y usar curvas amigables para emparejamientos apropiadamente construidas automáticamente satisface todas estas condiciones. La maquinaria matemática asegura la no degeneración, así que podemos enfocarnos en las aplicaciones criptográficas en lugar de preocuparnos por los casos extremos.

Aún así, entender por qué estas condiciones importan puede ayudarnos a apreciar el diseño cuidadoso que va en la criptografía basada en emparejamientos. ¡Un paso en la dirección equivocada, y toda la cosa puede desmoronarse!

Resumen

Con esto, hemos completado nuestra exploración de emparejamientos, cubriendo algunos de los aspectos prácticos más importantes que los hacen utilizables en criptografía.

Como siempre, hay más que decir. En particular, quiero señalar el hecho de que aún necesitamos encontrar curvas adecuadas para estas construcciones. La mayoría del tiempo, asumimos que podemos encontrarlas, pero no es necesariamente una tarea fácil.

Aún así, con estos últimos artículos, deberías tener una idea aproximada de qué tratan los emparejamientos. Es interesante cómo nos propusimos encontrar funciones con una propiedad aparentemente simple y dañina — bilinealidad — , pero terminamos teniendo que meternos en cosas bastante profundas para hacerlo funcionar.

Parte de lo que hace hermosas las matemáticas, supongo: ¡todo termina encajando muy bien!

Para resumir el artículo de hoy, recuerda: la mayoría del tiempo, estarás usando emparejamientos tipo 3, con el algoritmo de Miller trabajando en segundo plano para la computación real, y estarás usando curvas y grados de inmersión que aseguren la no degeneración.

Mientras que podríamos decir mucho, mucho más sobre curvas elípticas (diablos, hay libros enteros escritos sobre ellas, si estás interesado), no es mi intención cubrir absolutamente todo en esta serie.

Sin embargo, creo que algunas consideraciones prácticas serían un buen cierre. Así, el próximo artículo estará dedicado a entender algunas de las curvas con la adopción más generalizada y sus particularidades.

¡Nos vemos en la línea de meta!