RSA (Rivest-Shamir-Adleman) es un algoritmo utilizado por los ordenadores modernos para cifrar y descifrar mensajes. Es un algoritmo criptográfico asimétrico. Asimétrico significa que hay dos claves diferentes. También se denomina criptografía de clave pública, porque una de las claves puede entregarse a cualquiera. La otra clave debe mantenerse en privado. El algoritmo se basa en el hecho de que encontrar los factores de un número compuesto grande es difícil: cuando los factores son números primos, el problema se denomina factorización primaria. También es un generador de pares de claves (clave pública y privada).
El RSA implica una clave pública y una clave privada. La clave pública puede ser conocida por todo el mundo: se utiliza para cifrar los mensajes. Los mensajes cifrados con la clave pública sólo pueden descifrarse con la clave privada. La clave privada debe mantenerse en secreto. Calcular la clave privada a partir de la clave pública es muy difícil.
Cómo funciona RSA (visión general)
RSA se basa en operaciones aritméticas con enteros grandes y en la dificultad práctica de factorizar un número grande en sus factores primos. El esquema básico consta de tres etapas principales:
- Generación de claves: se crean dos claves relacionadas matemáticamente: una pública y otra privada.
- Cifrado: quien quiere enviar un mensaje convierte el mensaje en un número y lo eleva a una potencia usando la clave pública, tomando el resto módulo n.
- Descifrado: quien posee la clave privada aplica otra potencia módulo n para recuperar el mensaje original.
Generación de claves (pasos y fórmulas)
De forma resumida, los pasos para generar un par de claves RSA son:
- Elegir dos números primos grandes p y q de forma aleatoria y segura.
- Calcular n = p × q. El valor n es parte de la clave pública y también del par de claves.
- Calcular φ(n) = (p − 1) × (q − 1) (la función totiente de Euler para n cuando p y q son primos).
- Elegir un entero e tal que 1 < e < φ(n) y gcd(e, φ(n)) = 1 (es decir, e es coprimo con φ(n)). e será el exponente público.
- Calcular d como el inverso multiplicativo de e módulo φ(n): d ≡ e^(−1) (mod φ(n)). d es el exponente privado.
La clave pública es el par (n, e). La clave privada es el par (n, d) y debe mantenerse secreta.
Fórmulas de cifrado y descifrado
- Para cifrar un mensaje m (convertido previamente a un número 0 <= m < n): c = m^e mod n.
- Para descifrar el cifrado c: m = c^d mod n.
Estas operaciones se realizan con exponenciación modular eficiente (por ejemplo, exponenciación rápida) incluso cuando n tiene miles de bits.
Ejemplo numérico pequeño (didáctico)
Con fines ilustrativos (no seguro en la práctica):
- Elegir p = 61 y q = 53 → n = 61 × 53 = 3233.
- φ(n) = (61−1)(53−1) = 3120.
- Elegir e = 17 (gcd(17,3120)=1).
- Calcular d = 2753 (porque 17 × 2753 ≡ 1 (mod 3120)).
- Clave pública: (n=3233, e=17). Clave privada: (n=3233, d=2753).
- Si m = 65, cifrado: c = 65^17 mod 3233 = 2790. Descifrado: m = 2790^2753 mod 3233 = 65.
Este ejemplo muestra el mecanismo; en sistemas reales se usan primos de cientos o miles de bits.
Firmas digitales con RSA
RSA también se usa para firmas digitales. En lugar de cifrar con la clave pública, se aplica la clave privada al mensaje (o a un resumen/huella del mensaje):
- Firma s = H(m)^d mod n (donde H(m) es un hash del mensaje y normalmente se usa un esquema de padding firmado como PSS).
- Verificación: calcular v = s^e mod n y comprobar que v coincide con H(m).
Esto autentica que quien firmó posee la clave privada y que el mensaje no ha sido alterado.
Prácticas y consideraciones de seguridad
- Tamaños de clave: en la práctica se recomiendan claves de al menos 2048 bits hoy en día; para seguridad a más largo plazo se usan 3072 o 4096 bits.
- Padding obligatorio: nunca cifrar mensajes arbitrarios sin esquema de padding. Para cifrado se usan esquemas como OAEP; para firmas, PSS. El padding evita ataques de texto plano conocido o escogido.
- Generador de números aleatorios fuerte: la seguridad depende de la calidad de p y q; deben generarse con un buen RNG criptográfico.
- Protección de la clave privada: almacenar la clave privada cifrada (por ejemplo en un módulo HSM o usando cifrado con contraseña fuerte), y limitar su acceso.
- Rotación de claves y revocación: establecer políticas para cambiar claves y revocarlas si se sospecha compromiso.
- Vulnerabilidades: ataques prácticos incluyen factorización (cuando claves débiles), ataques de canal lateral (timing, consumo de energía), y problemas por mal uso del padding. Además, un ordenador cuántico suficientemente grande rompería RSA (algoritmo de Shor).
Uso real y rendimiento
RSA se usa ampliamente en protocolos como TLS/HTTPS, S/MIME, firmas de código y certificados X.509. Debido a que las operaciones RSA son más lentas que los cifrados simétricos, con frecuencia se utiliza RSA para cifrar o intercambiar una clave simétrica (por ejemplo, AES) y luego cifrar los datos con ese algoritmo simétrico más rápido.
Buenas prácticas resumidas
- Usar claves de tamaño adecuado (mínimo 2048 bits en la actualidad).
- Aplicar esquemas de padding seguros (OAEP para cifrado, PSS para firmas).
- Generar primos con fuentes de entropía seguras y proteger la clave privada en hardware cuando sea posible.
- Actualizar y rotar claves según políticas de seguridad y considerar alternativas resistentes a la criptografía cuántica a medio-largo plazo.
RSA sigue siendo uno de los esquemas de criptografía de clave pública más utilizados y estudiados. Su seguridad práctica depende tanto de elecciones matemáticas correctas (primos grandes, exponentes adecuados) como de la implementación y el entorno operativo (protección contra fugas, padding y buenas prácticas de gestión de claves).