Assinatura digital do XML fiscal: o que é assinado, como se confere e por que um espaço a mais invalida a nota
Publicado em · Atualizado em · Por Equipe PegaXML
Resumo
Os documentos fiscais eletrônicos são arquivos XML assinados digitalmente com certificado ICP-Brasil, no padrão XML Digital Signature do W3C. A assinatura cobre o grupo principal de informações do documento: qualquer alteração depois da assinatura, mesmo de um caractere, faz a conferência falhar. Depois da autorização, a Sefaz anexa o protocolo, que traz um resumo do mesmo conteúdo assinado. Conferir assinatura e protocolo é o jeito técnico de saber se um XML recebido é autêntico.
Por que o XML fiscal precisa de assinatura
Um arquivo XML é texto. Qualquer pessoa pode abri-lo num editor, trocar um número e salvar. A assinatura digital resolve isso de duas formas ao mesmo tempo:
- Autoria. Ela mostra quem gerou o documento, porque só o titular do certificado tem a chave privada que produz aquela assinatura.
- Integridade. Ela mostra que o conteúdo não mudou depois de assinado. Uma alteração mínima faz a conferência falhar.
No Brasil, a assinatura com certificado da ICP-Brasil tem a presunção de veracidade prevista no art. 10 da MP 2.200-2/2001. É por isso que NF-e, NFC-e, CT-e, MDF-e e os seus eventos exigem certificado ICP-Brasil, e não qualquer certificado.
O padrão usado
Os documentos fiscais eletrônicos usam o padrão XML Digital Signature (XMLDSig), do W3C. O Manual de Orientação do Contribuinte da NF-e define como ele é aplicado:
| Elemento | Como é usado na NF-e |
|---|---|
| Formato | Enveloped: a assinatura fica dentro do próprio XML |
| O que é assinado | O grupo principal de informações da nota, referenciado pelo seu identificador, que leva a chave de acesso |
| Certificado | X.509 da ICP-Brasil, incluído na assinatura para permitir a conferência |
| Canonicalização | Algoritmo que padroniza o texto antes do cálculo, para que espaços e quebras de linha irrelevantes não mudem o resultado |
| Algoritmos de resumo e de assinatura | Definidos no manual vigente |
Algoritmos, transformações e versões estão no Manual de Orientação do Contribuinte publicado no Portal da NF-e. Para programar, use sempre a versão vigente, e não exemplos antigos.
O que a assinatura cobre e o que não cobre
A assinatura cobre o grupo principal de informações do documento: identificação, emitente, destinatário, itens, impostos, totais, transporte, pagamento e informações adicionais. A estrutura completa está em estrutura do XML da NF-e.
Ficam fora da assinatura do emitente:
- o protocolo de autorização, que a Sefaz devolve depois;
- na NFC-e, o grupo suplementar com o conteúdo do QR Code e a URL de consulta, que tem autenticação própria por meio do CSC. Veja QR Code da NFC-e.
Do arquivo assinado ao arquivo autorizado
- O emissor monta o XML e calcula a chave de acesso.
- O certificado assina. O sistema calcula o resumo do conteúdo, cifra esse resumo com a chave privada e grava a assinatura no arquivo, junto com o certificado público.
- A Sefaz confere. Recalcula o resumo, decifra a assinatura com a chave pública e compara. Confere também se o certificado é ICP-Brasil, se está dentro da validade, se não foi revogado e se pertence ao emitente.
- A Sefaz autoriza e devolve o protocolo, com número, data e hora, situação e um valor de resumo que corresponde ao conteúdo assinado.
- O arquivo distribuído reúne a nota assinada e o protocolo. É esse conjunto que o emitente envia ao destinatário e que ambos devem guardar.
Por que um caractere invalida tudo
O resumo criptográfico muda completamente com qualquer alteração. Trocar "10,00" por "10,01", corrigir um acento na descrição ou remover um espaço dentro de um campo faz o resumo recalculado não bater com o assinado. A conferência falha.
A canonicalização existe para que diferenças sem significado, como a ordem de atributos e certos espaços entre tags, não atrapalhem. Mas ela não salva mudanças de conteúdo. Por isso:
- não abra e salve XML fiscal em editores que reformatam o arquivo;
- não converta a codificação de caracteres do arquivo;
- não "corrija" dados no XML: use os instrumentos formais, como a carta de correção ou o cancelamento.
Como o destinatário confere um XML recebido
O Ajuste SINIEF 07/2005 manda o destinatário verificar a validade e a autenticidade da NF-e e a existência da autorização de uso (cláusula 10ª, § 1º). Na prática:
- Valide a assinatura com um verificador de XML ou com o próprio sistema que importa a nota.
- Confira o certificado: cadeia ICP-Brasil e raiz do CNPJ igual à do emitente.
- Confira o protocolo: ele precisa existir e indicar autorização.
- Consulte a chave no portal da Sefaz. A consulta mostra a situação atual: uma nota pode ter sido cancelada depois de autorizada.
- Guarde o arquivo original, sem regravar. Veja guarda do XML por 5 anos.
Quem recebeu o XML por e-mail e quer ter certeza de que é o arquivo autorizado pode também obtê-lo pelos serviços da Sefaz. Os caminhos estão em como o destinatário obtém o XML.
Eventos também são assinados
Cada evento é um XML próprio, com assinatura de quem o registra:
| Evento | Quem assina |
|---|---|
| Cancelamento e carta de correção da NF-e | Emitente |
| Pedido de inutilização | Emitente |
| Manifestação do destinatário | Destinatário |
| Encerramento e inclusão de condutor no MDF-e | Emitente do MDF-e |
| Eventos do CT-e | Conforme o evento |
Por isso o certificado vencido trava eventos, e não só emissões. Veja certificado digital vencido.
E a NFS-e nacional
No padrão nacional da NFS-e, o contribuinte envia a DPS (Declaração de Prestação de Serviço), e o ambiente nacional gera a NFS-e. Quando a DPS é enviada por sistema, ela é assinada com certificado. Pelo FAQ oficial da NFS-e, um procurador pode assinar a DPS com o próprio certificado em nome do prestador, desde que tenha procuração eletrônica no Portal da Receita; sem ela, a nota é rejeitada com o código E0718. O fluxo está em DPS.
Exemplo fictício
Uma empresa recebe por e-mail o XML de uma compra de R$ 3.200. O analista fiscal importa o arquivo e o sistema acusa assinatura inválida. Ao abrir o XML, ele percebe que alguém do fornecedor abriu o arquivo num editor e "corrigiu" a descrição de um item. O analista pede o arquivo original e, enquanto isso, baixa o XML pela chave de acesso nos serviços da Sefaz. O arquivo oficial passa na validação, e é ele que vai para o arquivo fiscal da empresa.
Perguntas frequentes
O que exatamente é assinado na NF-e?
O grupo principal de informações da nota, identificado pela chave de acesso. A assinatura fica dentro do próprio XML, logo depois desse grupo, no formato chamado enveloped.
Posso editar um XML autorizado para corrigir um dado?
Não. Qualquer alteração invalida a assinatura e o arquivo deixa de corresponder ao que a Sefaz autorizou. Correções seguem os caminhos formais: carta de correção, cancelamento, nota complementar ou devolução.
Como sei se um XML recebido é autêntico?
Valide a assinatura com um verificador de XML, confira se o certificado é ICP-Brasil e da empresa emitente, e consulte a chave de acesso no portal da Sefaz para confirmar a autorização e a situação atual.
A assinatura perde a validade quando o certificado do emitente vence?
Não para os documentos já autorizados. Eles foram assinados quando o certificado era válido e receberam o protocolo da Sefaz. O vencimento posterior só impede novas assinaturas.
Eventos como cancelamento também são assinados?
Sim. Cancelamento, carta de correção, inutilização, manifestação do destinatário e encerramento do MDF-e são XMLs próprios, assinados pelo autor do evento.