Algoritmo de cálculo de pedidos

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 6 de junio de 2019; las comprobaciones requieren 2 ediciones .

El algoritmo de cálculo de orden ( algoritmo de cálculo de índice ) es un algoritmo probabilístico para calcular el logaritmo discreto en un anillo de residuos módulo un número primo . La complejidad de encontrar el logaritmo discreto es la base de muchos algoritmos relacionados con la criptografía . Ya que resolver este problema usando grandes números requiere una gran cantidad de recursos que ninguna computadora moderna puede proporcionar . Un ejemplo de tal algoritmo es GOST R 34.10-2012 .

Historia

Maurice Krajczyk propuso por primera vez la idea básica de este algoritmo en su libro "Théorie des Nombres" en 1922. Después de 1976, el problema del logaritmo discreto se vuelve importante en matemáticas y criptoanálisis. Esto se debe a la creación del criptosistema Diffie-Hellman . En este sentido, en 1977, R. Merkle retomó las discusiones sobre este algoritmo. Dos años más tarde, fue publicado por primera vez por los colegas de Merkel. Finalmente, en 1979, Adlerman lo optimizó, investigó la complejidad y lo presentó en la forma que conocemos hoy. Actualmente, el algoritmo de cálculo de órdenes y sus versiones mejoradas proporcionan la forma más rápida de calcular logaritmos discretos en algunos grupos finitos.

Enunciado del problema del logaritmo discreto

Para un número primo dado y dos enteros y se requiere encontrar un entero que satisfaga la comparación:

donde es un elemento del grupo cíclico generado por el elemento .

Algoritmo

Entrada : g  - generador de un grupo cíclico de orden n , a  - de un subgrupo cíclico, p  - un número primo, c  - parámetro de confiabilidad, generalmente tomado igual a 10 o un número cercano a este valor (utilizado para implementar el algoritmo en una computadora, si una persona decide, entonces no se configura).

Tarea : encontrar x tal que .

  1. Elija una base factorial S = { p 1 , p 2 , p 3 , …, p t } (Si G = Z * p , entonces la base consta de los primeros t números primos).
  2. Elevamos g a una potencia aleatoria k , donde k es tal que . obtenemos _
  3. Representamos g k de la siguiente manera: donde (es decir, estamos tratando de factorizarlo). Si no funciona, vuelve al paso 2.
  4. Del párrafo 3 se sigue la expresión obtenido tomando un logaritmo (la comparación se toma módulo el orden del grupo, ya que trabajamos con el exponente, pero en el grupo G ). Los logaritmos son desconocidos en esta expresión. Hay t de ellos. Es necesario obtener tales ecuaciones t  +  c piezas, si esto no es posible, volvemos al paso 2 (cuando se implementa en una computadora) u obtener el número requerido de ecuaciones para encontrar todos los logaritmos desconocidos (cuando lo resuelve una persona).
  5. Resolvemos el sistema de ecuaciones resultante, con t incógnitas y t  +  c comparaciones.
  6. Elegimos un número aleatorio k tal que . Calculamos .
  7. Repetimos el punto 3, solo para el número . Si no funciona, volvemos al párrafo 6.
  8. De manera similar al punto 4, obtenemos: , donde ( ), donde . En este punto, resolvimos el problema del logaritmo discreto encontrando .

Salida : .

Ejemplo

Resuelve la ecuación:

Elige una base factorial Sea k = 7 Calcula

Tomamos el logaritmo y denotamos Y obtenemos el sistema de ecuaciones

lo resolvemos

Efectivamente, por lo tanto ,

Encontramos k tal que

Como consecuencia

Tomamos el logaritmo de esta expresión y obtenemos

Respuesta :

Dificultad

En este algoritmo, el número de iteraciones depende tanto del tamaño de p como del tamaño de la base factorial. Pero elegimos la base de factores de antemano y su tamaño es fijo. Por tanto, la complejidad final está determinada únicamente por el tamaño del número primo y es igual a: , donde ,  son algunas constantes que dependen de cálculos intermedios, en particular, de la elección de la base factorial.

Mejoras

Un algoritmo de cálculo de orden acelerado, cuya esencia es usar una tabla de índice.

Dificultad

La complejidad computacional se reduce a , en comparación con el algoritmo original.

Véase también

Enlaces