Problema com criptografia utilizando RSA  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
wellington7
JavaEvangelist
[Avatar]

Membro desde: 16/03/2007 14:03:02
Mensagens: 333
Offline

Alguma idéia de como rodar este código corretamente (está lançando Exception com mensagem "too much data for RSA block"



"Faça por onde que eu te ajudarei"

Idéias que você deveria conhecer:
  • Lombok
  • SSCCE
  • entanglement
    GUJ Hacker

    Membro desde: 26/09/2009 09:18:56
    Mensagens: 5750
    Offline

    Você não pode criptografar um bloco maior que o tamanho da chave, usando RSA. No seu caso, o tamanho da chave é de alguns poucos bits, e você quer criptografar um bloco de 100 bytes (800 bits).
    Tiago Borghi
    Entusiasta Java

    Membro desde: 04/03/2010 09:05:24
    Mensagens: 20
    Offline

    O tamanho máximo do bloco é de 16 bytes, se quiser cifrar um bloco maior terá que fazer por partes. Divida os 100 bytes em blocos de 16 e cifre-os, concatenando o resultado.
    Na hora do decrypt terá que fazer a mesma coisa
    wellington7
    JavaEvangelist
    [Avatar]

    Membro desde: 16/03/2007 14:03:02
    Mensagens: 333
    Offline

    tentei faze um loop..


    ..mas não deu certo (mesmo com array de bytes de 0x03) o cipherText se torna um array de zeros..

    "Faça por onde que eu te ajudarei"

    Idéias que você deveria conhecer:
  • Lombok
  • SSCCE
  • entanglement
    GUJ Hacker

    Membro desde: 26/09/2009 09:18:56
    Mensagens: 5750
    Offline

    A criptografia RSA não é destinada a ser usada para criptografar coisas, apenas chaves.

    Não tente criptografar 100 bytes se sua chave RSA tiver menos de 800 bits.

    E essa história de criptografar por blocos, no caso da RSA, não é adequado porque isso expõe uma vulnerabilidade no algoritmo quando uma mesma chave RSA é usada para criptografar vários blocos. Nunca se usa apenas a RSA sozinha; ela deve ser sempre combinada com um algoritmo simétrico como o AES ou o Triple-DES.

    O que se costuma fazer é criar uma chave AES (por exemplo), que tem sempre 128/192/256 bits, e criptografar essa chave usando RSA.

    Então você criptografa o seu texto original (aquele trambolho que tem 100 ou mais bytes) com essa chave AES, e criptografa a chave AES com a chave RSA.
    wellington7
    JavaEvangelist
    [Avatar]

    Membro desde: 16/03/2007 14:03:02
    Mensagens: 333
    Offline

    entanglement wrote:A criptografia RSA não é destinada a ser usada para criptografar coisas, apenas chaves.

    Não tente criptografar 100 bytes se sua chave RSA tiver menos de 800 bits.

    E essa história de criptografar por blocos, no caso da RSA, não é adequado porque isso expõe uma vulnerabilidade no algoritmo quando uma mesma chave RSA é usada para criptografar vários blocos. Nunca se usa apenas a RSA sozinha; ela deve ser sempre combinada com um algoritmo simétrico como o AES ou o Triple-DES.

    O que se costuma fazer é criar uma chave AES (por exemplo), que tem sempre 128/192/256 bits, e criptografar essa chave usando RSA.

    Então você criptografa o seu texto original (aquele trambolho que tem 100 ou mais bytes) com essa chave AES, e criptografa a chave AES com a chave RSA.


    É o que vou fazer, estou usando AES e vou criptografar a cheve usando RSA. Mas o número de chaves vai variar, posso criptografar apenas 1 chave por vez? E se for o caso, o tamanho das chaves AES é constante? A aplicação nunca vai falhar por estourar o tamanho do bloco RSA?
    entanglement
    GUJ Hacker

    Membro desde: 26/09/2009 09:18:56
    Mensagens: 5750
    Offline

    1) Eu recomendo criptografar uma chave de cada vez.
    2) O tamanho de uma chave AES pode ser: 128, 192 ou 256 bits. É só questão de escolher (e lembrar que o Java, se você não alterar um arquivo na JRE, só aceita chaves de 128 bits no máximo. Veja em:

    https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jce_policy-6-oth-JPR@CDS-CDS_Developer

    ( Java(TM) Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 6 )
     
    Índice dos Fóruns » Java Avançado
    Ir para:   
    Powered by JForum 2.1.8 © JForum Team