RSA es un criptosistema de clave pública que proporciona cifrado y firmas digitales basado en la complejidad computacional de la factorización de números grandes. Según NIST Special Publication 800-56B Rev. 2 (2023), RSA con una longitud de clave de 2048 bits sigue siendo el estándar de seguridad para sistemas gubernamentales y comerciales. El algoritmo se utiliza ampliamente en protocolos TLS, firmas digitales y cifrado de datos en aplicaciones móviles.
Puntos clave
RSA es un algoritmo criptográfico de clave pública desarrollado en 1977 por Ron Rivest, Adi Shamir y Leonard Adleman. El nombre se forma a partir de las primeras letras de los apellidos de los autores. El algoritmo se convirtió en el primer criptosistema asimétrico prácticamente aplicable donde las claves de cifrado y descifrado difieren.
El algoritmo RSA fue publicado en 1977 en la revista Scientific American y se basa en trabajos anteriores de Whitfield Diffie y Martin Hellman sobre criptografía de clave pública. El Instituto de Tecnología de Massachusetts obtuvo una patente para RSA en 1983, que duró hasta el año 2000. Según el informe de RSA Laboratories (2023), el algoritmo sigue siendo uno de los más extendidos estándares criptográficos del mundo: se utiliza en miles de millones de dispositivos a diario.
A diferencia de los cifrados simétricos donde se utiliza la misma clave tanto para cifrar como para descifrar, RSA opera con un par de claves matemáticamente vinculadas. La clave pública puede publicarse para cualquier persona sin riesgo de comprometer el sistema. La clave privada solo la conoce el propietario y nunca se transmite por la red. Según el estudio IBM Security X-Force Threat Intelligence Index (2024), el cifrado asimétrico se utiliza en el 96% de los protocolos modernos de transmisión segura de datos.
La seguridad de RSA se basa en el problema de factorización: descomponer el producto de dos números primos grandes en factores. Si se eligen números primos p y q de 1024 bits cada uno, su producto n tendrá 2048 bits. Calcular p y q conociendo solo n mediante métodos modernos es prácticamente imposible: según la evaluación de expertos del CNRS (2024), descifrar RSA-2048 requeriría más de 300 mil millones de años de cálculo en una computadora clásica.
Consideremos el ciclo completo de trabajo de RSA desde la generación de claves hasta el cifrado y descifrado de mensajes. Comprender estas etapas es necesario para una implementación correcta del algoritmo en aplicaciones móviles.
El proceso comienza con la selección de dos números primos grandes p y q. Se calcula el módulo n = p x q, que determina la longitud de la clave. Luego se calcula la función totiente de Euler phi(n) = (p-1)(q-1). Se elige un exponente público e que sea coprimo con phi(n). El exponente privado d se calcula como el inverso multiplicativo modular de e módulo phi(n). Según NIST SP 800-56B Rev. 2, la longitud mínima de n debe ser de 2048 bits para garantizar una protección adecuada.
import java.security.KeyPairGenerator;
import java.security.KeyPair;
import java.security.SecureRandom;
public class RSAKeyGenerator {
public static KeyPair generateKeyPair() throws Exception {
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
generator.initialize(2048, new SecureRandom());
return generator.generateKeyPair();
}
}
Para cifrar un mensaje m, el remitente lo convierte en un número entero menor que n y calcula el texto cifrado c = m^e mod n. El destinatario utiliza la clave privada d para recuperar el mensaje original: m = c^d mod n. Es importante señalar que RSA no está diseñado para cifrar grandes volúmenes de datos debido a su bajo rendimiento: el tamaño máximo del mensaje es igual a la longitud de la clave menos los bytes de sobrecarga (aproximadamente 190 bytes para RSA-2048 con OAEP).
import javax.crypto.Cipher;
import java.security.PublicKey;
import java.util.Base64;
public class RSAEncryptor {
public static String encrypt(String data, PublicKey publicKey) throws Exception {
Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encrypted = cipher.doFinal(data.getBytes());
return Base64.getEncoder().encodeToString(encrypted);
}
}
RSA también se utiliza para crear firmas digitales, un mecanismo para verificar la autenticidad e integridad de los datos. El propietario firma el hash del mensaje con su clave privada, y cualquier persona puede verificar la firma utilizando la clave pública. Según el informe Sectigo Certificate Transparency (2025), más del 85% de los certificados TLS en internet utilizan RSA para firmas digitales, lo que convierte al algoritmo en la base de confianza de las comunicaciones web.
import java.security.Signature
fun signData(data: ByteArray, privateKey: java.security.PrivateKey): ByteArray {
val signature = Signature.getInstance("SHA256withRSA")
signature.initSign(privateKey)
signature.update(data)
return signature.sign()
}
fun verifySignature(
data: ByteArray, signedData: ByteArray, publicKey: java.security.PublicKey
): Boolean {
val signature = Signature.getInstance("SHA256withRSA")
signature.initVerify(publicKey)
signature.update(data)
return signature.verify(signedData)
}
La longitud de la clave afecta directamente la fortaleza criptográfica de RSA. A medida que aumenta la potencia de cálculo, el tamaño mínimo aceptable de la clave se revisa periódicamente por parte de los organismos internacionales de normalización. Examinemos las recomendaciones actuales de NIST y otros reguladores.
| Longitud de clave | Equivalente simétrico | Estado |
|---|---|---|
| 1024 bits | 80 bits | Prohibido desde 2023 |
| 2048 bits | 112 bits | Estándar mínimo |
| 3072 bits | 128 bits | Recomendado para nuevos sistemas |
| 4096 bits | 256 bits | Para datos confidenciales |
El aumento de la longitud de la clave RSA afecta significativamente el tiempo de ejecución de las operaciones. Generar una clave de 4096 bits toma aproximadamente 10 veces más tiempo que una de 2048 bits. Las operaciones de cifrado y descifrado con una clave más larga requieren más recursos computacionales, lo cual es crítico para los dispositivos móviles con consumo de energía limitado.
Con el desarrollo de la computación cuántica, RSA puede ser vulnerado mediante el algoritmo de Shor en tiempo polinómico. Este algoritmo, propuesto por Peter Shor en 1994, permite factorizar números grandes en O((log n)^3) operaciones. Según IBM Quantum Roadmap (2025), se espera que la vulneración práctica de RSA-2048 no ocurra antes de 2035, sin embargo NIST ya recomienda una transición gradual hacia los algoritmos poscuánticos CRYSTALS-Kyber y CRYSTALS-Dilithium.
RSA se aplica activamente en aplicaciones móviles para garantizar la transmisión segura de datos, la verificación de la autenticidad de los servidores y la protección de transacciones digitales. La integración se realiza a través de las API criptográficas estándar de ambas plataformas principales.
La plataforma Android proporciona Android Keystore, un almacenamiento systemático de claves criptográficas protegido por el nivel de hardware Trusted Execution Environment. Las claves RSA generadas en KeyStore no pueden extraerse del dispositivo incluso si la aplicación se ve comprometida. Esto proporciona protección contra una amplia gama de ataques, incluido el malware con acceso root.
import android.security.keystore.KeyGenParameterSpec
import android.security.keystore.KeyProperties
import java.security.KeyPairGenerator
fun generateKeyInAndroidKeystore() {
val generator = KeyPairGenerator.getInstance(
KeyProperties.KEY_ALGORITHM_RSA,
"AndroidKeyStore"
)
val spec = KeyGenParameterSpec.Builder(
"rsa_key_pair",
KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
)
.setKeySize(2048)
.setBlockModes(KeyProperties.BLOCK_MODE_ECB)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_OAEP)
.build()
generator.initialize(spec)
val keyPair = generator.generateKeyPair()
}
En iOS, RSA se maneja a través de Security Framework con acceso a Secure Enclave en dispositivos con chip A7 y posteriores. Secure Enclave es un coprocesador dedicado aislado del procesador principal que realiza operaciones criptográficas y almacena claves en una bóveda de hardware. Las claves RSA pueden generarse tanto dentro de Secure Enclave como en el Keychain de software con varios niveles de acceso.
En aplicaciones móviles reales, RSA rara vez se utiliza para el cifrado directo de grandes datos. La práctica estándar es un esquema híbrido: la aplicación genera una clave de sesión AES, la cifra con la clave pública RSA del servidor y la envía al servidor. Todo el tráfico posterior se cifra con AES, que es 100-1000 veces más rápido que la transmisión directa de datos a través de RSA.
Como cualquier algoritmo criptográfico, RSA tiene fortalezas y debilidades que deben tenerse en cuenta al diseñar sistemas seguros. Una evaluación objetiva ayuda a elegir la herramienta adecuada para una tarea específica.
La principal ventaja de RSA es resolver el problema fundamental de distribución de claves: la clave pública puede publicarse libremente sin riesgo de comprometer todo el sistema. La versatilidad del algoritmo se manifiesta en el soporte tanto de cifrado como de firmas digitales con un solo par de claves. Además, RSA cuenta con un amplio ecosistema de soporte: hay bibliotecas disponibles para todos los lenguajes y plataformas.
El principal inconveniente de RSA es su bajo rendimiento en comparación con los algoritmos simétricos. El descifrado de RSA-2048 en un procesador móvil moderno toma aproximadamente 5-15 milisegundos, mientras que AES-256 procesa gigabytes de datos en el mismo tiempo. Además, RSA es vulnerable a ataques cuánticos mediante el algoritmo de Shor, lo que limita su uso en sistemas que requieren protección de datos a largo plazo.
Para proyectos móviles, los expertos de NIST recomiendan: utilizar RSA solo para cifrado de claves y firmas digitales, elegir una longitud de clave de al menos 3072 bits para proyectos nuevos, combinar RSA con AES en un esquema híbrido y monitorear el desarrollo de estándares poscuánticos para una migración planificada a largo plazo.
Preguntas frecuentes
RSA es un algoritmo asimétrico con un par de claves utilizado para cifrar pequeños volúmenes de datos y firmas digitales. AES es un algoritmo simétrico con una única clave compartida, que funciona 100-1000 veces más rápido que RSA. En los sistemas modernos se combinan: RSA protege la transmisión de la clave de sesión AES, mientras que AES cifra el tráfico principal.
El tamaño mínimo seguro desde 2023 es RSA-2048 según NIST SP 800-131A Rev. 2. Las claves de 1024 bits están oficialmente prohibidas para los sistemas gubernamentales de EE. UU. Para proyectos nuevos se recomiendan 3072 bits, lo que proporciona un margen de seguridad y una fortaleza equivalente al cifrado simétrico de 128 bits.
Sí, RSA se utiliza ampliamente en aplicaciones móviles. Android proporciona Android KeyStore para la generación por hardware y el almacenamiento seguro de claves RSA. iOS proporciona Security Framework con soporte de Secure Enclave. Para el cifrado de grandes datos se recomienda un esquema híbrido RSA + AES, donde RSA cifra solo la clave de sesión.
En computadoras clásicas, vulnerar RSA-2048 es prácticamente imposible: según estimaciones actuales, se necesitarían más de 300 mil millones de años de cálculo continuo. Sin embargo, una computadora cuántica con suficientes qubits podría vulnerar RSA-2048 en minutos utilizando el algoritmo de Shor. Según estimaciones de IBM, dicha computadora no aparecerá antes de 2035.
Entre los algoritmos asimétricos, es popular ECC (Criptografía de Curva Elíptica), que proporciona una seguridad equivalente con una longitud de clave menor: ECC de 256 bits equivale a RSA-3072. Para la era poscuántica, NIST seleccionó CRYSTALS-Kyber para cifrado y CRYSTALS-Dilithium para firmas digitales en 2024.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también