Homologação Paf-Ecf (Assinatura Digital)

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

caro colega,

fiz usando o algoritmo RSA c/ padding ( PCKS1 ).
ainda nao homologuei, mas creio que vai funcionar.
agora essa especificação da sefaz, na minha opinião, está um lixo!
Incompleta e dúbia.
Basta comparar a seção 1 com a primeira observação para ver.
E o pior de tudo é que não temos como questionar essas coisas!

Sugiro vc usar o openssl para fazer o serviço para você, pois li uns post de um pessoal que ja homologou dessa forma.
[]´s

[quote=rdma]caro colega,

fiz usando o algoritmo RSA c/ padding ( PCKS1 ).
ainda nao homologuei, mas creio que vai funcionar.
agora essa especificação da sefaz, na minha opinião, está um lixo!
Incompleta e dúbia.
Basta comparar a seção 1 com a primeira observação para ver.
E o pior de tudo é que não temos como questionar essas coisas!

Sugiro vc usar o openssl para fazer o serviço para você, pois li uns post de um pessoal que ja homologou dessa forma.
[]´s [/quote]

Hum vou dar uma olhada na implementação com padding mas pelo que eu estive observando o orgão técnico ainda não possui o eECFc que valida a assinatura dessa forma então mantive a implementação da forma antiga que não requer que a gente inclua o hash nesse bloco. Ai tudo funcionou da forma certa.

Como vou fazer uma pré-homologação vou saber certinho como é toda essa salada chamada homolgação do paf.

Quanto a especificação sem dúvida é um lixo. Como vc disse, dúbia e eu diria ao extremo.

Bem incompleta e na prática alguns tópicos ali são inviáveis.

Tem coisas que nem os fabricantes das impressoras tem como fornecer.

O site da confaz então é um lixo. Fui pegar a documentação lá e acredite era mais desatualizada que os sites dos fabricantes das ecfs e do que a documentação dos órgãos técnicos.

É isso!! E viva o Brasil!!

Valeu pela dica!

Assim que eu homolgar vou postar tudo aqui para o pessoal poder consultar!

Abraço!

[quote=giulianon]Assim que eu homolgar vou postar tudo aqui para o pessoal poder consultar!

Abraço![/quote]
Fala giulianon!

Já conseguiu homologar? Estamos esperando sua ajuda. :smiley:

[quote=tivrfoa][quote=giulianon]Assim que eu homolgar vou postar tudo aqui para o pessoal poder consultar!

Abraço![/quote]
Fala giulianon!

Já conseguiu homologar? Estamos esperando sua ajuda. :smiley: [/quote]

Sim finalmente homologuei.

Estava esperando o processo todo (Homologação, Publicação no diário oficial, Registro do software na fazenda estadual, Procedimento para alterações, etc) para poder postar aqui mas diga lá qual a sua dúvida.

Abraço!

Giu

E ai Giulianon
Vai rolar ou não a cola depois que voce homologou ??/
Obrigado

João Luis

Opa!! Fala João Luiz, tudo blz?

Cara são tantos detalhes e tanta coisa que ainda não tive tempo de preparar algo mais completo então se quiser fazer uma lista de suas dúvidas e postar aqui eu vou te respondendo.

Abraço!!

Giu

Giuliano
Assim. Eu trabalho com linux e FlagShip.
Então pelo que eu entendi eu preciso gerar uma autenticação Md5 no arquivo antes de colocar a linha que tem o o registro EAD.
Isso pra mim parece facil, rodo o comando
md5sun arquivodados.txt > chave.txt
Ele vai me dar a linha com o hash do arquivodados.txt dentro do arquivo com o nome chaves.txt
Dai no registro do ead eu preciso colocar este hash mais a minha assinatura digital.

Minha duvida é em relação a assinatura digital.
Eu gero uma assinatura via o arquivo keygen e mantenho ela salva.
Dai o que eu preciso colocar dentro do arquivo xml ???

Obrigado

João Luis

Então João,

Na verdade a assinatura digital nada mais é que o Hash do arquivo cifrado com um algoritimo de chave pública/privada no caso o RSA.

Então os passos seriam os seguintes.

  • Gerar um par de chaves pública/privada. OBS: Vai precisar do expoente da chave pública também.
  • Gerar o hash do arquivo.
  • Gerar a assinatura utilizando a chave privada e incluir a assinatura no arquivo de dados.
  • Incluir no arquivo xml a chave pública e o expoente que será utilizada para validar a assinatura do arquivo no programa eecfc.

Espero ter esclarecido as suas dúvidas.

Se precisar das classes em java posso te enviar.

Abraço!!

Flw!

[quote=giulianon]Então João,

Na verdade a assinatura digital nada mais é que o Hash do arquivo cifrado com um algoritimo de chave pública/privada no caso o RSA.

Então os passos seriam os seguintes.

  • Gerar um par de chaves pública/privada. OBS: Vai precisar do expoente da chave pública também.
  • Gerar o hash do arquivo.
  • Gerar a assinatura utilizando a chave privada e incluir a assinatura no arquivo de dados.
  • Incluir no arquivo xml a chave pública e o expoente que será utilizada para validar a assinatura do arquivo no programa eecfc.

Espero ter esclarecido as suas dúvidas.

Se precisar das classes em java posso te enviar.

Abraço!!

Flw!

[/quote]

Olá Parceiro!

Se puderes enviar as classes p/ mim te agradeço. kthebr@hotmail.com

Sem mais, Obrigado!

Se puderes enviar as classes p/ mim te agradeço.
ivan_camolesi14@yahoo.com.br

Estou apanhando …

Valew, obrigado!!!

Olá, cara estou apanhando tb!
Se possível gostaria que me enviasse as classes para a assinatura ead… grato!
andremizuno@gmail.com

Conseguiram fazer as assinaturas do EAD? Estou com problemas aqui pra fazer essa parte…

Puxa, não estou nem dormindo a noite com esta história de PAF-ECF. Pegando carona no tópico, alguém sabe onde eu obtenho o nº do laudo?

Obg.

Alguém conseguiu fazer a assinatura do EAD?

Não sei se o tópico morreu, mas estou com o mesmo erro quando tento gerar a assinatura do bloco com 128 bytes:
Data must not be longer than 117 bytes

Alguém sabe me dizer como resolvo?

Obrigaod.

Conseguiram resolver?

Podem dar alguma ajuda. Obrigado!

Acho que o tópico morreu. Me lembro que usei o OpenSSL para resolver.
Estava com pouco tempo e não estava conseguindo resolver em Java.
Não me lembro bem dos detalhes, mas dê uma olhada em http://www.openssl.org/related/binaries.html