¿Cuál es la complejidad del algoritmo criptográfico RSA?

Tres componentes principales del algoritmo RSA son la exponenciación, la inversión y la operación modular. La complejidad temporal del algoritmo depende en gran medida de la complejidad de los submódulos utilizados. Podemos tomar la libertad de realizar una adición modular en criptografía en [math] O (logn) [/ math] donde [math] n [/ math] es el número de dígitos en cualquier número en [math] \ mathbb {Z} [ /mates].

Ahora la multiplicación modular usando la técnica de cuadratura y multiplicación para obtener [math] m ^ e mod N [/ math] puede mostrarse como multiplicar los dígitos de m log e veces. Teniendo en cuenta la complejidad de la multiplicación [matemática] O (\ {logn \} ^ 2) [/ matemática], es decir, la adición repetida de dos números de bits logn cada uno, la complejidad de la exponenciación modular es aproximadamente [matemática] O (\ {logn \ } ^ 3) [/ matemáticas]

Usando Euclidean Extended GCD de (algoritmo Euclidean extendido), el inverso de un número se puede calcular en [matemática] O (\ {logn \} ^ 2) [/ matemática]

Por lo tanto, la complejidad de tiempo general del algoritmo de generación de claves será el algoritmo de cifrado y descifrado [matemático] O (N ^ 2) [/ matemático] usando la técnica de cuadratura y multiplicación será [matemático] O (N ^ 3): [/ matemático] Para N dígitos número de espacio.

Usando otros algoritmos exponenciales como el algoritmo de Karatsuba o el algoritmo de Fürer, la complejidad temporal del algoritmo de Schönhage-Strassen puede reducirse aún más durante el cifrado y descifrado. Y utilizando el tiempo de reducción de Barrett, la complejidad de la inversión también se puede reducir.

Espero que esto ayude. ¿Cómo deduzco la complejidad temporal del cifrado y descifrado basado en la aritmética modular?

More Interesting

¿Existen buenos libros o recursos para resolver problemas y algoritmos en C #, para la preparación de entrevistas SDET?

¿Cómo podemos calcular el factorial de los primeros N números naturales usando la metaprogramación de plantilla en C ++?

¿Cómo ordenar un millón de números en tiempo de registro usando la solución Norman Hardy?

¿Cuál es su estructura de datos favorita y por qué?

¿Cuáles son algunos ejemplos interesantes con algoritmos evolutivos que se pueden implementar en una tarde o menos?

Cómo crear un árbol binario de búsqueda binaria para los datos: 10, 8, 15, 7, 3, 6, 12, 5, 9,17

Cuando trato de entender una técnica como la memorización o lo que sea, me enfrento a muchos dolores y no lo entiendo de inmediato. Necesito intentarlo varias veces. ¿Es normal o debo obtener algoritmos y técnicas con al menos uno o 2 aciertos?

¿Cómo se implementan las tablas hash en el kernel de Linux? ¿Cómo funcionan para diferentes tipos de datos y estructuras?

¿Por qué algunos algoritmos son más eficientes que otros? ¿Por qué se prefiere la búsqueda binaria sobre la lineal?

¿Cómo debo codificar el algoritmo en Python?

¿Qué se entiende por 'profundidad' en DFS?

¿Aprender las estructuras de datos y las matemáticas será una "reinvención de la rueda"?

¿Cuál es la intuición de que la factorización no es NP completa?

¿Qué libros debería leer alguien para comprender completamente una introducción a los algoritmos? ¿Qué lo hará realmente entenderlo?

No puedo desempeñarme bien en los concursos de programación, incluso después de practicar mucho. ¿Qué debería hacer ahora? ¿Debo dejar de hacer programación competitiva?