Boa tarde pessoal,
estou implementando no meu sistema os requisitos necessários para homologação do mesmo junto a fazendo estadual.
Já li em alguns tópicos aqui no GUJ que alguns colegas também estão neste processo e alguns acredito que já até homologaram seus sistemas portanto gostaria de pedir algum esclarecimento ou dica sobre um dos requisitos.
Segundo a legislação o sistema (Paf-Ecf) deve gerar alguns arquivos e cada arquivo desse deve ser assinado digitalmente conforme o seguinte requisito:
ANEXO VIII
DADOS TÉCNICOS PARA GERAÇÃO DA ASSINATURA DIGITAL DO REGISTRO TIPO EAD
Campo 02 do Registro tipo EAD: A assinatura digital deve ser gerada mediante os seguintes procedimentos:
1 - aplicar a função unidirecional MD5 uma única vez na porção do arquivo que compreende entre o seu primeiro byte e os bytes de quebra de linha imediatamente anteriores ao registro EAD, ficando excluído do cálculo do hash o registro EAD. O resultado será um código de 128 bits ou 16 bytes que devem ser inseridos no bloco de dados de 128 bytes que será assinado de acordo com a tabela abaixo, onde:
1.1 - a letra ?A? indica o tamanho do hash e deve ser preenchido com valor fixo 16 (em hexadecimal 0x10);
1.2 - a letra ?B? indica o local de preenchimento do hash, sendo que à esquerda fica o byte mais significativo e à direita o menos significativo;
1.3 - a letra ?C? indica os bytes restantes não usados, de preenchimento livre.
Bloco de dados de 128 bytes que deve ser assinado:
ABBBBBBBBBBBBBBBBCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2 - criar uma chave privada de 1024 bits, equivalente a um número hexadecimal de 256 dígitos, de conhecimento exclusivo da empresa desenvolvedora do PAF-ECF, devendo ser utilizada a mesma chave para todos os PAF-ECF desenvolvidos pela mesma empresa;
3 - criptografar o bloco de dados gerado conforme disposto no item 1, utilizando a chave a que se refere o item 2 pelo algoritmo RSA de chave pública, [color=red]sem utilizar nenhuma codificação dos dados além da criptografia RSA[/color], de maneira que o bloco de dados seja recuperado no momento da decriptografia exatamente igual ao detalhado na tabela acima;
4 - com o resultado do procedimento descrito no item 3 será obtido um número hexadecimal com até 256 dígitos que deverá ser informado no campo 02 do Registro tipo EAD.
Bom o problema é que segundo eu pesquisei, inclusive em alguns tópicos aqui do GUJ, mesmo o algoritimo de criptografia RSA utilizando chave de 1024 bits e expoente 16 não aceita um bloco de dados maior que tamanho da chave no caso 128 bytes e de fato quando eu tento aplicar o RSA sobre o bloco exigido pelo requisto de 128 bytes recebo uma exceção (javax.crypto.IllegalBlockSizeException: Data must not be longer than 117 bytes) informando que o bloco de dados deve ser de no máximo 117 bytes.
Nos mesmos tópicos que eu pesquisei aqui no GUJ que relatam esse problema, a sugestão para solucioná-lo é aplicar uma cifra simétrica (AES) no bloco de bytes antes e depois sim aplicar o RSA.
Bom mas como está destacado(vermelho) ali o requisito não permite que eu utilize nada além do RSA.
O problema é SÓ esse :shock:
Aguardo qualquer dica o sugestão!!
Obrigado!!
Giu