El algoritmo Polyg-Hellman (también llamado algoritmo Silver-Polig-Hellman ) es un algoritmo de logaritmo discreto determinista en el anillo de residuos módulo un número primo . Una de las características del algoritmo es que para números primos de una forma especial, puede encontrar el logaritmo discreto en tiempo polinomial . [una]
Este algoritmo fue inventado por el matemático estadounidense Roland Silver , pero fue publicado por primera vez por otros dos matemáticos estadounidenses Stephen Pohlig y Martin Hellman en 1978 en el artículo " Un algoritmo mejorado para calcular logaritmos sobre GF (p) y su significado criptográfico" [2] , quien desarrolló este algoritmo independientemente de Roland Silver. [3]
Que se dé la comparación
|
(una) |
y se conoce la descomposición de un número en factores primos:
(2) |
Es necesario encontrar un número que satisfaga la comparación (1). [cuatro]
La esencia del algoritmo es que es suficiente encontrar módulos para todos , y luego la solución a la comparación original se puede encontrar usando el teorema chino del resto .
Para encontrar cada uno de estos módulos, debe resolver la comparación:
La mejor manera de lidiar con este algoritmo es considerar el caso especial en el que .
Se nos da , y , si bien existe un elemento primitivo y necesitamos encontrar uno que lo satisfaga .
Se supone que , ya que es indistinguible de , porque en nuestro caso el elemento primitivo , por definición, tiene grado , por tanto:
.Cuando , es fácil de determinar por expansión binaria con coeficientes , por ejemplo:
El bit menos significativo se determina elevando a una potencia y aplicando la regla
Derivación de la regla superiorConsidere la comparación obtenida anteriormente :
,pero por definición toma un valor distinto de , por lo que solo queda una comparación :
.Eleve la comparación (1) a una potencia y sustituya la comparación obtenida anteriormente:
La igualdad es verdadera si es par, es decir, en la expansión en forma de polinomio, el término libre es igual a , por lo tanto, es verdadera cuando .
Ahora transformamos la descomposición conocida e introducimos una nueva variable :
,dónde
Está claro que es divisible por when , y when es divisible por , pero ya no.
Argumentando como antes, obtenemos la comparación :
de la que nos encontramos .
Los bits restantes se obtienen de manera similar. Escribamos la solución general de hallar con nueva notación:
,dónde
.Entonces elevando a una potencia da:
.Como consecuencia:
de la que nos encontramos .
Habiendo encontrado todos los bits, obtenemos la solución requerida . [6]
EjemploDado:
Encontrar:
Solución:
Obtenemos . Por lo tanto, parece:
Encontramos :
También contamos :
Encontramos :
También contamos :
Encontramos :
También contamos :
Encontramos :
Encuentra lo que buscas :
Responder:
Elevemos las partes izquierda y derecha de la comparación (1) a la potencia :
Sustituye y transforma la comparación:
Porque es un elemento primitivo, por lo tanto comparaciones de la forma:
Obtenemos
[cuatro] Usando la tabla compilada en el paso 1, encontramos For j de 0 a Teniendo en cuenta una comparación La solución se encuentra nuevamente en la tabla. Fin del ciclo en j Fin del ciclo en i Paso 3 (encontrar la respuesta). Encontrando para todo i , encontramos por el teorema chino del resto . [7] EjemploEs necesario encontrar el logaritmo discreto en base a , es decir, encontrar para:
.Encontramos una descomposición .
obtenemos _
Hacemos una tabla :
estamos considerando por cierto:
Encontramos por comparación:
De la tabla encontramos que para la comparación anterior es cierto.
Encontramos por comparación:
De la tabla obtenemos que la comparación anterior es cierta. Encontramos :
Ahora estamos considerando . por cierto:
Por analogía , encontramos :
obtenemos :
Obtenemos el sistema:
Resolvamos el sistema. Transformamos la primera comparación en igualdad, que sustituimos en la segunda comparación:
Sustituimos lo que encontramos y obtenemos lo que buscamos :
Respuesta: . [ocho]
Si se conoce la expansión (2), entonces la complejidad del algoritmo es
, donde .Esto requiere un poco de memoria. [9]
En general, la complejidad del algoritmo también se puede estimar como
. [diez]Si, al procesar cada q i , se utilizan métodos acelerados (por ejemplo, el algoritmo de Shanks ), la puntuación general disminuirá a
.En estas estimaciones, se supone que las operaciones aritméticas módulo p se realizan en un solo paso. De hecho, este no es el caso; por ejemplo, la suma módulo p requiere operaciones elementales O (log p ). Pero dado que se realizan refinamientos similares para cualquier algoritmo, este factor a menudo se descarta.
Cuando los factores primos son pequeños, la complejidad del algoritmo se puede estimar como . [once]
El algoritmo tiene complejidad polinómica en general en el caso de que todos los factores primos no superen ,
donde son constantes positivas. [una]
Cierto para especies simples .
Si existe un factor primo tal que , donde . [una]
El algoritmo de Polig-Hellman es extremadamente eficiente cuando se descompone en pequeños factores primos. Es muy importante tener esto en cuenta al elegir los parámetros de los esquemas criptográficos. De lo contrario, el esquema no será confiable.
Para aplicar el algoritmo de Polig-Hellman, necesita conocer la factorización. En el caso general, el problema de factorización requiere bastante tiempo, pero si los divisores de un número son pequeños (en el sentido mencionado anteriormente), este número se puede factorizar rápidamente incluso mediante el método de división sucesiva. Así, en el caso de que el algoritmo de Polig-Hellman sea eficiente, la necesidad de factorización no complica el problema.