PAdES na Prática: Como a Assinatura Digital Vive Dentro do PDF
PAdES é o nome do conjunto de regras que define como uma assinatura digital mora dentro de um arquivo PDF. Não é um formato de arquivo novo, não é um contêiner separado e não é um selo visual: é a especificação de onde a assinatura fica, o que ela cobre e como um leitor de PDF deve verificá-la sem precisar consultar ninguém.
Quem trabalha com documentos no Brasil encontra o PAdES em toda parte — é o formato do PDF assinado com e-CPF, do contrato que volta do jurídico com o cadeado no Adobe Reader, do arquivo que o Validador do ITI abre e classifica. E é também o formato onde mais gente se perde, porque a mesma palavra cobre duas gerações de especificação, dois valores de SubFilter e uma lista de níveis que nem sempre significa o que o nome sugere.
Este guia é o mergulho técnico. Anatomia da assinatura dentro do PDF, o que é DocMDP e por que ele importa mais do que parece, como múltiplas assinaturas convivem no mesmo arquivo, o que a ICP-Brasil exige por cima do padrão internacional e como validar o resultado. Para a visão comparativa entre os padrões, comece por PKCS#7, CMS, PAdES e CAdES.
O problema que o PAdES resolve
Uma assinatura CMS comum resolve o problema criptográfico: prova que uma chave privada assinou um conjunto de bytes. O que ela não resolve é o problema documental — o arquivo assinado e a assinatura viram duas coisas separadas, que alguém precisa manter juntas, na ordem certa, para sempre.
O PDF já tinha uma estrutura para isso. A especificação ISO 32000-1 prevê um dicionário de assinatura dentro do próprio documento, e o PAdES, descrito pela ETSI, define como preencher esse dicionário de modo que a assinatura sirva como prova de longo prazo. O DOC-ICP-15 do ITI descreve a mecânica em uma frase: "Um CMS detached é inserido dentro da estrutura de dados do PDF. O conteúdo assinado pelo CMS deve ser todos os bytes do PDF, menos o bloco de bytes do próprio CMS."
Isso tem três consequências práticas que definem tudo o mais:
- O arquivo é autossuficiente. Quem recebe o PDF recebe a assinatura junto. Não há um segundo arquivo para perder.
- A assinatura cobre o documento inteiro, menos o espaço reservado para ela própria. Qualquer byte alterado depois quebra a verificação.
- A verificação é local. Um leitor de PDF aderente faz a conta sozinho, offline, sem consultar a plataforma que gerou o documento.
Anatomia: o que existe dentro de um PDF assinado
Abrir um PDF assinado em um editor de texto revela a estrutura. O que importa está no dicionário de assinatura:
Campo a campo:
/ByteRange— o coração da coisa. São quatro números: início e comprimento do primeiro trecho, início e comprimento do segundo. Juntos cobrem todo o arquivo exceto o bloco onde a assinatura está gravada. É sobre esses bytes que o hash é calculado./Contents— o contêiner CMS em hexadecimal, gravado dentro de um espaço reservado de tamanho fixo. É o "buraco" que o/ByteRangepula./SubFilter— declara qual convenção a assinatura segue. Voltaremos a ele no próximo bloco, porque é onde mora a confusão mais comum./M— o instante declarado pelo signatário. O ITI é explícito sobre a duplicidade: como o PDF tem a entradaMe o CMS tem o atributosigning-timecarregando a mesma informação, o perfil ICP-Brasil orienta codificar a entradaMe não o atributo. É o tipo de detalhe que só aparece quando um validador rígido reclama./Name,/Reason,/Location— metadados declarativos, úteis para leitura humana, sem peso probatório próprio.
A assinatura entra por atualização incremental: o PDF original é preservado byte a byte e os objetos novos são acrescentados no fim do arquivo, com uma nova tabela de referências cruzadas. É isso que permite assinar sem reescrever o documento — e é isso que explica por que "salvar como" em um editor qualquer costuma destruir uma assinatura: reescrever o arquivo muda os bytes que o /ByteRange cobria.
Os dois SubFilters, e por que existem
Essa é a distinção que mais gera dúvida em validação:
| SubFilter | Origem | O que significa |
|---|---|---|
adbe.pkcs7.detached |
ISO 32000-1, herdado do Adobe | CMS/PKCS#7 destacado embutido no PDF. É o formato mais amplamente aceito por leitores e validadores. |
ETSI.CAdES.detached |
PAdES baseado em CAdES, especificado pela ETSI | Mesma mecânica, com o CMS obedecendo às regras de atributos do CAdES. É o que as gerações mais novas do PAdES pedem. |
adbe.pkcs7.sha1 |
Legado | Variante antiga com SHA-1. Deve ser tratada como obsoleta. |
Um PDF com adbe.pkcs7.detached não é uma assinatura "pior". O que muda é qual conjunto de regras o CMS interno segue. Um contêiner com adbe.pkcs7.detached pode carregar os mesmos atributos avançados — inclusive o signingCertificateV2, que amarra a assinatura ao certificado exato que a produziu — e é aceito por praticamente todo leitor e validador do mercado. Na hora de escolher, o critério é o de quem vai receber o arquivo, não o rótulo.
DocMDP: a parte que quase ninguém configura e todo mundo precisa
Há dois papéis para uma assinatura em PDF, e o padrão os trata de forma diferente:
- Assinatura de certificação — é a primeira, e declara o que pode mudar no documento depois dela. Fica registrada na entrada
/Perms /DocMDPdo catálogo do PDF. - Assinatura de aprovação — todas as demais. Atestam concordância, sem redefinir as permissões.
A assinatura de certificação carrega um parâmetro /P dentro de TransformParams, com três níveis possíveis:
| Nível | O que passa a ser permitido depois da certificação | Quando usar |
|---|---|---|
/P 1 |
Nenhuma alteração. Qualquer mudança invalida. | Documento com um único signatário, fechado no ato. |
/P 2 |
Preenchimento de formulário e novas assinaturas. | Documento que ainda vai receber outras assinaturas. |
/P 3 |
O do nível 2, mais anotações e comentários. | Fluxos de revisão que precisam de anotação depois de assinado. |
Escolher errado aqui produz um sintoma clássico: o primeiro signatário assina com /P 1, o segundo assina normalmente e o Adobe Reader passa a exibir que o documento foi alterado depois da certificação. Nada quebrou criptograficamente — o documento apenas declarou que ninguém mais poderia tocá-lo, e alguém tocou.
No SignDocs Brasil o nível é derivado do envelope: a primeira assinatura certifica com /P 1 quando há um único signatário e com /P 2 quando há mais de um; as seguintes entram como assinaturas de aprovação, sem novo DocMDP.
Várias assinaturas no mesmo PDF: série, não paralelo
Aqui está uma diferença estrutural entre o PAdES e os outros padrões, e o DOC-ICP-15 é categórico sobre ela. Em CAdES e XAdES existem três arranjos: assinatura simples, coassinatura (assinaturas paralelas e independentes sobre o mesmo conteúdo) e contra-assinatura (assinatura sobre a assinatura anterior). Em PDF, não: existem assinatura simples e assinatura serial.
Assinatura serial, nas palavras do documento do ITI, é aquela em que "uma assinatura digital é realizada sobre toda a estrutura do documento assinado, inclusive assinaturas anteriores, quando houver". Cada signatário assina o PDF como ele está — com as assinaturas de quem veio antes já dentro dele.
Consequência operacional: em PDF, ordem de assinatura não é preferência de fluxo, é imposição do formato. É por isso que, no SignDocs Brasil, qualquer envelope em que algum signatário use certificado digital passa a ser sequencial, mesmo que tenha sido criado como paralelo — cada assinatura precisa do PDF já assinado pelo anterior. Quando isso acontece, a resposta da API devolve a marcação de modo forçado, e quem envia precisa saber que os convites sairão um a um.
Níveis do PAdES e as políticas da ICP-Brasil
As duas escalas existem em paralelo e não são sinônimos.
Do lado internacional, o PAdES organiza-se em níveis de linha de base: a assinatura básica; o acréscimo de um carimbo do tempo sobre a assinatura; a inclusão dos dados de validação — cadeia de certificados, listas de revogação, respostas OCSP — dentro do próprio arquivo; e, por fim, o encadeamento de carimbos que permite preservar a verificabilidade por décadas.
Do lado brasileiro, o ITI define cinco políticas de assinatura, todas listadas no repositório oficial:
| Sigla | Nome | O que acrescenta |
|---|---|---|
| AD-RB | Assinatura digital com Referência Básica | A política mais básica da ICP-Brasil. |
| AD-RT | Assinatura digital com Referência de Tempo | Acrescenta carimbo do tempo sobre a assinatura. |
| AD-RV | Assinatura digital com Referências para Validação | Inclui referências de validação, como certificados e listas de revogação. |
| AD-RC | Assinatura digital com Referências Completas | Reúne o conjunto necessário para validação. |
| AD-RA | Assinatura digital com Referências para Arquivamento | Acrescenta informações voltadas à preservação de longo prazo. |
Uma assinatura só é PAdES-ICP-Brasil quando, além de atender aos requisitos de assinatura digital ICP-Brasil, carrega um identificador de política pertencente ao conjunto aprovado conforme o DOC-ICP-15.03. E a validação, diz o mesmo documento, deve exigir que a assinatura esteja de acordo com uma das políticas aprovadas.
Se o seu contrato, edital ou norma setorial especifica uma dessas políticas nominalmente, trate isso como requisito técnico explícito e leve ao time comercial antes de fechar o desenho — não é uma configuração que se liga em um painel.
O selo visual não é a assinatura
Vale dizer com todas as letras, porque é a origem de boa parte dos mal-entendidos com clientes e contrapartes. O PAdES permite que a assinatura tenha representação visual na página, e o DOC-ICP-15 é direto: essa visualização "não substitui a validação da assinatura nem acrescenta segurança ao processo", e a imagem exibida pode não ter vínculo algum com o assinante.
Em outras palavras: um carimbo bonito no rodapé não prova nada, e a ausência dele não tira valor de coisa alguma. O que prova é o /ByteRange conferindo, a cadeia subindo até a raiz da ICP-Brasil e o certificado válido à época da aposição.
Como o SignDocs Brasil gera a assinatura PAdES
O caminho é o mesmo no fluxo hospedado e na API, com o perfil de política DIGITAL_CERTIFICATE:
- O PDF recebe, por atualização incremental, um espaço reservado para a assinatura, o dicionário com
/ByteRange,/SubFilter /adbe.pkcs7.detachede a entrada/M, mais o DocMDP quando é a assinatura de certificação. - O servidor calcula o SHA-256 sobre os trechos cobertos pelo
/ByteRangee monta os atributos autenticados, incluindo osigningCertificateV2— a referência ESS que amarra a assinatura ao certificado exato do signatário — e oCMSAlgorithmProtection, que protege a declaração dos algoritmos contra troca. - O hash desses atributos é devolvido para assinatura. Com A1, a chave privada assina no navegador do signatário; com A3, no token, via SignDocsBrasil Assinador falando PKCS#11.
- O servidor monta o CMS com a cadeia do signatário e grava o contêiner no espaço reservado. Algoritmos: SHA-256 com RSA.
Os atributos autenticados são construídos em DER byte a byte, sem passar por uma rodada de reserialização. Isso não é preciosismo: reserializar um DER pode produzir bytes sutilmente diferentes dos que foram assinados, e o sintoma no Validador do ITI é a reprovação da cifra assimétrica em uma assinatura que, do ponto de vista da chave, está perfeita.
Detalhes do fluxo com certificado estão em assinatura com A1 e A3 na Assinatura Expressa e em assinar PDF com e-CPF ou e-CNPJ.
Como validar, e o que costuma dar errado
Três caminhos independentes, e é bom que sejam três:
- Leitor de PDF. Adobe Reader e equivalentes mostram o painel de assinaturas, o status de cada uma e se houve alteração depois da certificação.
- Validador do ITI. Verifica a aderência ao perfil ICP-Brasil, não apenas a matemática.
- Verificação programática. A API de verificação de PDF detecta assinaturas embutidas pelo
/ByteRangee reporta oSubFilterencontrado; o verificador público abre a trilha de auditoria pelo identificador da evidência.
As falhas recorrentes, em ordem de frequência:
- O arquivo foi reaberto e salvo por outro programa. Otimizar, linearizar ou "salvar como" reescreve bytes cobertos pelo
/ByteRange. - Certificado vencido ou revogado. A validação exige certificado válido à época da aposição; cadeia incompleta ou raiz ausente no validador dá o mesmo sintoma.
- DocMDP restritivo demais. Certificar com
/P 1um documento que ainda vai receber assinaturas produz o aviso de alteração posterior. - Versão do PDF. O ITI observa que o arquivo precisa estar na versão 1.7 para que todas as características do PAdES funcionem em um leitor aderente ao ISO 32000-1.
- Confundir assinatura embutida com página de evidências. Uma página de auditoria anexada ao fim do PDF é registro, não assinatura criptográfica. As duas coisas podem coexistir, e coexistem no SignDocs Brasil, mas não se substituem.
Quando o documento não é PDF, a resposta não é converter à força: é o CAdES, que assina o arquivo como ele é. Para XML, o padrão irmão é o XAdES. E a visão de conjunto está na Central de Assinatura Digital.
Perguntas Frequentes
O que exatamente o ByteRange de uma assinatura PAdES cobre?
São quatro números que descrevem dois trechos do arquivo: início e comprimento do primeiro, início e comprimento do segundo. Juntos cobrem todos os bytes do PDF menos o bloco onde o contêiner CMS é gravado. O DOC-ICP-15 do ITI descreve assim: um CMS destacado é inserido na estrutura do PDF, e o conteúdo assinado deve ser todos os bytes do PDF menos o bloco de bytes do próprio CMS. É por isso que reabrir e salvar o arquivo em outro programa costuma quebrar a assinatura: os bytes cobertos mudam.
Qual a diferença entre adbe.pkcs7.detached e ETSI.CAdES.detached?
Os dois embutem um CMS destacado no PDF; muda o conjunto de regras que o CMS interno segue. O adbe.pkcs7.detached vem da especificação ISO 32000-1, herdada do Adobe, e é o mais amplamente aceito por leitores e validadores. O ETSI.CAdES.detached exige que o CMS obedeça às regras de atributos do CAdES e é o que as gerações mais novas do PAdES pedem. Um contêiner adbe.pkcs7.detached pode carregar os mesmos atributos avançados, inclusive o signingCertificateV2. O critério de escolha é quem vai receber o arquivo.
O que é DocMDP e por que o Adobe diz que meu PDF foi alterado?
DocMDP é o parâmetro da assinatura de certificação que declara, dentro do próprio PDF, o que pode mudar depois dela. O nível P igual a 1 não permite nenhuma alteração, P igual a 2 permite preenchimento de formulário e novas assinaturas, e P igual a 3 acrescenta anotações. O aviso de alteração posterior aparece quando o primeiro signatário certifica com P igual a 1 e outro signatário assina depois. Nada quebrou criptograficamente: o documento declarou que ninguém mais poderia tocá-lo.
Por que um envelope com certificado digital vira sequencial?
Porque em PDF não existe coassinatura. O DOC-ICP-15 registra que, para o padrão PAdES, os arranjos possíveis são assinatura simples e assinatura serial, esta definida como aquela em que a assinatura é realizada sobre toda a estrutura do documento, inclusive as assinaturas anteriores. Cada signatário assina o PDF já assinado por quem veio antes. Por isso, no SignDocs Brasil, qualquer envelope com um signatário usando certificado passa a sequencial mesmo se criado como paralelo, e a resposta da API sinaliza o modo forçado.
O carimbo visual da assinatura na página tem valor probatório?
Não por si só. O PAdES permite representação visual da assinatura, mas o DOC-ICP-15 afirma que essa visualização não substitui a validação da assinatura nem acrescenta segurança ao processo, e que a imagem exibida pode não ter vínculo com o assinante. O que prova é o ByteRange conferindo, a cadeia de certificação subindo até a raiz da ICP-Brasil e o certificado válido à época da aposição. Um PDF sem selo visual pode estar perfeitamente assinado, e um PDF com selo pode não estar.
O que torna uma assinatura PAdES uma assinatura PAdES-ICP-Brasil?
Segundo o DOC-ICP-15, é PAdES-ICP-Brasil toda assinatura no formato PAdES que, além de atender aos requisitos de assinatura digital ICP-Brasil, possui um identificador de política de assinatura pertencente ao conjunto de políticas divulgadas e aprovadas conforme o DOC-ICP-15.03. A validação, pelo mesmo documento, deve exigir aderência a uma das políticas aprovadas. Se um edital ou norma setorial especifica uma política nominalmente, trate como requisito técnico explícito e confirme com o jurídico.
Gere PDFs com assinatura ICP-Brasil embutida, sem montar o CMS na mão
Sandbox de homologação gratuito, sem cartão, para testar o fluxo com certificado A1 e A3 de ponta a ponta antes de ir para produção.
Criar credenciais de homologação Fale com o time comercial