Cifrar / Assinar RSA
CriptoCifra RSA-OAEP e assinatura RSASSA-PKCS1-v1_5 com Web Crypto. Gere um par de chaves ou cole uma chave PEM.
Nesta página
O que é o RSA?#
O RSA é criptografia assimétrica: trabalha com um par de chaves correspondentes em vez de um segredo compartilhado. Uma chave pública pode ser distribuída a qualquer um — o seu único trabalho é trancar dados e verificar assinaturas. Uma chave privada fica consigo e é a única coisa que consegue destrancar dados encriptados com a chave pública, ou produzir uma assinatura que qualquer um pode verificar. Essa divisão é o que permite a duas partes que nunca compartilharam um segredo trocar mensagens confidenciais e provar autenticidade.
Esta página cobre as quatro operações para as quais o RSA é normalmente usado, tudo através do motor Web Crypto nativo do navegador:
- Cifrar / Decifrar usam RSA-OAEP com SHA-256 — o esquema moderno de preenchimento autenticado. Uma mensagem curta encriptada com a chave pública só pode ser lida de volta com a chave privada.
- Assinar / Verificar usam RSASSA-PKCS1-v1_5 com SHA-256 — o esquema de assinatura mais amplamente interoperável, o que a maioria dos JWTs e cadeias X.509 ainda usa.
- Geração de chaves produz pares de 2048, 3072 ou 4096 bits com um expoente público de 65537, exportados como PEM padrão (SubjectPublicKeyInfo para a chave pública, PKCS#8 para a chave privada).
O RSA é deliberadamente limitado a payloads curtos. Com RSA-2048 e SHA-256, a maior mensagem que se consegue encriptar é cerca de 190 bytes; para algo maior, use a ferramenta simétrica e proteja a sua chave com RSA em vez disso.
Como usar#
- Gere um par. Escolha um tamanho de chave (2048 / 3072 / 4096) e clique em Gerar par de chaves. Duas caixas só de leitura preenchem-se: a chave pública e a chave privada, ambas em PEM. Copie cada uma para um sítio seguro — a chave privada é o que nunca deve compartilhar.
- Escolha um modo: Cifrar, Decifrar, Assinar ou Verificar.
- Coloque a chave certa no campo Chave conforme o modo:
- Cifrar → cole a chave pública.
- Decifrar → cole a chave privada.
- Assinar → cole a chave privada.
- Verificar → cole a chave pública.
- Escreva a mensagem. Para verificar, cole também a assinatura (base64) no campo de assinatura.
- Execute. A linha de estado reporta o resultado — para verificar, afirma explicitamente se a assinatura é válida ou inválida.
Principais funcionalidades#
- Dois algoritmos, um par de chaves. O mesmo PEM funciona para encriptação OAEP e assinatura PKCS#1, porque o Web Crypto recebe o algoritmo na importação.
- Saída PEM padrão. Chaves públicas são SPKI, chaves privadas são PKCS#8 — os formatos que todas as linguagens e plataformas leem nativamente.
- Expoente público 65537. O valor universalmente escolhido; pequeno suficiente para ser rápido, grande suficiente para evitar fraquezas conhecidas.
- Assinaturas interoperáveis. RSASSA-PKCS1-v1_5 é o formato que JWTs reais, assinatura de código e cadeias de certificados esperam.
- Zero envios. A geração de chaves, encriptação e assinatura correm todas localmente no seu navegador; a chave privada nunca toca num servidor.
Exemplo prático#
Clique em Gerar par de chaves com 2048 selecionado. A caixa da chave pública preenche-se com um bloco PEM desta forma:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyY7v...(lines of base64)
-----END PUBLIC KEY-----
A caixa da chave privada preenche-se com um bloco -----BEGIN PRIVATE KEY----- mais longo. Agora mude para Cifrar, cole a chave pública no campo Chave, escreva handshake: 0x4F2A como mensagem, e execute. A saída é um único blob base64 com cerca de 344 caracteres — exatamente 256 bytes de texto cifral RSA-2048, codificados em base64.
Mude para Decifrar, cole a chave privada no campo Chave, largue esse blob no campo de mensagem, e execute: o handshake: 0x4F2A original volta. Para assinar, o mesmo fluxo com Assinar produz uma assinatura base64 de 344 caracteres que Verificar confirmará como válida contra a chave pública — e reportará como inválida se mudar um único carácter da mensagem primeiro.
FAQ#
Porque é que o RSA só consegue encriptar mensagens curtas?#
O RSA opera com números módulo do tamanho da chave. Com RSA-2048 tem-se um bloco de 256 bytes, e o preenchimento OAEP consome 2 * hashLen + 2 bytes dele (98 para SHA-256), deixando 190 bytes para a mensagem em si. Isto é por desenho — o RSA é para chaves e assinaturas, não para dados em massa. O padrão é “híbrido”: encriptar os dados em massa com AES (use a ferramenta simétrica), e depois encriptar só a chave AES com RSA.
2048, 3072 ou 4096 bits?#
2048 é a referência atual e ainda é considerada adequada para a maioria dos usos. 3072 corresponde aproximadamente a uma força simétrica de 128 bits; 4096 é a escolha conservadora para chaves que se quer que durem uma década ou mais. Cada passo acima custa tempo real na geração de chaves e em cada operação, com retornos de segurança decrescentes.
Qual é a diferença entre encriptar e assinar?#
Encriptação é sobre sigilo: a chave pública tranca, a chave privada destranca. Assinatura é sobre autenticidade: a chave privada cria a assinatura, a chave pública verifica-a. Usam o mesmo par de chaves mas algoritmos diferentes (OAEP versus PKCS#1) e respondem a perguntas diferentes — “alguém consegue ler isto?” versus “o detentor desta chave produziu mesmo isto?”.
A minha chave privada é enviada para algum lado quando a gero ou uso?#
Não. A geração, encriptação, decifragem, assinatura e verificação são todas executadas na página pelo Web Crypto. Os blocos PEM existem apenas no seu separador do navegador; nada é transmitido. Se está lidando com uma chave privada de produção, gere-a num ambiente que controle em vez de a colar numa página web.