Ir para o conteúdo

 Voltar a Fórum Técnico
Tela cheia

Validação externa de assinatura digital

31 de Julho de 2015, 15:08 , por Michele Cristina - | 1 Pessoa seguindo este artigo.
Visualizado 3346 vezes

Adicionado por Luiz Kobayashi 28/01/2015 09:41 h

Bom dia a todos,

Estamos (PMSP/SF) fazendo alguns testes com relação à assinatura digital.

Conseguimos baixar através do módulo de Conferência de Autenticidade de Documentos o arquivo P7S de assinatura e o arquivo contendo o documento que fora assinado via certificado digital no SEI.
Estamos tentando validar o conteúdo da assinatura externamente, porém o openssl não está reconhecendo o arquivo como sendo codificado em ASN.1.

$ openssl smime -verify -content 0009329_Memorando_2.html -in 0009329_LUCAS_MARQUES_MORAIS_DE_LIMA.p7s
Error reading S/MIME message
2283200:error:0D0D40D1:asn1 encoding routines:SMIME_read_ASN1:no content type:asn_mime.c:451:

Alguém sabe qual a codificação utilizada para armazenar a assinatura? Ou alternativamente, qual o procedimento de como validar externamente o vínculo entre a assinatura digital armazenada no SEI e o documento que foi assinado?


66 comentários

  • 9dd6bb47d9e934b64f8a2a2630984b02?only path=false&size=50&d=mmMichele Cristina
    31 de Julho de 2015, 15:08

    Adicionado por Carlos Vieira

    Prezado Luiz,

    Não sei se entendi corretamento o que você está fazendo mas o parâmentro 'in' é para passar a mensagem criptografada a ser verificada e não o certificado. O certificado se passa com o '-certfile'

    O smime -verify do openssl espera uma mensagem s/mime.[1][2] Esse 'p7s' é uma mensagem s/mime?

    A codificação utilizada para armazenar depende da sua AC. Pode ser várias se for utilizando o PKCS#73

    Para verificar qual a codificação do certificado tenta o comando:

    'openssl pkcs7 -in file.pem -text -out certs.pem'

    Onde file.pem é o arquivo assinado/criptografado. E depois vê o arquivo certs.pem

    [1] www.​open​ssl.​org/​docs​/app​s/sm​ime.​html
    [2] en.w​ikip​edia​.org​/wik​i/S/​MIME
    [3] www.​emc.​com/​emc-​plus​/rsa​-lab​s/st​anda​rds-​init​iati​ves/​pkcs​-7-c​rypt​ogra​phic​-mes​sage​-syn​tax-​stan​dar.​htm

  • 9dd6bb47d9e934b64f8a2a2630984b02?only path=false&size=50&d=mmMichele Cristina
    31 de Julho de 2015, 15:09

    Adicionado por Luiz Kobayashi

    Prezado Carlos Vieira,

    Antes de mais nada, agradecemos pelo retorno.

    Acho que o meu post anterior não estava muito claro.

    Na realidade, o que estamos tentando fazer é validar o uso do arquivo de assinatura digital gerado pelo SEI para garantir a irretratabilidade da assinatura por parte do usuário.

    Quando um documento é assinado com certificado digital no SEI, ele armazena a assinatura em sua base de dados.

    É possível a qualquer usuário que possua o código verificador e o CRC do documento acessar a página

    &amp​;amp​;lt;​URLB​ASED​OSEI​&amp​;amp​;gt;​/sei​/con​trol​ador​_ext​erno​.php​?aca​o=do​cume​nto_​conf​erir​&amp​;amp​;id_​orga​o_ac​esso​_ext​erno​=0

    e fazer o download do arquivo P7S associado aquela assinatura digital. Basta clicar em "Clique aqui para baixar o conteúdo para validação da assinatura com certificado digital".

    Entendemos que a finalidade deste arquivo é possibilitar a verificação de autenticidade daquela assinatura, validando o conteúdo do documento e a identidade da pessoa que assinou.

    Anexo a este post, segue um exemplo de conteúdo do arquivo P7S.

    Note no exemplo que, de fato, é apresentado o nome do usuário que assinou o documento e até mesmo o seu certificado público.

    O que não estamos conseguindo fazer foi demonstrar pelo arquivo P7S que o documento assinado foi de fato o documento original.

    Chegamos a utilizar o procedimento descrito no seguinte artigo (com algumas adaptações): qist​oph.​blog​spot​.com​.br/​2012​/01/​manu​al-v​erif​y-pk​cs7-​sign​ed-d​ata-​with​.htm​l

    Porém, no final da validação o hash SHA1 do documento não bate com o hash gerado pela assinatura.

    Nossa interpretação atual é de que talvez o SEI utilize alguma informação adicional além do próprio documento que está sendo assinado para efetuar a assinatura (alguns atributos talvez).

    Tendo a lista completa de parâmetros que é utilizada pelo SEI para gerar a assinatura, seguramente será mais fácil criar o processo de comprovação externa da assinatura.

    Será que existiria a possibilidade de entender de forma mais detalhada e precisa como o SEI gera a assinatura digital dos documentos?

    Agradecemos toda e qualquer ajuda nesse sentido.

    Para referência, abaixo segue o passo a passo que fizemos para tentar sem sucesso validar a assinatura:

    openssl asn1parse -inform der -in 0009329_LUCAS_MARQUES_MORAIS_DE_LIMA.p7s
    ...

    7553:d=8 hl=2 l= 20 prim: OCTET STRING
    :5A96E858329B9727E7C5CFD3066B035844E7A85E pubkey.pem
    openssl rsautl -verify -pubin -inkey pubkey.pem < signed-sha1.bin >verified.bin
    openssl asn1parse -inform der -in verified.bin
    sha1sum.exe 0009329_Memorando_2.html

    port​al.s​oftw​arep​ubli​co.g​ov.b​r/so​cial​/sei​/for​uns/​p7s.​jpg

  • 9dd6bb47d9e934b64f8a2a2630984b02?only path=false&size=50&d=mmMichele Cristina
    31 de Julho de 2015, 15:14

    Adicionado por Carlos Vieira

    Tentou com o PEM? O PEM é o default ao invés do DER.

    Se puder mandar os arquivos eu verifico melhor aqui o que pode ser o problema.

    Se for arquivo confidencial por favor não mande.

  • 9dd6bb47d9e934b64f8a2a2630984b02?only path=false&size=50&d=mmMichele Cristina
    31 de Julho de 2015, 15:16

    Adicionado por Guilherme Andrade Del Cantoni

    Prezado Luiz Kobayashi,

    Um teste de validação pode ser feito através do verificador do ITI, localizado em veri​fica​dor.​iti.​gov.​br

    O importante é que o documento html a ser validado pela assinatura digital não utilize as tarjas de assinatura.

  • 9dd6bb47d9e934b64f8a2a2630984b02?only path=false&size=50&d=mmMichele Cristina
    31 de Julho de 2015, 15:16

    Adicionado por Carlos Vieira

    Sempre sorrio quando vou para uma página do ITI e o browser me diz que essa não é uma página confiável. :)

    Deu certo Luiz?

  • 9dd6bb47d9e934b64f8a2a2630984b02?only path=false&size=50&d=mmMichele Cristina
    31 de Julho de 2015, 15:17

    Adicionado por Luiz Kobayashi

    Vi agora que demorei uma eternidade para responder! Mil desculpas.

    Tentamos pelo verificador do ITI mas sem sucesso. A mensagem retornada é de que os resumos criptográficos estão incorretos.

    LPA
    Online: Sim
    Válida: Sim
    Período: 09/03/2015 12:00:00
    Versão: 2
    PAs
    Utilizada a PA online? Sim
    OID: PA_AD_RB_v1_1.der (2.16.76.1.7.1.1.1.1)
    Integra segundo a LPA: Não implementado.
    Integra: Não implementado.
    Período: de 25/12/2011 10:00:00 até 30/12/2014 10:00:00
    Assinaturas
    Assinante: Assinante desconhecido
    Caminho de certificação: Inválido.
    Mensagem de erro: Validação não é possível
    Está de acordo com o schema.
    Assinatura inválida.
    Resumo criptográfico incorreto.
    Certificados necessários: Assinate apenas.

    LCR
    Atributos Obrigatórios
    Nome do atributo: IdMessageDigest
    Corretude: Válido
    Nome do atributo: IdContentType
    Corretude: Válido
    Nome do atributo: IdAaEtsSigPolicyId
    Corretude: Inválido
    Mensagem de erro: Inconsistência no IdAaEtsSigPolicyIdentifier. Os resumos criptográficos do atributo e da PA não são os mesmos.
    Nome do atributo: IdAaSigningCertificate
    Corretude: Inválido
    Mensagem de erro: Falha ao construir o atributo: 1.2.840.113549.1.9.16.2.12
    Atributos Opcionais
    Nome do atributo: IdSigningTime
    Válidade: Válido
    Carimbos do tempo
    Não existem carimbos do tempo na assinatura.

Essa comunidade não possui posts nesse blog