I
FACULTAD DE INGENIERÍA
ESCUELA ACADÉMICO PROFESIONAL DE INGENIERÍA INFORMATICA Y
SISTEMAS
ALGORITMO RSA
ASIGNATURA: Matemática discreta II
DOCENTE: Ing. Elvio Tintaya Zegarra
INTEGRANTES: Hans Andre Perez Sequeiros, Jeancarlos David Barauna Lucana,
Rildo Ccañahua Camargo
ABANCAY-APURIMAC
2025
II
Contenido
Introducción ........................................................................................................................ 4
Criptografía y Seguridad Informática Definición de Polimorfismo ................................... 6
Concepto de Criptografía ................................................................................................ 6
Evolución Histórica de la Criptografía ........................................................................... 7
Tipos de Criptografía ...................................................................................................... 8
Criptografía Simétrica ................................................................................................. 8
Criptografía Asimétrica ............................................................................................... 9
El Algoritmo RSA ............................................................................................................. 11
Origen y Creadores ....................................................................................................... 11
Fundamento Matemático .............................................................................................. 11
Proceso del Algoritmo RSA .......................................................................................... 12
Aplicaciones del Algoritmo RSA...................................................................................... 14
Seguridad en Internet .................................................................................................... 14
Comercio Electrónico y Banca en Línea ...................................................................... 14
Firmas Digitales ............................................................................................................ 15
Correos Electrónicos y Mensajería ............................................................................... 15
Ventajas y Desventajas del Algoritmo RSA...................................................................... 16
Ventajas ......................................................................................................................... 16
III
Desventajas ................................................................................................................... 17
Avances y Retos Actuales ................................................................................................. 18
Tamaños de Clave Recomendados ................................................................................ 19
Vulnerabilidades Potenciales ........................................................................................ 19
RSA vs Otros Algoritmos.............................................................................................. 20
Implementación Práctica en Python.................................................................................. 21
Parte Práctica del Algoritmo RSA .................................................................................... 32
Conclusiones ..................................................................................................................... 35
Bibliografia ....................................................................................................................... 36
4
Introducción
En la actualidad, la sociedad se encuentra inmersa en un mundo digital interconectado en
el que la información se ha convertido en un recurso de gran valor. Millones de datos personales,
financieros, empresariales y gubernamentales circulan a diario a través de redes locales e
internacionales, lo que incrementa los riesgos de robo, manipulación o pérdida de información.
Frente a esta realidad, surge la necesidad de aplicar mecanismos que garanticen la seguridad,
confidencialidad e integridad de los datos.
La criptografía es una de las herramientas más importantes dentro de la seguridad
informática, ya que permite proteger la información mediante procesos matemáticos que la
transforman en datos ilegibles para usuarios no autorizados. Esta disciplina, que se remonta a la
antigüedad con técnicas de cifrado simples como el “cifrado César”, ha evolucionado
significativamente con el avance de la informática y las telecomunicaciones, dando lugar a
algoritmos modernos capaces de enfrentar las amenazas actuales.
Entre los sistemas criptográficos más influyentes se encuentra el algoritmo RSA,
desarrollado en 1977 por Ronald Rivest, Adi Shamir y Leonard Adleman. Este algoritmo introdujo
el concepto práctico de criptografía asimétrica, basada en un par de claves —una pública y otra
privada—, lo que permitió un avance fundamental en el intercambio seguro de información. Su
importancia radica en que brinda soluciones a problemas que los métodos simétricos no podían
resolver, como la distribución segura de claves y la verificación de autenticidad mediante firmas
digitales.
El presente trabajo tiene como propósito analizar de manera detallada los fundamentos
teóricos de la criptografía, explicar el origen y el funcionamiento matemático del algoritmo RSA,
5
y describir sus principales aplicaciones en la vida cotidiana, así como las ventajas, limitaciones y
retos que enfrenta frente a las nuevas tecnologías emergentes, especialmente la computación
cuántica. De esta manera, se busca comprender no solo la relevancia de este algoritmo en la
seguridad digital contemporánea, sino también su papel en la construcción de un futuro más seguro
en el ámbito de las comunicaciones electrónicas.
6
Criptografía y Seguridad Informática Definición de Polimorfismo
La criptografía constituye un pilar fundamental dentro de la seguridad informática, al ser
una disciplina que busca resguardar la información frente a accesos no autorizados. En un contexto
donde el uso de internet y las comunicaciones digitales son parte de la vida cotidiana, la protección
de los datos resulta esencial para mantener la confianza en transacciones financieras,
comunicaciones personales y procesos gubernamentales. Según Stallings (2017), la criptografía
puede considerarse tanto un arte como una ciencia, pues combina aspectos históricos con
fundamentos matemáticos avanzados.
En la actualidad, la criptografía no solo se utiliza para el cifrado de mensajes, sino también
para garantizar otros principios de seguridad informática, como la autenticidad, la integridad y el
no repudio, lo que la convierte en una herramienta indispensable en la era digital.
Concepto de Criptografía
La criptografía puede definirse como la ciencia que estudia las técnicas para transformar
un mensaje o dato original en una representación ilegible para todo aquel que no posea la clave
adecuada para descifrarlo. Esta definición resalta su papel como mecanismo de protección de la
información frente a posibles ataques o accesos indebidos (Menezes, van Oorschot, & Vanstone,
1996).
Entre sus objetivos principales se encuentran:
• Confidencialidad: asegurar que la información solo sea accesible por las partes
autorizadas.
• Integridad: garantizar que los datos no sean modificados durante la transmisión o
almacenamiento.
7
• Autenticidad: verificar la identidad de los emisores y receptores de un mensaje.
• No repudio: impedir que una de las partes niegue haber enviado o recibido un
mensaje (Katz & Lindell, 2020).
Evolución Histórica de la Criptografía
La criptografía no es una disciplina nueva, sino que ha acompañado a la humanidad a lo
largo de su historia. Su evolución refleja la necesidad constante de proteger la información en
contextos militares, políticos y comerciales.
• Antigüedad: El cifrado César, atribuido a Julio César, es uno de los primeros
ejemplos documentados de criptografía. Consistía en desplazar las letras del
alfabeto un número fijo de posiciones, generando un mensaje incomprensible para
quienes no conocieran la regla (Schneier, 2015).
• Edad Media: Durante este periodo se usaron técnicas como la escítala espartana, un
método de cifrado que consistía en enrollar una tira de pergamino sobre un cilindro
para escribir el mensaje y solo se podía leer correctamente al colocarlo en otro
cilindro del mismo diámetro. Asimismo, la diplomacia y las guerras impulsaron el
uso de cifrados manuales más sofisticados.
• Siglo XX: La criptografía alcanzó un papel crucial durante la Segunda Guerra
Mundial, con el uso de la máquina Enigma por parte de la Alemania nazi. Este
dispositivo mecánico-electrónico permitía generar mensajes cifrados
extremadamente complejos para la época. Sin embargo, el trabajo de Alan Turing
y su equipo en Bletchley Park permitió descifrar Enigma, lo que fue determinante
en el desenlace del conflicto (Stallings, 2017).
8
• Época moderna: Con el desarrollo de la informática y la teoría de la información,
la criptografía comenzó a fundamentarse en algoritmos matemáticos complejos.
Entre los más importantes se encuentran el DES (Data Encryption Standard),
utilizado desde los años 70; el AES (Advanced Encryption Standard), que lo
reemplazó en 2001 por su mayor seguridad; y el RSA (Rivest-Shamir-Adleman),
que introdujo la criptografía asimétrica basada en la dificultad de factorizar
números grandes (Rivest, Shamir & Adleman, 1978).
Tipos de Criptografía
A lo largo de su evolución, la criptografía se ha desarrollado en torno a dos grandes
enfoques: la criptografía simétrica y la criptografía asimétrica. Ambas comparten el objetivo
de proteger la información, pero se diferencian en la manera en que gestionan las claves de cifrado
y descifrado.
Criptografía Simétrica
La criptografía simétrica, también llamada de clave secreta, se caracteriza por el uso de
una misma clave tanto para el proceso de cifrado como para el de descifrado. Es decir, el remitente
y el receptor deben poseer la misma clave para comunicarse de manera segura. Matemáticamente,
si CCC es el texto cifrado, PPP el texto plano y KKK la clave, se cumple:
donde EEE es la función de cifrado y DDD la función de descifrado (Stallings, 2017).
9
Ejemplos de algoritmos simétricos:
• DES (Data Encryption Standard): usado ampliamente desde 1977, aunque hoy
considerado inseguro por el tamaño reducido de su clave (56 bits).
• 3DES (Triple DES): mejora de DES, aplicando el cifrado tres veces para aumentar
la seguridad.
• AES (Advanced Encryption Standard): adoptado como estándar por el NIST en
2001. Actualmente es el algoritmo simétrico más utilizado en aplicaciones como
banca en línea, VPN y redes inalámbricas (Katz & Lindell, 2020).
Ventajas:
• Alta velocidad y eficiencia en el procesamiento de datos.
• Ideal para cifrar grandes volúmenes de información.
Desventajas:
• Requiere que las partes intercambien la clave secreta de manera segura antes de
comunicarse, lo que representa un riesgo si un atacante logra interceptarla (Menezes, van
Oorschot & Vanstone, 1996).
Criptografía Asimétrica
La criptografía asimétrica, también llamada de clave pública, se diferencia de la
simétrica en que utiliza un par de claves diferentes, pero matemáticamente relacionadas:
• Clave pública: utilizada para cifrar los mensajes.
• Clave privada: utilizada para descifrar los mensajes.
10
De este modo, una persona puede compartir libremente su clave pública sin comprometer
la seguridad, mientras mantiene en secreto su clave privada. Matemáticamente, si PPP es el texto
plano, CCC el texto cifrado, KpubK_{pub}Kpub la clave pública y KprivK_{priv}Kpriv la clave
privada, se cumple:
El ejemplo más conocido de criptografía asimétrica es el algoritmo RSA, desarrollado en
1977. Su seguridad se basa en la dificultad de factorizar números enteros grandes, lo que lo hace
altamente confiable para comunicaciones seguras y firmas digitales (Rivest, Shamir & Adleman,
1978).
Ventajas:
• No requiere compartir previamente una clave secreta.
• Permite implementar firmas digitales, garantizando autenticidad y no repudio.
Desventajas:
• Es más lento que los algoritmos simétricos debido a su complejidad matemática.
• No resulta práctico para cifrar grandes cantidades de información, por lo que suele
combinarse con criptografía simétrica en protocolos híbridos como SSL/TLS (Schneier,
2015).
11
El Algoritmo RSA
Origen y Creadores
El algoritmo RSA fue desarrollado en 1977 por Ronald Rivest, Adi Shamir y Leonard
Adleman, tres investigadores del Instituto Tecnológico de Massachusetts (MIT). Su nombre
proviene de las iniciales de sus apellidos: R, S y A. La publicación de este método en 1978 supuso
un hito en la historia de la criptografía, pues se trataba del primer sistema práctico de criptografía
asimétrica de clave pública.
Antes de RSA, la mayoría de los sistemas de seguridad se basaban en criptografía
simétrica, que requería compartir una misma clave entre el emisor y el receptor. Esto generaba
problemas en la distribución de claves, sobre todo cuando se trataba de comunicaciones en redes
abiertas. RSA resolvió esta dificultad al introducir un esquema en el que la clave de cifrado podía
hacerse pública sin comprometer la seguridad del sistema (Rivest, Shamir & Adleman, 1978).
Este avance permitió desarrollar aplicaciones como la firma digital, el intercambio
seguro de información y la autenticación de identidades, sentando las bases de la seguridad en
internet tal como la conocemos hoy. De hecho, tecnologías modernas como TLS/SSL, utilizadas
en navegadores web para conexiones seguras, están fuertemente apoyadas en RSA.
Fundamento Matemático
El RSA se fundamenta en la teoría de números, particularmente en la dificultad de
factorizar números enteros muy grandes. La base es el producto de dos primos grandes ppp y qqq.
Aunque es sencillo multiplicarlos para obtener n=p×qn = p \times qn=p×q, es extremadamente
complejo hacer el proceso inverso: factorizar nnn para encontrar ppp y qqq.
12
Este problema, conocido como factorización entera, es considerado de alta complejidad
computacional. Mientras que los ordenadores pueden multiplicar primos de cientos o miles de
dígitos en segundos, factorizar el resultado puede llevar años o incluso siglos con los algoritmos
actuales, dependiendo del tamaño de los números (Stinson & Paterson, 2019).
Además, el algoritmo utiliza la función totiente de Euler φ(n)\varphi(n)φ(n), definida
como:
Esta función es crucial para la generación de claves, pues permite calcular el exponente
privado ddd, que es el inverso modular de eee.
La seguridad de RSA no depende de ocultar el algoritmo, sino de la imposibilidad práctica
de factorizar nnn cuando este tiene cientos o miles de bits. Por ejemplo, hoy en día se recomienda
que nnn tenga al menos 2048 bits para resistir los intentos de factorización con los ordenadores
más potentes.
Proceso del Algoritmo RSA
El funcionamiento de RSA se puede dividir en tres fases principales: generación de claves,
cifrado y descifrado.
a) Generación de Claves
1. Se eligen dos números primos grandes ppp y qqq.
2. Se calcula n=p×qn = p \times qn=p×q, el módulo que se usará en todas las operaciones.
3. Se obtiene φ(n)=(p−1)(q−1)\varphi(n) = (p-1)(q-1)φ(n)=(p−1)(q−1).
13
4. Se selecciona un número eee tal que 1<e<φ(n)1 < e < \varphi(n)1<e<φ(n) y que sea
coprimo con φ(n)\varphi(n)φ(n).
5. Se calcula ddd, el inverso modular de eee respecto de φ(n)\varphi(n)φ(n), es decir:
• Clave pública: (e,n)(e, n)(e,n)
• Clave privada: (d,n)(d, n)(d,n)
b) Cifrado
El remitente convierte un mensaje MMM en un número (usando codificación ASCII, por ejemplo)
y calcula:
Este resultado CCC es el texto cifrado.
c) Descifrado
El receptor, usando su clave privada, aplica:
14
Aplicaciones del Algoritmo RSA
Seguridad en Internet
El algoritmo RSA constituye uno de los pilares fundamentales en la seguridad de la red. Se
utiliza en protocolos de comunicación segura como HTTPS (Hypertext Transfer Protocol Secure)
y SSL/TLS (Secure Sockets Layer / Transport Layer Security). Estos protocolos permiten
establecer un canal cifrado entre el cliente (navegador web) y el servidor, garantizando que la
información transmitida, como contraseñas, formularios o datos personales, no pueda ser
interceptada ni modificada por atacantes (Stallings, 2017).
En este proceso, RSA asegura el intercambio de claves necesario para iniciar una sesión
segura, ya que gracias al sistema de clave pública, el usuario no necesita compartir previamente
una clave secreta. De esta manera, el cifrado inicial permite establecer una comunicación
confidencial sobre redes públicas como Internet (Katz & Lindell, 2020).
Comercio Electrónico y Banca en Línea
En el comercio electrónico y en la banca digital, el algoritmo RSA juega un rol crucial al
proteger datos altamente sensibles. Durante las transacciones bancarias en línea, RSA asegura
información como números de tarjetas de crédito, contraseñas, credenciales de acceso o códigos
de verificación.
Por ejemplo, cuando un cliente introduce los datos de su tarjeta en una plataforma de pago,
estos se cifran mediante la clave pública del servidor. Solo el banco, con su clave privada, puede
descifrar y procesar dicha información, garantizando la confidencialidad y reduciendo el riesgo de
fraude o robo de datos (William & Stallings, 2018).
15
Asimismo, los sistemas de banca en línea utilizan RSA dentro de protocolos como 3D
Secure y otras soluciones de autenticación avanzada para reforzar la seguridad en transferencias
internacionales y pagos en tiempo real.
Firmas Digitales
Una de las aplicaciones más relevantes del algoritmo RSA es la generación de firmas
digitales. A diferencia del cifrado clásico, donde se busca proteger la confidencialidad de la
información, las firmas digitales se enfocan en garantizar la autenticidad, integridad y no repudio.
El proceso funciona de la siguiente manera: el remitente aplica su clave privada sobre un
resumen (hash) del mensaje, generando una firma digital única. El receptor, a su vez, verifica dicha
firma usando la clave pública del emisor. Si la firma es válida, se confirma que el mensaje no ha
sido alterado y que proviene realmente de quien dice enviarlo (Menezes, van Oorschot & Vanstone,
2018).
Este mecanismo se utiliza en múltiples escenarios, como la validación de certificados
digitales, documentos electrónicos con validez legal y contratos en línea, siendo uno de los pilares
de la confianza digital en la actualidad.
Correos Electrónicos y Mensajería
Los sistemas de mensajería y correos electrónicos también emplean RSA como parte de
sus mecanismos de seguridad. Protocolos como PGP (Pretty Good Privacy) y su evolución GPG
(GNU Privacy Guard) utilizan el cifrado asimétrico para garantizar que solo los destinatarios
autorizados puedan leer un mensaje.
En este contexto, el remitente cifra el mensaje utilizando la clave pública del receptor, lo
que asegura que únicamente la clave privada de este último pueda descifrarlo. Además, pueden
16
emplearse firmas digitales basadas en RSA para confirmar la identidad del emisor y la integridad
del mensaje (Schneier, 2015).
De esta forma, RSA protege la privacidad en la comunicación digital, evitando la
interceptación, manipulación o suplantación de identidad en los correos electrónicos, lo que resulta
esencial en un mundo cada vez más interconectado.
Ventajas y Desventajas del Algoritmo RSA
Ventajas
a) Seguridad robusta basada en un problema matemático difícil
La principal fortaleza de RSA radica en la factorización de enteros grandes, un problema
considerado computacionalmente intratable con los recursos actuales. El algoritmo se fundamenta
en la dificultad de descomponer un número compuesto de cientos o miles de bits en sus factores
primos, lo que hace prácticamente imposible romper la clave por fuerza bruta (Katz & Lindell,
2020). Esta característica lo convierte en uno de los algoritmos más seguros y confiables en el
ámbito de la criptografía moderna.
b) Posibilidad de usarlo tanto para cifrado como para firmas digitales
A diferencia de otros métodos criptográficos, RSA es versátil, ya que puede emplearse
tanto en la confidencialidad de datos (cifrado) como en la autenticidad e integridad (firmas
digitales). En el cifrado, asegura que la información solo pueda ser leída por el receptor autorizado;
en las firmas digitales, permite verificar el origen y la integridad de los mensajes. Esta doble
17
funcionalidad ha convertido a RSA en un estándar ampliamente adoptado en protocolos de
seguridad como SSL/TLS, HTTPS y PGP (Stallings, 2017).
c) No requiere el intercambio previo de una clave secreta
En los algoritmos simétricos, ambas partes deben compartir de manera segura una clave
secreta antes de iniciar la comunicación, lo que representa un desafío logístico y de seguridad.
RSA soluciona este problema mediante el uso de un par de claves asimétricas (pública y privada).
Cualquier persona puede usar la clave pública para cifrar, mientras que solo el poseedor de la clave
privada puede descifrar. Esto elimina la necesidad de transmitir claves secretas por canales
inseguros, facilitando la seguridad en comunicaciones abiertas como Internet (Menezes, van
Oorschot & Vanstone, 2018).
Desventajas
a) Es más lento que los algoritmos simétricos
Una de las limitaciones más notables de RSA es su bajo rendimiento en comparación con
algoritmos simétricos como AES (Advanced Encryption Standard). RSA requiere operaciones
matemáticas muy complejas con números de gran tamaño, lo que incrementa el tiempo de
procesamiento. Por este motivo, en la práctica se suele utilizar RSA solo para intercambio de claves
y luego emplear algoritmos simétricos más rápidos para cifrar grandes volúmenes de datos
(Schneier, 2015).
b) Puede ser vulnerable si se usan primos pequeños o claves débiles
18
La seguridad de RSA depende directamente de la calidad y longitud de la clave. Si los
números primos utilizados son pequeños o generados de manera inadecuada, un atacante podría
factorizar el número compuesto y obtener la clave privada. Asimismo, claves demasiado cortas
(por ejemplo, menores a 1024 bits) son vulnerables a ataques modernos. Por ello, actualmente se
recomienda utilizar claves de 2048 o 4096 bits para mantener un nivel de seguridad adecuado
(Stallings, 2017).
c) El desarrollo de la computación cuántica podría amenazar su seguridad futura
Aunque RSA es seguro frente a los métodos de cómputo clásicos, el avance en la
computación cuántica representa una amenaza potencial. En particular, el algoritmo de Shor puede
factorizar enteros grandes en tiempo polinómico utilizando un ordenador cuántico, lo que
comprometería la seguridad de RSA. Si bien todavía no existen computadores cuánticos a gran
escala capaces de ejecutar este ataque, la comunidad científica ya está trabajando en criptografía
poscuántica, con algoritmos alternativos resistentes a este tipo de amenazas (Chen et al., 2016).
Avances y Retos Actuales
El algoritmo RSA, a pesar de ser uno de los métodos criptográficos más utilizados en la
seguridad digital, no está exento de desafíos frente al avance tecnológico. La evolución del poder
de cómputo, los nuevos algoritmos de factorización y el surgimiento de la computación cuántica
obligan a replantear constantemente sus parámetros de seguridad y su aplicabilidad futura.
19
Tamaños de Clave Recomendados
En las primeras décadas de uso, particularmente en los años 90, era suficiente utilizar claves
de 512 bits para garantizar un nivel de seguridad aceptable. Sin embargo, con el crecimiento
exponencial de la capacidad de procesamiento de las computadoras y el desarrollo de algoritmos
de factorización más rápidos, estos tamaños de clave se volvieron inseguros.
Actualmente, organismos como el NIST (National Institute of Standards and Technology)
recomiendan que las claves RSA tengan una longitud mínima de 2048 bits, mientras que para
sistemas de alta seguridad y a largo plazo se sugieren claves de 4096 bits o superiores (NIST,
2019). Esta ampliación de tamaños responde a la necesidad de mantener la resistencia del
algoritmo frente a ataques de fuerza bruta y factorización asistida por supercomputadoras.
El uso de claves más largas, sin embargo, implica un aumento en el costo computacional,
tanto en el cifrado como en el descifrado. Por ello, se busca un equilibrio entre seguridad y
eficiencia según la aplicación específica (Katz & Lindell, 2020).
Vulnerabilidades Potenciales
A pesar de su fortaleza matemática, RSA no es invulnerable. Existen algoritmos de
factorización cada vez más eficientes, como el General Number Field Sieve (GNFS), considerado
actualmente el método más rápido para factorizar enteros grandes. Aunque factorizar claves de
2048 o 4096 bits sigue siendo prácticamente imposible con los recursos actuales, se han logrado
romper claves más cortas (512 y 768 bits) utilizando redes de supercomputadoras y cooperación
internacional de investigadores (Lenstra et al., 2010).
20
Estas vulnerabilidades sugieren que la ventana de seguridad de RSA podría reducirse con
el paso del tiempo, a medida que la capacidad computacional siga creciendo. Aunque hoy en día
RSA continúa siendo seguro en la práctica, existe un consenso en la comunidad científica de que
su futuro depende de las nuevas amenazas tecnológicas, en particular de la computación cuántica
(Chen et al., 2016).
RSA vs Otros Algoritmos
a) ECC (Criptografía de Curvas Elípticas)
La Criptografía de Curvas Elípticas (ECC, por sus siglas en inglés) ha surgido como una
alternativa más eficiente a RSA. La principal ventaja de ECC es que permite alcanzar el mismo
nivel de seguridad que RSA pero con claves mucho más pequeñas. Por ejemplo, una clave ECC
de 256 bits ofrece una seguridad comparable a una clave RSA de 3072 bits (Stallings, 2017).
Esto implica una reducción significativa en el consumo de recursos, lo que convierte a ECC
en una opción ideal para dispositivos con capacidad limitada como teléfonos móviles, sistemas
embebidos o dispositivos de Internet de las Cosas (IoT).
b) Criptografía poscuántica
Otro frente de comparación es la criptografía poscuántica, que busca diseñar algoritmos
resistentes a los ordenadores cuánticos. El algoritmo de Shor, ejecutado en un ordenador cuántico
lo suficientemente potente, podría factorizar enteros grandes en tiempo polinómico,
comprometiendo la seguridad de RSA.
21
Por esta razón, organismos internacionales como el NIST llevan a cabo procesos de
estandarización de algoritmos poscuánticos basados en problemas matemáticos distintos, como
redes euclidianas, códigos de corrección de errores y multivariados polinomiales (Chen et al.,
2016). Estos algoritmos representan una posible transición futura, cuando la computación cuántica
sea una realidad práctica.
Implementación Práctica en Python
En esta sección se presenta un programa en Python que ejemplifica el funcionamiento del
algoritmo RSA de forma didáctica. El código permite generar llaves, cifrar y descifrar tanto
números como texto sencillo, a través de una interfaz por consola.
# rsa_app.py — RSA didáctico con entrada por consola
import math
import sys
# ---------------- Utilidades ----------------
def egcd(a, b):
if a == 0:
return (b, 0, 1)
g, y, x = egcd(b % a, a)
return (g, x - (b // a) * y, y)
22
def modinv(a, m):
g, x, _ = egcd(a, m)
if g != 1:
raise ValueError("No existe inverso modular: e y phi(n) no son coprimos.")
return x % m
def gcd(a, b):
while b:
a, b = b, a % b
return a
# Primalidad (Miller–Rabin determinista para 32 bits; suficiente para ejercicios)
def is_probable_prime(n):
if n < 2:
return False
# pequeños
small_primes = [2,3,5,7,11,13,17,19,23,29]
23
for p in small_primes:
if n == p:
return True
if n % p == 0:
return n == p
# descomponer n-1 = d * 2^s
d, s = n - 1, 0
while d % 2 == 0:
d //= 2
s += 1
# bases deterministas para 32 bits
for a in [2, 7, 61]:
if a % n == 0:
continue
x = pow(a, d, n)
if x == 1 or x == n - 1:
continue
24
for _ in range(s - 1):
x = pow(x, 2, n)
if x == n - 1:
break
else:
return False
return True
def choose_e(phi):
# preferimos 65537 si es coprimo con phi
for cand in (65537, 17, 11, 7, 5, 3):
if cand < phi and gcd(cand, phi) == 1:
return cand
# si nada funciona, buscamos el primer impar >=3 coprimo
e=3
while e < phi:
if gcd(e, phi) == 1:
return e
25
e += 2
raise ValueError("No se pudo elegir e.")
# Mapeo texto <-> números (A=1..Z, '_'=espacio)
ALPHABET = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ" # '_' index 0
def text_to_nums(s):
s = s.upper().replace(" ", "_")
out = []
for ch in s:
if ch in ALPHABET:
out.append(ALPHABET.index(ch))
else:
raise ValueError(f"Carácter no soportado: {ch!r}. Usa letras y espacio.")
return out
def nums_to_text(nums):
return "".join(ALPHABET[n] for n in nums).replace("_", " ")
26
# ---------------- Entrada por consola ----------------
def ask_int(msg):
try:
return int(input(msg).strip())
except Exception:
print("Entrada inválida. Debe ser un entero.")
sys.exit(1)
print("=== RSA didáctico ===")
p = ask_int("Ingresa p (primo): ")
q = ask_int("Ingresa q (primo): ")
if not is_probable_prime(p):
print("p no parece primo (para práctica).")
sys.exit(1)
if not is_probable_prime(q):
print("q no parece primo (para práctica).")
27
sys.exit(1)
if p == q:
print("p y q deben ser distintos.")
sys.exit(1)
n=p*q
phi = (p - 1) * (q - 1)
e_txt = input("Ingresa e (opcional; Enter para elegir automáticamente): ").strip()
if e_txt:
e = int(e_txt)
if not (1 < e < phi) or gcd(e, phi) != 1:
print("e inválido: debe cumplir 1 < e < phi y mcd(e,phi)=1.")
sys.exit(1)
else:
e = choose_e(phi)
try:
d = modinv(e, phi)
28
except ValueError as err:
print(err)
sys.exit(1)
print("\n--- Llaves ---")
print(f"n = {n}")
print(f"phi(n) = {phi}")
print(f"e = {e}")
print(f"d = {d}")
print(f"Llave pública (e, n) = ({e}, {n})")
print(f"Llave privada (d, n) = ({d}, {n})")
# ---------------- Operaciones ----------------
def encrypt_num(m, e, n):
if not (0 <= m < n):
raise ValueError(f"El mensaje numérico debe estar en [0, {n-1}]")
return pow(m, e, n)
29
def decrypt_num(c, d, n):
return pow(c, d, n)
while True:
print("\nElige una opción:")
print(" 1) Cifrar número")
print(" 2) Descifrar número")
print(" 3) Cifrar texto (A..Z, espacio)")
print(" 4) Descifrar texto (A..Z, espacio)")
print(" 0) Salir")
op = input("> ").strip()
if op == "1":
m = ask_int("Número a cifrar (0..n-1): ")
c = encrypt_num(m, e, n)
print(f"Cifrado: {c}")
elif op == "2":
c = ask_int("Número cifrado: ")
30
m = decrypt_num(c, d, n)
print(f"Descifrado: {m}")
elif op == "3":
t = input("Texto a cifrar: ")
nums = text_to_nums(t)
# Ciframos cada símbolo como un bloque independiente (didáctico)
cipher_nums = [encrypt_num(x, e, n) for x in nums]
print("Números originales:", nums)
print("Bloques cifrados:", cipher_nums)
elif op == "4":
raw = input("Ingresa los bloques cifrados separados por espacios: ").strip()
try:
blocks = [int(x) for x in raw.split()]
except Exception:
print("Formato inválido.")
continue
31
plain_nums = [decrypt_num(c, d, n) for c in blocks]
print("Bloques descifrados:", plain_nums)
try:
print("Texto:", nums_to_text(plain_nums))
except Exception:
print("(No se pudo convertir a texto; revisa que cada bloque sea 0..26)")
elif op == "0":
print("¡Listo!")
break
else:
print("Opción no válida.")
32
Parte Práctica del Algoritmo RSA
Con el objetivo de complementar la fundamentación teórica del algoritmo RSA, se
presentan a continuación ejercicios prácticos que ilustran el proceso de generación de claves,
cifrado y descifrado de mensajes utilizando valores pequeños para ppp y qqq.
Estos ejemplos permiten comprender de forma didáctica los pasos del RSA, aunque en la
práctica se emplean números primos de cientos o miles de bits para garantizar la seguridad.
1. Se quiere enviar el mensaje M=10 de forma segura usando el algoritmo de RSA
con p=11 y q=17
Ilustración 1 Ejemplo 1
33
2. Se quiere enviar el mensaje M=42 de forma segura usando el algoritmo de RSA
con p=13 y q=19
Ilustración 2 Ejemplo 2
34
3. Se quiere enviar el mensaje M=100 de forma segura usando el algoritmo de RSA
con p=17 y q=23
Ilustración 3 Ejemplo 3
35
Conclusiones
El algoritmo RSA ha representado, desde su creación en 1977, un hito fundamental en la
historia de la criptografía moderna, al introducir de manera práctica el concepto de clave pública.
Su implementación ha permitido garantizar aspectos esenciales de la seguridad de la información,
como la confidencialidad, integridad, autenticidad y el no repudio en las comunicaciones digitales
(Menezes, van Oorschot & Vanstone, 1996).
Gracias a su versatilidad, RSA ha sido adoptado en protocolos de Internet (SSL/TLS,
HTTPS), banca en línea, comercio electrónico, firmas digitales y correos electrónicos seguros,
consolidándose como un estándar de facto en la protección de datos sensibles (Stallings, 2017).
Estas aplicaciones han contribuido a establecer la confianza digital en una sociedad cada vez más
interconectada.
No obstante, el avance de la capacidad computacional y el desarrollo de algoritmos de
factorización más eficientes plantean un reto importante para la seguridad a largo plazo del RSA.
Actualmente, el uso de claves de 2048 o 4096 bits se considera suficiente, pero la amenaza
potencial de la computación cuántica podría comprometer su eficacia futura (Boneh & Shoup,
2020). Esto ha impulsado la investigación en criptografía post-cuántica, cuyo objetivo es diseñar
sistemas resistentes a la capacidad de cómputo de los ordenadores cuánticos.
En este sentido, el RSA no debe entenderse como un algoritmo obsoleto, sino como una
base sólida sobre la cual se ha construido la seguridad informática contemporánea. Sin embargo,
36
los especialistas coinciden en que es necesario preparar una transición gradual hacia algoritmos
alternativos como ECC y esquemas post-cuánticos, que aseguren la protección de la información
en las próximas décadas (NIST, 2022).
Bibliografia
Boneh, D., & Shoup, V. (2020). A Graduate Course in Applied Cryptography. Stanford
University. Recuperado de https://toc.cryptobook.us/
Chen, L., Jordan, S., Liu, Y.-K., Moody, D., Peralta, R., Perlner, R., & Smith-Tone, D.
(2016). Report on Post-Quantum Cryptography. U.S. Department of Commerce, National
Institute of Standards and Technology (NIST). https://doi.org/10.6028/NIST.IR.8105
Katz, J., & Lindell, Y. (2020). Introduction to Modern Cryptography (3rd ed.). CRC
Press. https://doi.org/10.1201/9780429466335
Lenstra, A. K., Kleinjung, T., & Thomé, E. (2010). The number field sieve for integer
factorization. In Algorithmic Number Theory (pp. 11–25). Springer. https://doi.org/10.1007/978-
3-642-14518-6_2
Menezes, A. J., van Oorschot, P. C., & Vanstone, S. A. (1996). Handbook of Applied
Cryptography. CRC Press. https://doi.org/10.1201/9780429466335
37
Menezes, A. J., van Oorschot, P. C., & Vanstone, S. A. (2018). Handbook of Applied
Cryptography. CRC Press. (Edición digital revisada).
NIST. (2019). Recommendation for Key Management: Part 1 – General (SP 800-57 Part
1 Rev. 5). National Institute of Standards and Technology. https://doi.org/10.6028/NIST.SP.800-
57pt1r5
NIST. (2022). Post-Quantum Cryptography Standardization Project. National Institute of
Standards and Technology. https://csrc.nist.gov/projects/post-quantum-cryptography
Rivest, R. L., Shamir, A., & Adleman, L. (1978). A method for obtaining digital
signatures and public-key cryptosystems. Communications of the ACM, 21(2), 120–126.
https://doi.org/10.1145/359340.359342
Schneier, B. (2015). Applied Cryptography: Protocols, Algorithms, and Source Code in C
(20th anniversary ed.). John Wiley & Sons.
Stallings, W. (2017). Cryptography and Network Security: Principles and Practice (7th
ed.). Pearson.
William, S., & Stallings, W. (2018). Computer Security: Principles and Practice (4th ed.).
Pearson.
Stinson, D., & Paterson, M. (2019). Cryptography: Theory and Practice (4th ed.). CRC
Press.