2.5 KiB
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="...">
- NF-e (Nota Fiscal Eletrônica): Assinatura da tag
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:
- A integridade criptográfica da assinatura (
SignedInfo). - A integridade dos digests de todas as referências apontadas (
Reference.validate()). - O certificado X.509 público extraído da chave.