fbpx
Wikipedia

Exponenciación modular

La exponenciación modular es un tipo de exponenciación realizada sobre un módulo. Es particularmente útil en ciencias de la computación, especialmente en el campo de la criptografía.

Una «exponenciación modular» calcula el residuo cuando un número entero positivo b (la base) se eleva a la e-ésima potencia (el exponente), be, y es dividido por el entero positivo m, llamado módulo. En notación matemática, dada la base b, el exponente e, y el módulo m, la exponenciación modular c se escribe:

Por ejemplo, dado b = 5, e = 3, y m = 13, la solución, c = 8, es el resto de dividir por 13.

Si b, e, y m no son negativos, y b < m, entonces una única solución c existe con la propiedad 0 ≤ c < m.

La exponenciación modular se puede realizar con exponente negativo e encontrando el inverso multiplicativo modular d de b módulo m usando el algoritmo extendido de Euclides. Esto es:

donde y

Problemas de exponenciación modular similares al descrito arriba son considerados fáciles de resolver, incluso cuando los números que se manejan son enormes.
Por otro lado, el cálculo del logaritmo discreto — es decir, la tarea de encontrar el exponente e si es dado un b, c, y m — es un problema de los considerados difíciles. Este comportamiento de función unidireccional hace a la exponenciación modular un candidato para su uso en algoritmos criptográficos.

Método directo

Es conveniente encontrar un método más allanado para calcular la exponenciación modular dado el peso de cómputo del directo.
Por ejemplo, para obtener c, dadosb = 4, e = 13 y m = 497, para abordar la operación de : , se puede calcular en primer lugar de be' y luego su módulo m.
Se puede apelar a la calculadora para obtener 67 108 864 como resultado de 413:
y luego el módulo 497 de este valor para determinar que c es 445.

En este caso, con un valor de apenas un dígito para b y solo dos para e, son 8 los de be - es decir, para 413-.
En aplicaciones habituales de la criptografía, b puede presentar al menos 256 dígitos binarios (y 77 decimales). Consideremos b = 5×1076 y e = 17,, valores todos perfectamente razonables. En este caso, con b de 77 dígitos y e de 17, son 1304 los de be.
Dada la capacidad de cómputo actual este recorrido es viable pero ralentiza tanto la operatoria que lo conveniente es apelar una modalidad que ofrezca mejores condiciones de seguridad para llegar al valor de be aunque aumenten los b y e (el cálculo de la exponenciación como serie de multiplicaciones requiere un tiempo acorde a O(e)).

Método con menor requerimiento de memoria

Un método alternativo para calcular la exponenciación modular con menor requerimiento de memoria, resulta de apelar a un algoritmo más rápido:

Tal algoritmo apela a que, dados dos enteros b y c, las relaciones preliminares implican que:

 
 
 

El algoritmo es el siguiente:

  1. Siendo   = 1,   = 0.
  2. Incrementar e' en 1.
  3. Calcular  .
  4. Si e' < e, pasar al paso 2. Si no,   contiene la solución correcta de  .

Cabe señalar que en cada ciclo por el paso 3, la ecuación   resulta verdadera. Cuando se ejecuta e veces el paso 3, c deviene la respuesta buscada.

Repasemos el ejemplo b = 4, e = 13, y m = 497. El algoritmo cicla 13 veces por el paso 3:

  • e' = 1. c = (4 x 1) (mod 497) = 4 (mod 497) = 4.
  • e' = 2. c = (4 x 4) (mod 497) = 16 (mod 497) = 16.
  • e' = 3. c = (4 x 16) (mod 497) = 64 (mod 497) = 64.
  • e' = 4. c = (4 x 64) (mod 497) = 256 (mod 497) = 256.
  • e' = 5. c = (4 x 256) (mod 497) = 1024 (mod 497) = 30.
  • e' = 6. c = (4 x 30) (mod 497) = 120 (mod 497) = 120.
  • e' = 7. c = (4 x 120) (mod 497) = 480 (mod 497) = 480.
  • e' = 8. c = (4 x 480) (mod 497) = 1920 (mod 497) = 429.
  • e' = 9. c = (4 x 429) (mod 497) = 1716 (mod 497) = 225.
  • e' = 10. c = (4 x 225) (mod 497) = 900 (mod 497) = 403.
  • e' = 11. c = (4 x 403) (mod 497) = 1612 (mod 497) = 121.
  • e' = 12. c = (4 x 121) (mod 497) = 484 (mod 497) = 484.
  • e' = 13. c = (4 x 484) (mod 497) = 1936 (mod 497) = 445.

La respuesta final para c es, en consecuencia, 445, como en el primer método.

Como el primer método, éste requiere un tiempo de cálculo según O(e). Sin embargo, como el los números en juego en este cálculo son menores que aquellos con los que se opera en el primer algoritmo, también lo es el factor constante involucrado.

El método más eficaz

Un tercer método, combinación del precedente con un principio más general denominado exponenciación binaria (o exponenciación rápida o por cuadrados).

Ante todo, se debe convertir el exponente e a notación binaria, es decir, anotado como:

 

En esta notación, la longitud de e es de n bits. ai puede tomar el valor 0 o 1 para todo i tal que 0 ≤ i < n - 1. Por definición, an - 1 = 1.

El valor be puede escribirse, entonces como:

 

La solución c es, por ende:

 

Tal algoritmo se puede implementar fácilmente en un lenguaje de programación adecuado. El siguiente ejemplo se elabora en C#. La clase Bignum representa a cualquier número positivo grande. Las variables de entrada son base para la base (b), exp para el exponente (e) y m para el módulo.

Bignum modpow(Bignum base, Bignum exp, Bignum m) { Bignum result = 1; while (exp > 0) { if ((exp & 1) > 0) result = (result * base) % m; exp >>= 1; base = (base * base) % m; } return result; } 

Este código, adaptación del que aparece en la página 244 de Applied Cryptography de Bruce Schneier, ISBN 0471117099, apela a un bucle simple while para ejecutar todo el trabajo de cálculo necesario para la exponenciación modular.

En la primera entrada al bucle, la variable base equivale a b. Sin embargo, la repetida elevación al cuadrado 13 veces repetida asegura que la variable base resulte  , donde i es el número de iteraciones del bucle.

La primera línea de código efectúa simplemente la multiplicación  . Si ai vale cero, el código no se ejecuta, lo que equivale a multiplicar el total por uno. Si, en cambio, ai vale uno, el resultado es simplemente multiplicar por la variable base (que contiene el valor   de la base original).

Para finalizar, controlemos el ejemplo correspondiente a b = 4, e = 13 y m = 497. En binario, e es 1101 y como su longitud es de 4 bits, el bucle se ejecuta cuatro veces:

  • En la primera entrada al bucle, los valores de las variables son: base = 4, exp = 1101 (binaire) y result = 1. Como el bit más a la derecha de exp es 1, result es reemplazado por (1 × 4) % 497, es decir 4. exp deviene 110 (binario) y base elevado al cuadrado por el valor (4 × 4) % 497, es decir, 16.
  • En la segunda ejecución del bucle, el bit más a la derecha de exp es 0, result no se modifica. exp se trunca a la derecha y deviene 11 (binario) y base se eleva al cuadrado y pasa a valer (16 × 16) % 497, es decir, 256.
  • En la tercera ejecución del bucle, el bit más a la derecha de exp es 1, result es remplazado por (4 × 256) % 497, es decir, 30. exp se trunca a la derecha y deviene 1 y base es elevado al cuadrado y pasa a valer (256 × 256) % 497, es decir 429.
  • En la cuarta ejecución del bucle, el bit más a la derecha de exp es 1, result es remplazado por (30 × 429) % 497, es decir, 445. exp se trunca a la derecha y deviene 0 y base es elevado al cuadrado y pasa a valer (429 × 429) % 497, es decir 151. (Esta última multiplicación base * base es irrelevante porque el resultado buscado, aquí 445, ya es conocido.)

El bucle termina, entonces, cuando exp es igual a cero y el resultado445, lo que concuerda con los dos algoritmos precedentes.

Los tiempos de ejecución de este algoritmo resultan acorde a O(log e). Incluso cuando opera con grandes valores de e, es rápido en comparación con cada uno de los anteriores.

Referencias

Schneier, Bruce (1996). Applied Cryptography: Protocols, Algorithms, and Source Code in C, Second Edition (2nd edición). Wiley. ISBN 978-0-471-11709-4. 

Enlaces externos

  •   Wikilibros alberga un libro o manual sobre Implementaciones de la exponenciación modular.
  • Fast Modular Exponentiation Java Applet - University of Minnesota Math Department
  • Algorithm for modular exponentiation en PlanetMath.
  •   Datos: Q1228841

exponenciación, modular, exponenciación, modular, tipo, exponenciación, realizada, sobre, módulo, particularmente, útil, ciencias, computación, especialmente, campo, criptografía, exponenciación, modular, calcula, residuo, cuando, número, entero, positivo, bas. La exponenciacion modular es un tipo de exponenciacion realizada sobre un modulo Es particularmente util en ciencias de la computacion especialmente en el campo de la criptografia Una exponenciacion modular calcula el residuo cuando un numero entero positivo b la base se eleva a la e esima potencia el exponente be y es dividido por el entero positivo m llamado modulo En notacion matematica dada la base b el exponente e y el modulo m la exponenciacion modular c se escribe c b e mod m displaystyle c equiv b e pmod m Por ejemplo dado b 5 e 3 y m 13 la solucion c 8 es el resto de dividir 5 3 displaystyle 5 3 por 13 Si b e y m no son negativos y b lt m entonces una unica solucion c existe con la propiedad 0 c lt m La exponenciacion modular se puede realizar con exponente negativo e encontrando el inverso multiplicativo modular d de b modulo m usando el algoritmo extendido de Euclides Esto es c b e d e mod m displaystyle c equiv b e equiv d left e right pmod m donde e lt 0 displaystyle e lt 0 y b d 1 mod m displaystyle b cdot d equiv 1 pmod m Problemas de exponenciacion modular similares al descrito arriba son considerados faciles de resolver incluso cuando los numeros que se manejan son enormes Por otro lado el calculo del logaritmo discreto es decir la tarea de encontrar el exponente e si es dado un b c y m es un problema de los considerados dificiles Este comportamiento de funcion unidireccional hace a la exponenciacion modular un candidato para su uso en algoritmos criptograficos Indice 1 Metodo directo 2 Metodo con menor requerimiento de memoria 3 El metodo mas eficaz 4 Referencias 5 Enlaces externosMetodo directo EditarEs conveniente encontrar un metodo mas allanado para calcular la exponenciacion modular dado el peso de computo del directo Por ejemplo para obtener c dadosb 4 e 13 y m 497 para abordar la operacion de c 4 13 mod 497 displaystyle c equiv 4 13 pmod 497 se puede calcular en primer lugar de be y luego su modulom Se puede apelar a la calculadora para obtener 67 108 864 como resultado de 413 y luego el modulo 497 de este valor para determinar que c es 445 En este caso con un valor de apenas un digito para b y solo dos para e son 8 los de be es decir para 413 En aplicaciones habituales de la criptografia b puede presentar al menos 256 digitos binarios y 77 decimales Consideremos b 5 1076 y e 17 valores todos perfectamente razonables En este caso con b de 77 digitos y e de 17 son 1304 los de be Dada la capacidad de computo actual este recorrido es viable pero ralentiza tanto la operatoria que lo conveniente es apelar una modalidad que ofrezca mejores condiciones de seguridad para llegar al valor de be aunque aumenten los b y e el calculo de la exponenciacion como serie de multiplicaciones requiere un tiempo acorde a O e Metodo con menor requerimiento de memoria EditarUn metodo alternativo para calcular la exponenciacion modular con menor requerimiento de memoria resulta de apelar a un algoritmo mas rapido Tal algoritmo apela a que dados dos enteros b y c las relaciones preliminares implican que b b mod m y c c mod m displaystyle b prime equiv b pmod m rm y c prime equiv c pmod m b c mod m b c mod m displaystyle b prime c pmod m equiv bc pmod m b c mod m b c mod m displaystyle bc prime pmod m equiv bc pmod m El algoritmo es el siguiente Siendo c displaystyle c prime 1 e displaystyle e prime 0 Incrementar e en 1 Calcular c b c mod m displaystyle c prime equiv b cdot c prime pmod m Si e lt e pasar al paso 2 Si no c displaystyle c prime contiene la solucion correcta de c b e mod m displaystyle c equiv b e pmod m Cabe senalar que en cada ciclo por el paso 3 la ecuacion c b e mod m displaystyle c equiv b e pmod m resulta verdadera Cuando se ejecuta e veces el paso 3 c deviene la respuesta buscada Repasemos el ejemplo b 4 e 13 y m 497 El algoritmo cicla 13 veces por el paso 3 e 1 c 4 x 1 mod 497 4 mod 497 4 e 2 c 4 x 4 mod 497 16 mod 497 16 e 3 c 4 x 16 mod 497 64 mod 497 64 e 4 c 4 x 64 mod 497 256 mod 497 256 e 5 c 4 x 256 mod 497 1024 mod 497 30 e 6 c 4 x 30 mod 497 120 mod 497 120 e 7 c 4 x 120 mod 497 480 mod 497 480 e 8 c 4 x 480 mod 497 1920 mod 497 429 e 9 c 4 x 429 mod 497 1716 mod 497 225 e 10 c 4 x 225 mod 497 900 mod 497 403 e 11 c 4 x 403 mod 497 1612 mod 497 121 e 12 c 4 x 121 mod 497 484 mod 497 484 e 13 c 4 x 484 mod 497 1936 mod 497 445 La respuesta final para c es en consecuencia 445 como en el primer metodo Como el primer metodo este requiere un tiempo de calculo segun O e Sin embargo como el los numeros en juego en este calculo son menores que aquellos con los que se opera en el primer algoritmo tambien lo es el factor constante involucrado El metodo mas eficaz EditarUn tercer metodo combinacion del precedente con un principio mas general denominado exponenciacion binaria o exponenciacion rapida o por cuadrados Ante todo se debe convertir el exponente e a notacion binaria es decir anotado como e i 0 n 1 a i 2 i displaystyle e sum i 0 n 1 a i 2 i En esta notacion la longitud de e es de n bits ai puede tomar el valor 0 o 1 para todo i tal que 0 i lt n 1 Por definicion an 1 1 El valor be puede escribirse entonces como b e b i 0 n 1 a i 2 i i 0 n 1 b 2 i a i displaystyle b e b left sum i 0 n 1 a i 2 i right prod i 0 n 1 left b 2 i right a i La solucion c es por ende c i 0 n 1 b 2 i a i mod m displaystyle c equiv prod i 0 n 1 left b 2 i right a i pmod m Tal algoritmo se puede implementar facilmente en un lenguaje de programacion adecuado El siguiente ejemplo se elabora en C La clase Bignum representa a cualquier numero positivo grande Las variables de entrada son base para la base b exp para el exponente e y m para el modulo Bignum modpow Bignum base Bignum exp Bignum m Bignum result 1 while exp gt 0 if exp amp 1 gt 0 result result base m exp gt gt 1 base base base m return result Este codigo adaptacion del que aparece en la pagina 244 de Applied Cryptography de Bruce Schneier ISBN 0471117099 apela a un bucle simple while para ejecutar todo el trabajo de calculo necesario para la exponenciacion modular En la primera entrada al bucle la variable base equivale a b Sin embargo la repetida elevacion al cuadrado 13 veces repetida asegura que la variable base resulte b 2 i mod m displaystyle b 2 i pmod m donde i es el numero de iteraciones del bucle La primera linea de codigo efectua simplemente la multiplicacion i 0 n 1 b 2 i a i mod m displaystyle prod i 0 n 1 left b 2 i right a i pmod m Si ai vale cero el codigo no se ejecuta lo que equivale a multiplicar el total por uno Si en cambio ai vale uno el resultado es simplemente multiplicar por la variable base que contiene el valor b 2 i mod m displaystyle b 2 i pmod m de la base original Para finalizar controlemos el ejemplo correspondiente a b 4 e 13 y m 497 En binario e es 1101 y como su longitud es de 4 bits el bucle se ejecuta cuatro veces En la primera entrada al bucle los valores de las variables son base 4 exp 1101 binaire y result 1 Como el bit mas a la derecha de exp es 1 result es reemplazado por 1 4 497 es decir 4 exp deviene 110 binario y base elevado al cuadrado por el valor 4 4 497 es decir 16 En la segunda ejecucion del bucle el bit mas a la derecha de exp es 0 result no se modifica exp se trunca a la derecha y deviene 11 binario y base se eleva al cuadrado y pasa a valer 16 16 497 es decir 256 En la tercera ejecucion del bucle el bit mas a la derecha de exp es 1 result es remplazado por 4 256 497 es decir 30 exp se trunca a la derecha y deviene 1 y base es elevado al cuadrado y pasa a valer 256 256 497 es decir 429 En la cuarta ejecucion del bucle el bit mas a la derecha de exp es 1 result es remplazado por 30 429 497 es decir 445 exp se trunca a la derecha y deviene 0 y base es elevado al cuadrado y pasa a valer 429 429 497 es decir 151 Esta ultima multiplicacion base base es irrelevante porque el resultado buscado aqui 445 ya es conocido El bucle termina entonces cuando exp es igual a cero y el resultado445 lo que concuerda con los dos algoritmos precedentes Los tiempos de ejecucion de este algoritmo resultan acorde a O log e Incluso cuando opera con grandes valores de e es rapido en comparacion con cada uno de los anteriores Referencias EditarSchneier Bruce 1996 Applied Cryptography Protocols Algorithms and Source Code in C Second Edition 2nd edicion Wiley ISBN 978 0 471 11709 4 Enlaces externos Editar Wikilibros alberga un libro o manual sobre Implementaciones de la exponenciacion modular Fast Modular Exponentiation Java Applet University of Minnesota Math Department Algorithm for modular exponentiation en PlanetMath Datos Q1228841 Obtenido de https es wikipedia org w index php title Exponenciacion modular amp oldid 136367851, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos