Los algoritmos de exponenciación de módulo rápido son un tipo de algoritmos de exponenciación de módulo que se utilizan ampliamente en varios criptosistemas para acelerar las operaciones computacionales con grandes números.
Que sea necesario calcular dónde los números son lo suficientemente grandes y que el módulo se descomponga en divisores primos . Luego, para un módulo de exponenciación rápido, puede usar el teorema del resto chino y resolver el sistema de ecuaciones (habiendo calculado previamente los residuos usando el teorema de Fermat, donde ):
Reemplazando con por conveniencia, resolvemos el sistema con respecto a y obtenemos .
EjemploQue sea necesario calcular
Representamos el sistema en la forma
Sustituyendo t de la primera ecuación en la segunda, obtenemos , luego , o , o ;
sustituyendo entonces t de la primera ecuación en la tercera, teniendo en cuenta la expresión para obtenemos o , entonces ;
entonces por lo tanto, ;
Se puede obtener una ganancia significativa de este algoritmo al realizar la multiplicación. La multiplicación se realizará el doble de rápido al usar este algoritmo.
Este método le permite reducir el número de cálculos en veces. Que sea un poco largo . Con la exponenciación habitual, tomará aproximadamente módulo de multiplicaciones. Digamos que queremos calcular . Reduciendo por y el problema se reduce a calcular . Cada grado en esta notación tiene una longitud de . Por lo tanto, cada operación de exponenciación requerirá operaciones. Total requerirá multiplicaciones módulo un número primo o en lugar del módulo de multiplicación original .
Que sea necesario calcular . Imagina el grado , donde
Pongámoslo en la forma:
A continuación, se calcula el valor de la expresión y se realiza la sustitución en la expresión transformada.
Esta operación se realiza hasta que se encuentra el resultado.
EjemploQue sea necesario calcular . Representemos el grado como . Representemos en la forma
Si - primo o es el producto de dos números primos grandes, generalmente se usa el método de elevar al cuadrado y multiplicar repetidamente. Sin embargo, si es compuesto, este método generalmente se usa junto con el teorema del resto chino.
La complejidad promedio de este algoritmo es igual a las operaciones de multiplicar números de dos bits más las operaciones de dividir números de bits por un número de bits. Para números de -bit y más largos, este algoritmo se realiza con bastante rapidez en una computadora.
Este método fue propuesto en 1985 por Peter Montgomery para acelerar la exponenciación modular.
En este método, cada número se asocia a una determinada imagen y todos los cálculos se realizan con , y al final se realiza la transición de la imagen al número.
Teorema (Montgomery). Sean coprimos enteros positivos, y . Entonces para cualquier número entero es divisible por , y . Además, si , entonces la diferencia es , o . |
Este teorema nos permite calcular de forma óptima el valor de unos convenientemente elegidos .
Definición 1. Para los números , , , tales que mcd y , llamamos al resto del número la cantidad . |
Definición 2. El producto de Montgomery de dos números enteros se llama el número |
Teorema (reglas de Montgomery). Sean los números , coprimos y . Entonces y |
Es decir, para mayor claridad, escribimos la expresión para exponenciación :
Algoritmo (Producto de Montgomery). Sean dados los números enteros , donde es impar, y . Este algoritmo devuelve . 1.[Función M Montgomery] { ; ; //De acuerdo con el teorema (Montgomery) . 2.[Resultado correcto] si ; volver ; } |
Algoritmo (método de exponenciación de Montgomery). Deje que los números , y se elijan de la misma manera que para el algoritmo (producto de Montgomery). Este algoritmo devuelve . Denotamos bits binarios por . 1.[Configuración inicial] ; //Usando algún método de división con resto. ; //Usando algún método de división con resto. 2.[Esquema de exponenciación] para { ; //usando el algoritmo(producto de Montgomery) . si ; } // Ahora es igual a . 3.[Final grado] ; |
Como resultado, obtenemos una imagen a partir de la cual podemos obtener el resultado final , y la expresión se calcula de antemano. Para el producto de dos números, el resultado se verá como
EjemploSea , y quiera multiplicar dos números y (es decir, el cuadrado)
tiene una imagen
(para comprobar tiene una imagen )
Multiplicamos las imágenes:
,
Hacemos la transición de la imagen de multiplicación a la preimagen deseada
,
,
En consecuencia, el prototipo
Este método tiene una ventaja de rendimiento sobre el método repetido de elevar al cuadrado y multiplicar, ya que la multiplicación módulo de dos números es mucho más rápida.
Este método te permite reducir (para valores grandes de ) el cálculo de la función a una multiplicación de dos números de tamaño . La complejidad de la multiplicación de Montgomery se estima como .
Para mayor claridad, considere el método para la base , es decir, realizaremos cálculos en - sistema numérico binario (o binario, ya que ). La base tiene una ventaja, ya que la operación de división por se desplaza hacia la derecha y la multiplicación por se desplaza hacia la izquierda.
Definición 1. La representación de un número entero no negativo en un sistema numérico con base (o notación -aria de un número ) es la secuencia más corta de números enteros , llamados los dígitos de la entrada, tal que cada uno de estos dígitos satisface la desigualdad , y la igualdad |
Por ejemplo, considere el algoritmo binario para tomar del producto .
Algoritmo (algoritmo binario para multiplicar y sacar el resto). Sean dados enteros positivos tales que , . Este algoritmo devuelve el resultado de una operación compuesta . Suponemos que la representación binaria del número se da según la definición 1 , por lo que los bits del número son de la forma , y es el bit más significativo. 1.[Configuración inicial] ; 2.[Convertir todos los bits] para { ; si ; si ; si ; } volver ; |
Este método tiene una desventaja: no aprovecha la aritmética de múltiples bits disponible en cualquier computadora moderna. Por ello, se suelen utilizar bases grandes .
Una expresión de la forma tiene una estimación de complejidad computacional: