RSA é um criptossistema de chave pública que fornece criptografia e assinaturas digitais baseado na complexidade computacional da fatoração de números grandes. De acordo com a NIST Special Publication 800-56B Rev. 2 (2023), RSA com comprimento de chave de 2048 bits continua sendo o padrão de segurança para sistemas governamentais e comerciais. O algoritmo é amplamente utilizado em protocolos TLS, assinaturas digitais e criptografia de dados em aplicações móveis.
Pontos principais
RSA é um algoritmo criptográfico de chave pública desenvolvido em 1977 por Ron Rivest, Adi Shamir e Leonard Adleman. O nome é formado pelas primeiras letras dos sobrenomes dos autores. O algoritmo tornou-se o primeiro criptossistema assimétrico praticamente aplicável onde as chaves de criptografia e descriptografia diferem.
O algoritmo RSA foi publicado em 1977 na revista Scientific American e é baseado em trabalhos anteriores de Whitfield Diffie e Martin Hellman sobre criptografia de chave pública. O Instituto de Tecnologia de Massachusetts obteve uma patente para o RSA em 1983, que durou até o ano 2000. De acordo com o relatório da RSA Laboratories (2023), o algoritmo continua sendo um dos mais difundidos padrões criptográficos do mundo — é usado em bilhões de dispositivos diariamente.
Ao contrário das cifras simétricas onde a mesma chave é usada tanto para criptografia quanto para descriptografia, RSA opera com um par de chaves matematicamente vinculadas. A chave pública pode ser publicada para qualquer pessoa sem risco de comprometer o sistema. A chave privada é conhecida apenas pelo proprietário e nunca é transmitida pela rede. De acordo com o estudo IBM Security X-Force Threat Intelligence Index (2024), a criptografia assimétrica é usada em 96% dos protocolos modernos de transmissão segura de dados.
A segurança do RSA baseia-se no problema de fatoração — decompor o produto de dois grandes números primos em fatores. Se você escolher números primos p e q de 1024 bits cada, seu produto n terá 2048 bits. Calcular p e q conhecendo apenas n usando métodos modernos é praticamente impossível: de acordo com a avaliação de especialistas do CNRS (2024), quebrar o RSA-2048 exigiria mais de 300 bilhões de anos de computação em um computador clássico.
Vamos considerar o ciclo completo de trabalho do RSA, desde a geração de chaves até a criptografia e descriptografia de mensagens. Compreender essas etapas é necessário para a implementação correta do algoritmo em aplicações móveis.
O processo começa com a seleção de dois grandes números primos p e q. O módulo n = p x q é calculado, o que determina o comprimento da chave. Em seguida, a função totiente de Euler phi(n) = (p-1)(q-1) é calculada. Um expoente público e é escolhido, que é coprimo com phi(n). O expoente privado d é calculado como o inverso multiplicativo modular de e módulo phi(n). De acordo com a NIST SP 800-56B Rev. 2, o comprimento mínimo de n deve ser de 2048 bits para garantir proteção adequada.
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 criptografar uma mensagem m, o remetente a converte em um número inteiro menor que n e calcula o texto cifrado c = m^e mod n. O destinatário usa a chave privada d para recuperar a mensagem original: m = c^d mod n. É importante notar que RSA não se destina a criptografar grandes volumes de dados devido ao baixo desempenho — o tamanho máximo da mensagem é igual ao comprimento da chave menos os bytes de overhead (aproximadamente 190 bytes para RSA-2048 com 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 também é usado para criar assinaturas digitais — um mecanismo para verificar a autenticidade e integridade dos dados. O proprietário assina o hash da mensagem com sua chave privada, e qualquer pessoa pode verificar a assinatura usando a chave pública. De acordo com o relatório Sectigo Certificate Transparency (2025), mais de 85% dos certificados TLS na internet usam RSA para assinaturas digitais, tornando o algoritmo a base de confiança para comunicações 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)
}
O comprimento da chave afeta diretamente a força criptográfica do RSA. À medida que o poder computacional aumenta, o tamanho mínimo aceitável da chave é regularmente revisado por organismos internacionais de normalização. Vamos examinar as recomendações atuais da NIST e de outros reguladores.
| Comprimento da chave | Equivalente simétrico | Status |
|---|---|---|
| 1024 bits | 80 bits | Proibido desde 2023 |
| 2048 bits | 112 bits | Padrão mínimo |
| 3072 bits | 128 bits | Recomendado para novos sistemas |
| 4096 bits | 256 bits | Para dados confidenciais |
O aumento do comprimento da chave RSA afeta significativamente o tempo de execução das operações. Gerar uma chave de 4096 bits leva aproximadamente 10 vezes mais tempo que uma chave de 2048 bits. As operações de criptografia e descriptografia com uma chave mais longa exigem mais recursos computacionais, o que é crítico para dispositivos móveis com consumo de energia limitado.
Com o desenvolvimento da computação quântica, RSA pode ser quebrado usando o algoritmo de Shor em tempo polinomial. Este algoritmo, proposto por Peter Shor em 1994, pode fatorar grandes números em O((log n)^3) operações. De acordo com o IBM Quantum Roadmap (2025), espera-se que a quebra prática do RSA-2048 não ocorra antes de 2035, no entanto a NIST já recomenda uma transição gradual para os algoritmos pós-quânticos CRYSTALS-Kyber e CRYSTALS-Dilithium.
RSA é ativamente usado em aplicações móveis para garantir transmissão segura de dados, autenticação de servidores e proteção de transações digitais. A integração é realizada através das APIs criptográficas padrão de ambas as plataformas principais.
A plataforma Android fornece Android Keystore — um armazenamento sistêmico de chaves criptográficas protegido pelo nível de hardware Trusted Execution Environment. As chaves RSA geradas no KeyStore não podem ser extraídas do dispositivo mesmo se a aplicação for comprometida. Isso fornece proteção contra uma ampla gama de ataques, incluindo malware com acesso 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()
}
No iOS, RSA é tratado através do Security Framework com acesso ao Secure Enclave em dispositivos com chip A7 e posteriores. O Secure Enclave é um coprocessador dedicado isolado do processador principal que realiza operações criptográficas e armazena chaves em um cofre de hardware. As chaves RSA podem ser geradas tanto dentro do Secure Enclave quanto no Keychain de software com vários níveis de acesso.
Em aplicações móveis reais, RSA raramente é usado para criptografia direta de grandes dados. A prática padrão é um esquema híbrido: a aplicação gera uma chave de sessão AES, a criptografa com a chave pública RSA do servidor e a envia ao servidor. Todo o tráfego subsequente é criptografado com AES, que é 100-1000 vezes mais rápido que a transmissão direta de dados através do RSA.
Como qualquer algoritmo criptográfico, RSA tem pontos fortes e fracos que devem ser considerados ao projetar sistemas seguros. Uma avaliação objetiva ajuda a escolher a ferramenta certa para uma tarefa específica.
A principal vantagem do RSA é resolver o problema fundamental de distribuição de chaves — a chave pública pode ser publicada livremente sem risco de comprometer todo o sistema. A versatilidade do algoritmo se manifesta no suporte tanto para criptografia quanto para assinaturas digitais com um único par de chaves. Além disso, o RSA possui um vasto ecossistema de suporte: bibliotecas estão disponíveis para todas as linguagens e plataformas.
A principal desvantagem do RSA é o baixo desempenho em comparação com algoritmos simétricos. A descriptografia do RSA-2048 em um processador móvel moderno leva aproximadamente 5-15 milissegundos, enquanto o AES-256 processa gigabytes de dados no mesmo tempo. Além disso, RSA é vulnerável a ataques quânticos através do algoritmo de Shor, o que limita seu uso em sistemas que exigem proteção de dados a longo prazo.
Para projetos móveis, os especialistas da NIST recomendam: usar RSA apenas para criptografia de chaves e assinaturas digitais, escolher um comprimento de chave de pelo menos 3072 bits para novos projetos, combinar RSA com AES em um esquema híbrido e monitorar o desenvolvimento de padrões pós-quânticos para migração planejada a longo prazo.
Perguntas frequentes
RSA é um algoritmo assimétrico com um par de chaves usado para criptografar pequenos volumes de dados e assinaturas digitais. AES é um algoritmo simétrico com uma única chave compartilhada, funcionando 100-1000 vezes mais rápido que o RSA. Em sistemas modernos, eles são combinados: RSA protege a transmissão da chave de sessão AES, enquanto AES criptografa o tráfego principal.
O tamanho mínimo seguro desde 2023 é RSA-2048 de acordo com a NIST SP 800-131A Rev. 2. Chaves de 1024 bits são oficialmente proibidas para sistemas governamentais dos EUA. Para novos projetos, recomenda-se 3072 bits, proporcionando uma margem de segurança e força equivalente à criptografia simétrica de 128 bits.
Sim, RSA é amplamente usado em aplicações móveis. Android fornece Android KeyStore para geração por hardware e armazenamento seguro de chaves RSA. iOS fornece Security Framework com suporte a Secure Enclave. Para criptografia de grandes dados, recomenda-se um esquema híbrido RSA + AES, onde RSA criptografa apenas a chave de sessão.
Em computadores clássicos, quebrar RSA-2048 é praticamente impossível — de acordo com estimativas atuais, seriam necessários mais de 300 bilhões de anos de computação contínua. No entanto, um computador quântico com qubits suficientes poderia quebrar o RSA-2048 em minutos usando o algoritmo de Shor. De acordo com estimativas da IBM, esse computador não aparecerá antes de 2035.
Entre os algoritmos assimétricos, ECC (Criptografia de Curva Elíptica) é popular, fornecendo segurança equivalente com menor comprimento de chave — ECC de 256 bits equivale a RSA-3072. Para a era pós-quântica, a NIST selecionou CRYSTALS-Kyber para criptografia e CRYSTALS-Dilithium para assinaturas digitais em 2024.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também