stringtranslate.com

Algoritmo de Schoof

El algoritmo de Schoof es un algoritmo eficiente para contar puntos en curvas elípticas sobre cuerpos finitos . El algoritmo tiene aplicaciones en criptografía de curvas elípticas , donde es importante conocer la cantidad de puntos para juzgar la dificultad de resolver el problema del logaritmo discreto en el grupo de puntos de una curva elíptica.

El algoritmo fue publicado por René Schoof en 1985 y fue un gran avance teórico, ya que fue el primer algoritmo de tiempo polinomial determinista para contar puntos en curvas elípticas . Antes del algoritmo de Schoof, los enfoques para contar puntos en curvas elípticas, como los algoritmos ingenuos y de pasos pequeños y pasos gigantes, eran, en su mayoría, tediosos y tenían un tiempo de ejecución exponencial.

Este artículo explica el enfoque de Schoof, haciendo hincapié en las ideas matemáticas que subyacen a la estructura del algoritmo.

Introducción

Sea una curva elíptica definida sobre el cuerpo finito , donde para un primo y un entero . Sobre un cuerpo de características una curva elíptica puede darse mediante una ecuación de Weierstrass (corta)

con . El conjunto de puntos definidos sobre consiste en las soluciones que satisfacen la ecuación de la curva y un punto en el infinito . Usando la ley de grupo sobre curvas elípticas restringida a este conjunto se puede ver que este conjunto forma un grupo abeliano , con actuando como el elemento cero. Para contar puntos en una curva elíptica, calculamos la cardinalidad de . El enfoque de Schoof para calcular la cardinalidad hace uso del teorema de Hasse sobre curvas elípticas junto con el teorema del resto chino y polinomios de división .

Teorema de Hasse

El teorema de Hasse establece que si es una curva elíptica sobre el cuerpo finito , entonces satisface

Este poderoso resultado, dado por Hasse en 1934, simplifica nuestro problema al reducirlo a un conjunto finito (aunque grande) de posibilidades. Definiendo como , y haciendo uso de este resultado, ahora tenemos que calcular el valor de módulo donde , es suficiente para determinar , y por lo tanto . Si bien no hay una manera eficiente de calcular directamente para , es posible calcular para un primo pequeño, de manera bastante eficiente. Elegimos ser un conjunto de primos distintos tales que . Dado para todo , el teorema del resto chino nos permite calcular .

Para calcular un primo , utilizamos la teoría del endomorfismo de Frobenius y los polinomios de división . Nótese que considerar primos no es una pérdida ya que siempre podemos elegir un primo mayor para tomar su lugar y asegurarnos de que el producto sea lo suficientemente grande. En cualquier caso, el algoritmo de Schoof es el más utilizado para abordar el caso ya que existen algoritmos más eficientes, los llamados ádicos, para cuerpos de características pequeñas.

El endomorfismo de Frobenius

Dada la curva elíptica definida sobre consideramos puntos sobre sobre , la clausura algebraica de ; es decir, permitimos puntos con coordenadas en . El endomorfismo de Frobenius de sobre se extiende a la curva elíptica por .

Este mapa es la identidad en y se puede extender hasta el punto en el infinito , convirtiéndolo en un morfismo de grupo de a sí mismo.

El endomorfismo de Frobenius satisface un polinomio cuadrático que está vinculado a la cardinalidad de por el siguiente teorema:

Teorema: El endomorfismo de Frobenius dado por satisface la ecuación característica

dónde

Así tenemos para todo lo anterior , donde + denota adición en la curva elíptica y y denotan multiplicación escalar de por y de por .

Se podría intentar calcular simbólicamente estos puntos y como funciones en el anillo de coordenadas de y luego buscar un valor de que satisfaga la ecuación. Sin embargo, los grados son muy grandes y este enfoque no es práctico .

La idea de Schoof era llevar a cabo este cálculo restringido a puntos de orden para varios primos pequeños . Fijando un primo impar , ahora pasamos a resolver el problema de determinar , definido como , para un primo dado . Si un punto está en el subgrupo de torsión - , entonces donde es el único entero tal que y . Nótese que y que para cualquier entero tenemos . Por lo tanto tendrá el mismo orden que . Por lo tanto, para pertenecer a , también tenemos si . Por lo tanto, hemos reducido nuestro problema a resolver la ecuación

donde y tienen valores enteros en .

Cálculo módulo primos

El polinomio de división l es tal que sus raíces son precisamente las coordenadas x de los puntos de orden l . Por lo tanto, restringir el cálculo de a los puntos de torsión l significa calcular estas expresiones como funciones en el anillo de coordenadas de E y módulo el polinomio de división l . Es decir, estamos trabajando en . Esto significa en particular que el grado de X e Y definido mediante es como máximo 1 en y y como máximo en x .

La multiplicación escalar se puede realizar mediante el método de doble y suma o utilizando el polinomio de división enésimo. Este último método da como resultado:

donde es el polinomio de división n . Nótese que es una función solo en x y denotándola por .

Debemos dividir el problema en dos casos: el caso en el que , y el caso en el que . Nótese que estas igualdades se comprueban módulo .

Caso 1: ( x q 2 , y q 2 ) ≠ ± q ¯ ( x , y ) {\displaystyle (x^{q^{2}},y^{q^{2}})\neq \pm {\bar {q}}(x,y)}

Utilizando la fórmula de adición para el grupo obtenemos:

Tenga en cuenta que este cálculo falla en caso de que el supuesto de desigualdad fuera incorrecto.

Ahora podemos utilizar la coordenada x para limitar la elección a dos posibilidades, es decir, el caso positivo y el negativo. Utilizando la coordenada y , más adelante se determina cuál de los dos casos se cumple.

Primero demostramos que X es una función en x solamente. Consideremos . Como es par, al reemplazar por , reescribimos la expresión como

y tener eso

Aquí no parece correcto, ¿tiramos ?

Ahora bien, si para uno entonces satisface

para todos los puntos de l -torsión P .

Como se mencionó anteriormente, utilizando Y y ahora podemos determinar cuál de los dos valores de ( o ) funciona. Esto da el valor de . El algoritmo de Schoof almacena los valores de en una variable para cada primo l considerado.

Caso 2: ( x q 2 , y q 2 ) = ± q ¯ ( x , y ) {\displaystyle (x^{q^{2}},y^{q^{2}})=\pm {\bar {q}}(x,y)}

Comenzamos con el supuesto de que . Como l es un primo impar, no puede ser eso y, por lo tanto , . La ecuación característica produce que . Y, en consecuencia, que . Esto implica que q es un cuadrado módulo l . Sea . Calcule en y verifique si . Si es así, depende de la coordenada y.

Si q resulta no ser un cuadrado módulo l o si la ecuación no se cumple para ninguno de w y , nuestra suposición de que es falsa, por lo tanto . La ecuación característica da .

Caso adicional l = 2 {\displaystyle l=2}

Si recuerdas, nuestras consideraciones iniciales omiten el caso de . Dado que suponemos que q es impar, y en particular, si y solo si tiene un elemento de orden 2. Por definición de adición en el grupo, cualquier elemento de orden 2 debe ser de la forma . Por lo tanto, si y solo si el polinomio tiene una raíz en , si y solo si .

El algoritmo

 Aporte: 1. Una curva elíptica . 2. Un entero q para un campo finito con . Producción: El número de puntos de E sobre . Elija un conjunto de primos impares S que no contengan p  tales que:  Ponga  if , else .     Calcule el polinomio de división . Todos los cálculos en el bucle a continuación se realizan en el anillo  Para  do :   Sea el único entero  tal que y .  Calcule , y .  si  entonces   Calcule .  para  do :   si  entonces   si  entonces   ; de lo contrario . de lo contrario si q es un cuadrado módulo l entonces calcule w con calcular si entonces de lo contrario si entonces de lo contrario de lo contrario Utilice el Teorema del Resto Chino para calcular t módulo N a partir de las ecuaciones , donde .                    Producción .

Complejidad

La mayor parte del cálculo se realiza mediante la evaluación de y , para cada primo , es decir, calculando , , , para cada primo . Esto implica exponenciación en el anillo y requiere multiplicaciones. Dado que el grado de es , cada elemento del anillo es un polinomio de grado . Por el teorema de los números primos , hay alrededor de primos de tamaño , dando que es y obtenemos que . Por lo tanto, cada multiplicación en el anillo requiere multiplicaciones que, a su vez, requieren operaciones de bits. En total, el número de operaciones de bits para cada primo es . Dado que este cálculo debe realizarse para cada uno de los primos, la complejidad total del algoritmo de Schoof resulta ser . Usando polinomios rápidos y aritmética de números enteros esto se reduce a .

Mejoras en el algoritmo de Schoof

En la década de 1990, Noam Elkies , seguido por AOL Atkin , idearon mejoras al algoritmo básico de Schoof al restringir el conjunto de primos considerados antes a primos de un cierto tipo. Estos llegaron a llamarse primos de Elkies y primos de Atkin respectivamente. Un primo se llama primo de Elkies si la ecuación característica: se divide en , mientras que un primo de Atkin es un primo que no es un primo de Elkies. Atkin mostró cómo combinar la información obtenida de los primos de Atkin con la información obtenida de los primos de Elkies para producir un algoritmo eficiente, que llegó a conocerse como el algoritmo de Schoof-Elkies-Atkin . El primer problema a abordar es determinar si un primo dado es Elkies o Atkin. Para ello, hacemos uso de polinomios modulares, que provienen del estudio de formas modulares y una interpretación de curvas elípticas sobre los números complejos como retículos. Una vez que hemos determinado en qué caso estamos, en lugar de usar polinomios de división , podemos trabajar con un polinomio que tenga un grado menor que el polinomio de división correspondiente: en lugar de . Para una implementación eficiente, se utilizan algoritmos probabilísticos de búsqueda de raíces, lo que hace que este sea un algoritmo de Las Vegas en lugar de un algoritmo determinista. Bajo el supuesto heurístico de que aproximadamente la mitad de los primos hasta un límite son primos de Elkies, esto produce un algoritmo que es más eficiente que el de Schoof, con un tiempo de ejecución esperado de usar aritmética ingenua y usar aritmética rápida. Aunque se sabe que este supuesto heurístico es válido para la mayoría de las curvas elípticas, no se sabe que sea válido en todos los casos, incluso bajo el GRH .

Implementaciones

Mike Scott implementó varios algoritmos en C++ y están disponibles con código fuente. Las implementaciones son gratuitas (sin términos ni condiciones) y utilizan la biblioteca MIRACL, que se distribuye bajo la licencia AGPLv3 .

Véase también

Referencias