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 se eleva a la e-ésima potencia, 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: c ≡ b e Por ejemplo, dado b = 5, e = 3, y m = 13, la solución, c = 8, es el resto de dividir 5 3 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:
- c ≡ b e ≡ d | e | donde e < 0 y b ⋅ d ≡ 1 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.
From Wikipedia, the free encyclopedia
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.
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, dados b = 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:
- Siendo = 1, = 0.
- Incrementar e' en 1.
- Calcular .
- 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.