Files

2.5 KiB

Assinaturas XML (XMLDSig e ICP-Brasil)

Este documento descreve a especificação e o funcionamento da assinatura digital de arquivos XML no padrão W3C XMLDSig (XML Digital Signatures) e ICP-Brasil no CyberCore Signer.


1. Visão Geral

O CyberCore Signer fornece suporte nativo a assinaturas digitais XML utilizando a engine padronizada e segura da plataforma Java (javax.xml.crypto.dsig).

1.1 Casos de Uso Suportados

  • Documento Inteiro Envelopado (URI=""): Contratos, despachos, declarações e relatórios em formato XML.
  • Assinatura de Elementos Específicos por ID:
    • NF-e (Nota Fiscal Eletrônica): Assinatura da tag <infNFe Id="NFe...">
    • CT-e (Conhecimento de Transporte Eletrônico): Assinatura da tag <infCte Id="CTe...">
    • MDF-e (Manifesto Eletrônico de Documentos Fiscais): Assinatura da tag <infMDFe Id="MDFe...">
    • eSocial / EFD-Reinf: Assinatura de eventos com tags <evt... Id="...">

2. Padrões Criptográficos

  • Canonicalização (C14N): http://www.w3.org/TR/2001/REC-xml-c14n-20010315 (C14N inclusiva sem comentários).
  • Transformações:
    • http://www.w3.org/2000/09/xmldsig#enveloped-signature (remove a assinatura do cálculo do digest).
    • C14N padrão.
  • Algoritmo de Digest: SHA-256 (http://www.w3.org/2001/04/xmlenc#sha256).
  • Algoritmo de Assinatura: RSA-SHA256 (http://www.w3.org/2001/04/xmldsig-more#rsa-sha256).
  • KeyInfo: Informações do certificado X.509 embutidas em <X509Data><X509Certificate>.

3. Segurança e Mitigação contra XXE

O parser XML é configurado com blindagem estrita contra ataques XML External Entity (XXE) e expansões recursivas de entidades:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
dbf.setXIncludeAware(false);
dbf.setExpandEntityReferences(false);

4. Validação Pós-Assinatura

O serviço XmlSigningService.validateXmlSignature(byte[] xmlBytes) permite auditar a assinatura imediatamente após sua emissão, verificando:

  1. A integridade criptográfica da assinatura (SignedInfo).
  2. A integridade dos digests de todas as referências apontadas (Reference.validate()).
  3. O certificado X.509 público extraído da chave.