Pular para o conteúdo

Fluxo de trabalho para contratos assinados

Spec: ETSI EN 319 142-2, §5.1 Spec: ISO 32000-2:2020, §12.8 Evidence: Mixed evidence

Um contrato assinado não é “um PDF com uma assinatura dentro dele.” É um documento preparado para que a assinatura proteja os bytes corretos. Ele é assinado em um nível compatível com a obrigação. É empacotado de modo que continue verificável depois que o certificado de assinatura expira. Esta página percorre esse cenário, do documento em branco até o contrato durável. Ela é transparente sobre quais etapas o motor integra hoje e quais ele expõe como uma superfície congelada.

Um contrato que é verificável no dia em que é assinado e falha três anos depois, durante uma disputa, é pior do que nenhuma assinatura, porque alguém confiou nele. A falha raramente está na criptografia. Geralmente é a falta de um carimbo de data/hora ou de evidência de revogação, percebida muito depois de o signatário já ter seguido em frente.

Escolher a obrigação de assinatura antecipadamente e produzir, no momento da assinatura, a evidência que essa obrigação exige é a diferença entre um contrato que se sustenta e um que se deteriora silenciosamente. Esta é uma decisão a tomar uma vez, no fluxo de trabalho, em vez de redescobri-la a cada disputa.

  • Prepare e depois assine. Uma assinatura cobre exatamente o intervalo de bytes sobre o qual foi calculada. Decida que o documento é final — incluindo quaisquer revisões anexadas depois — antes de assinar, não depois.
  • Escolha o nível pela obrigação, não o contrário. O PAdES define uma progressão: uma assinatura básica, uma com carimbo de data/hora, uma com material de validação embutido e uma recarimbada para validade de arquivamento indefinida (ETSI EN 319 142-2 §5.1).
  • A validade de longo prazo é uma estrutura, não uma propriedade. É um Document Security Store mais um carimbo de data/hora de documento, gravado no arquivo (ISO 32000-2:2020 §12.8).
  • Seja preciso sobre o ponto de junção. O método de alto nível Document::setSignature() do NextPDF congela a API pública, mas falha rapidamente em vez de emitir um arquivo não assinado. O caminho integrado é o orquestrador de nível mais baixo. Esta página não finge o contrário.

O NextPDF separa a decisão do mecanismo. A decisão é de qual nível PAdES a obrigação precisa. O mecanismo é como os bytes são assinados e como o material de validação é transportado. Tratar isso como uma coisa só é o que faz as equipes acabarem com uma assinatura válida, mas não durável.

O cenário tem quatro estágios.

  1. Prepare the document Compose the agreement and treat it as final. The signature will protect this exact byte range and nothing added outside it without a new revision.
  2. Choose the obligation B-B proves who. B-T adds trusted time. B-LT embeds the material to validate later. B-LTA re-stamps for indefinite validity.
  3. Sign A CMS signature is embedded in the signature dictionary over the byte range; a timestamp is requested from a TSA if the level needs one.
  4. Preserve For long-term levels, the Document Security Store and a document timestamp are written so the signature outlives its certificate.
O cenário de contrato assinado de ponta a ponta: cada estágio adiciona uma garantia, e o nível que você escolhe no estágio dois determina quanta evidência os estágios três e quatro devem produzir.

O enum de nível é real e codifica a obrigação com precisão. B-B comprova a identidade do signatário. B-T adiciona um carimbo de data/hora confiável. O “quando” é tratado com a mesma firmeza que o “quem”. B-LT embute os certificados e as respostas de revogação necessários para validar a assinatura depois que o certificado de assinatura expira. B-LTA adiciona carimbos de data/hora de documento para que a cadeia de confiança possa ser estendida indefinidamente por meio do recarimbamento antes que cada certificado de carimbo de data/hora expire. O enum sabe quais níveis exigem um carimbo de data/hora e quais exigem material de validação embutido, de modo que o motor possa recusar uma combinação impossível em vez de produzir um arquivo enganosamente “assinado”.

A progressão é respaldada por norma. Evidence: Standard-backed Spec: ETSI EN 319 142-2, §5.1 descreve os níveis PAdES construídos sobre os blocos da EN 319 142-1, de uma assinatura embutida básica em diante. A estrutura de longo prazo é definida pela Spec: ISO 32000-2:2020, §12.8 : a validação de longo prazo apoia-se em um Document Security Store e em um dicionário de carimbo de data/hora de documento gravados no arquivo.

O modelo de nível é respaldado por código. Evidence: Code-backed O enum SignatureLevel tem os quatro casos PAdES (B-B, B-T, B-LT, B-LTA) com métodos predicados para “exige um carimbo de data/hora”, “exige material de validação embutido” e “exige carimbos de data/hora de documento”. O método de alto nível Document::setSignature() está integrado a uma proteção de falha rápida que gera um diagnóstico bloqueante e acionável em vez de emitir um documento não assinado — um comportamento verificável, não uma alegação.

O comportamento de manutenção de longo prazo está documentado em nível de capacidade para o nível Premium: a superfície de arquivamento grava o DSS e o VRI por assinatura, inspeciona a completude do arquivamento com uma verificação de integridade e recarimba com um carimbo de data/hora de documento antes que o certificado de carimbo de data/hora expire. A documentação deixa claro que o verificador ainda decide.

Isto mostra a decisão — selecionar a obrigação — usando o enum real. O caminho de assinatura integrado é o orquestrador de nível mais baixo. A chamada de alto nível aparece apenas para tornar explícito o comportamento de falha rápida.

<?php
declare(strict_types=1);
use NextPDF\Security\Signature\SignatureLevel;
/**
* Map a business obligation to a PAdES level.
*
* The obligation drives the level, not the reverse — choosing B-B for a
* 10-year contract is a decision you do not want to make implicitly.
*/
function levelForObligation(string $obligation): SignatureLevel
{
return match ($obligation) {
// Internal sign-off, short retention, signer identity is enough.
'internal_approval' => SignatureLevel::PAdES_B_B,
// Counterparty agreement: prove the moment of signing.
'counterparty_agreement' => SignatureLevel::PAdES_B_T,
// Regulated contract that must verify after cert expiry.
'regulated_contract' => SignatureLevel::PAdES_B_LT,
// Long-lived legal record: indefinite, re-stampable validity.
'long_term_legal_record' => SignatureLevel::PAdES_B_LTA,
default => throw new \InvalidArgumentException(
"Unknown obligation: {$obligation}",
),
};
}
$level = levelForObligation('regulated_contract');
// The enum carries the obligation's implications with it.
$needsTsa = $level->requiresTimestamp(); // true for B-T+
$needsDss = $level->requiresDss(); // true for B-LT+
$needsArchive = $level->requiresDocumentTimestamp(); // true only for B-LTA

O objeto de nível não é um rótulo. Ele responde ao que a obrigação implica, de modo que a integração a jusante não precise derivar isso novamente.

O equívoco recorrente é “a assinatura é válida, então terminamos.” A validade hoje é necessária, mas não suficiente. Uma assinatura é calculada sobre um intervalo de bytes. Qualquer coisa anexada fora desse intervalo em uma revisão posterior não é coberta por ela, e é exatamente por isso que a preparação vem antes da assinatura. Além disso, uma assinatura verificável agora pode falhar mais tarde, quando o certificado dela expirar, a menos que o material de validação tenha sido embutido no momento da assinatura. “Válida” e “durável” são garantias diferentes, e somente a obrigação diz qual delas você realmente precisa.

Uma armadilha relacionada e específica deste motor: presumir que o método de alto nível setSignature() produz um arquivo assinado hoje. Ele não produz. Ele falha rapidamente de propósito. Trate o diagnóstico como o contrato.

  • Document::setSignature() é uma superfície pública congelada, não um assinador integrado. Ele falha rapidamente com um diagnóstico bloqueante. Ele nunca emite um PDF não assinado no lugar de um PDF assinado. O caminho integrado é o orquestrador de duas fases de nível mais baixo.
  • A manutenção da validação de longo prazo (DSS/VRI, verificação de integridade, o ciclo de carimbo de data/hora de arquivamento) é uma capacidade do nível Premium. O Core não fornece o ciclo de arquivamento. Veja a fronteira abaixo.
  • Uma assinatura protege exatamente o intervalo de bytes dela. Revisões anexadas posteriormente são separadas. O motor não estende a cobertura retroativamente.
  • O NextPDF produz e mantém as estruturas; ele não julga. Se uma assinatura é confiável depende das âncoras de confiança e da política do verificador, que estão fora do motor.
  • O B-LTA não torna uma assinatura eterna por si só. Ele habilita validade indefinida somente se o ciclo de recarimbamento for executado pontualmente antes que cada certificado de carimbo de data/hora expire.
  • Esta página é de nível de comportamento sobre a superfície de arquivamento Premium. Ela não afirma nenhuma aceitação por qualquer tribunal ou autoridade específica.
PAdES signing and long-term validity — edition availability
Edition Availability
Core

O Core expõe o enum SignatureLevel e a superfície congelada Document::setSignature() (falha rápida). O orquestrador integrado de nível mais baixo cobre a assinatura baseline. A manutenção de arquivamento de longo prazo não está no Core.

Pro

A assinatura baseline PAdES (B-B / B-T) via orquestrador está disponível.

Enterprise

Adiciona B-LT / B-LTA, o Document Security Store e a manutenção de VRI por assinatura, a verificação de integridade da LTV e o ciclo de arquivamento de carimbo de data/hora de documento para validade indefinida.

  • Perfis baseline PAdESB-B, B-T, B-LT, B-LTA explicados como uma progressão e como escolher.
  • Validação de longo prazo — por que uma assinatura verificável hoje pode falhar em dez anos, e como a LTV embute a evidência.
  • O guia de decisão de integração — qual pacote do ecossistema se encaixa em um fluxo de trabalho de assinatura, incluindo o ponto de junção de aprovação humana no NextPDF Connect.
  • PAdES — PDF Advanced Electronic Signatures: a família de perfis da ETSI que define como uma assinatura eletrônica avançada é transportada em um PDF.
  • Intervalo de bytes — o trecho contíguo de bytes do arquivo sobre o qual uma assinatura é calculada; o conteúdo fora dele não é protegido por essa assinatura.
  • Nível de assinatura (B-B / B-T / B-LT / B-LTA) — a progressão PAdES: quem assinou, quando, com material de validação embutido e recarimbável para validade de arquivamento indefinida.
  • TSA — Time-Stamping Authority (autoridade de carimbo de data/hora): um serviço RFC 3161 que afirma que um estado do documento existiu em um dado instante UTC.
  • DSS (Document Security Store) — o repositório no arquivo de certificados, respostas OCSP e CRLs necessários para validar uma assinatura depois que o certificado dela expira.
  • LTV (Long-Term Validation) — manter uma assinatura verificável ao longo do tempo, embutindo a evidência de validação e recarimbando-a.
  • Falha rápida — recusar-se a produzir um artefato enganoso e levantar um erro acionável, em vez de emitir silenciosamente um arquivo errado.