Estou fazendo um programa e tenho que assinar arquivos com RSA… mas tipo é pedido que se crie uma chave de 1024 bits, um bloco de 128 bytes e criptografar esse bloco com a chave criada.
Eu criei as chaves publicas e privadas de 1024 bits mas quando eu envio para criptografar um bloco de 128 bytes da erro.
Já li a respeito sobre esse erro e sei que é porque não se pode enviar um bloco igual ou maior que a chave para criptografar, mas não tem algum outro método para se fazer isso utilizando somente o RSA?!
Outra duvida, como é que eu poderia criptografar utilizando padding com RSA alguem poderia me dar um exemplo?!
O método padrão de assinar um arquivo com RSA é o PKCS#7, que faz o seguinte:
a) Calcula um hash do arquivo (por exemplo, MD5 ou SHA-1). O hash, em si, tem apenas 16 ou 20 bytes.
b) Criptografa o hash com a chave privada. Isso irá criar uma assinatura de 1024 bits (128 bytes).
Para conferir a assinatura, você calcula novamente o hash do arquivo, e então tenta decifrar, com a chave pública, o hash cifrado. Se o resultado da decifração for idêntico ao hash calculado, então a assinatura bate. Senão, o arquivo foi corrompido de alguma forma.
Você nunca pode usar o RSA sozinho. Nunca, nunca, nunca.
Existe um ataque ao RSA que permite determinar alguns bits da chave se você usar a mesma chave para criptografar sucessivos blocos.
Portanto, é interessante que você use sempre o RSA com algum outro algoritmo (como o hash - por exemplo, SHA-1 - , para assinaturas, ou um algoritmo simétrico - por exemplo, AES - para criptografia).
a) De fato, não é possível criptografar mais de 117 bytes quando se usa uma chave de 1024 bits.
b) Para saber onde o arquivo foi alterado, você deve dividi-lo em blocos pequenos, e adicionar um código de correção de erros.
Isso tem a vantagem de você poder detectar alterações e efetuar algumas correções.
[quote=entanglement]a) De fato, não é possível criptografar mais de 117 bytes quando se usa uma chave de 1024 bits.
b) Para saber onde o arquivo foi alterado, você deve dividi-lo em blocos pequenos, e adicionar um código de correção de erros.
Isso tem a vantagem de você poder detectar alterações e efetuar algumas correções.
[/quote]
blz… mas tipo voce onde eu encontro algum exemplo em java ou em qualquer outra linguagem?!