Pular para o conteúdo

Mapeamento de baseline PAdES

PDF Advanced Electronic Signatures (PAdES) é a família de perfis padronizada pela ETSI EN 319 142. Ela define quatro níveis baseline de conformidade — B-B, B-T, B-LT e B-LTA — nos quais cada nível superior acrescenta material ao nível anterior. Esta página mapeia esses níveis para aquilo que o NextPDF produz e separa a superfície do Core das edições Pro e Enterprise. O mapeamento é comportamental: descreve o que o motor emite, não suas classes internas.

Em resumo: o NextPDF Core produz estruturas de assinatura alinhadas a B-B e B-T. O caminho de produção para B-LT e B-LTA está nas edições Pro e Enterprise. Se uma assinatura produzida é aceita como conforme em determinado nível depende do verificador e das âncoras de confiança configuradas nele. Um produtor não pode afirmar a conformidade em nome do verificador.

Terminal window
composer require nextpdf/core:^3

Uma assinatura digital de PDF é uma estrutura SignedData do Cryptographic Message Syntax (CMS) armazenada na entrada Contents do dicionário de assinatura. O array ByteRange indica os intervalos de bytes cobertos pelo digest — ISO 32000-2 §12.8.1. O SignerInfo do CMS carrega os atributos assinados, incluindo os atributos content-type e message-digest — RFC 5652 §5.3. O message digest desses atributos é calculado pelo processo da §5.4. O PAdES usa, dentro do dicionário de assinatura do PDF, o modelo de atributos do CMS Advanced Electronic Signatures (CAdES).

Os quatro níveis de baseline são aditivos:

  • B-B contém a assinatura base com os atributos assinados obrigatórios.
  • B-T acrescenta um atributo de carimbo de tempo de assinatura calculado sobre o valor da assinatura. Esse atributo comprova que a assinatura existia no instante carimbado — ETSI PAdES §5.4.3. Uma Time-Stamping Authority RFC 3161 produz o token — RFC 3161 §2.4.1.
  • B-LT acrescenta material de validação de longo prazo — dados de certificado, Online Certificate Status Protocol (OCSP) e certificate revocation list (CRL) — colocado no Document Security Store — ETSI PAdES §6.2.2, ISO 32000-2 §12.8.4.3 e a colocação de dados de validação descrita na ETSI EN 319 142-2 §6.3.
  • B-LTA acrescenta um archive document time-stamp para manter a validade por longos períodos — ETSI PAdES §6.2.2.

Os quatro níveis são estritamente aditivos — cada nível superior mantém tudo o que o nível anterior carregava e acrescenta exatamente uma nova camada de material. Os rótulos de transição mostram a edição produtora que disponibiliza cada etapa.

+ RFC 3161 sig time-stamp

(Core / Enterprise
+ Document Security Store

(Enterprise only)
+ archive doc time-stamp

(Enterprise only)

B-B

CMS signature + signed attributes

B-T

+ signature time-stamp (over the signature value)

B-LT

+ DSS validation material (cert, OCSP, CRL)

B-LTA

+ archive document time-stamp (over the DSS)

;

not

Pro)

Diagram

Use o enum SignatureLevel para selecionar um nível. Ele define os casos PAdES_B_B, PAdES_B_T, PAdES_B_LT e PAdES_B_LTA. Seus métodos requiresTimestamp(), requiresDss(), requiresDocumentTimestamp() e isAvailableInEnvironment() informam os requisitos de cada nível e se o runtime atual consegue atendê-los. Na distribuição Core, isAvailableInEnvironment() retorna true para B-B e B-T e false para B-LT e B-LTA. Ele retorna false para B-LT e B-LTA porque o produtor de validação de longo prazo é resolvido em runtime e não faz parte do pacote open source. O código de produção deve consumir o contrato SignerInterface em vez desses tipos internos.

NívelO que ele acrescentaCore (nextpdf/core)Pro / Enterprise
B-BAssinatura base com atributos assinados obrigatóriosProduz estrutura alinhada; testado contra baselines golden sintéticosMesma superfície
B-TCarimbo de tempo de assinatura sobre o valor da assinaturaProduz estrutura alinhada quando um serviço de carimbo de tempo RFC 3161 é fornecidoMesma superfície
B-LTDados de validação no Document Security StoreProdutor não disponibilizado no Core; selecionar B-LT sem o pacote Enterprise falha de forma fechadaProdutor disponibilizado
B-LTAArchive document time-stampProdutor não disponibilizado no Core; falha de forma fechada como acimaProdutor disponibilizado

“Produz estrutura alinhada” significa que o NextPDF emite uma assinatura cuja estrutura segue as cláusulas citadas. Os artefatos tests/Corpus/pades/ e tests/Golden/baselines/ do projeto exercitam essa estrutura. Isso não significa que um validador externo certifique a saída nesse nível. Consulte a seção de conformidade.

examples/contracts/signing-quickstart.php
<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use NextPDF\Contracts\SignerInterface;
/**
* Sign a byte range with any SignerInterface implementation.
*
* @param SignerInterface $signer A Core or Premium signer.
* @param string $byteRange The PDF byte range to sign.
*
* @return string Hex-encoded CMS SignedData for the PDF /Contents field.
*/
function signByteRange(SignerInterface $signer, string $byteRange): string
{
return $signer->sign($byteRange)->toHex();
}

A função depende do contrato SignerInterface, não de uma classe concreta. Tanto um signer de software do Core (B-B ou B-T) quanto um signer Premium de hardware security module (HSM) satisfazem esse contrato. O código chamador não muda quando a edição muda.

examples/contracts/signing-level.php
<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use NextPDF\Security\Signature\SignatureLevel;
/**
* Resolve the highest baseline level the current runtime can produce.
*
* B-B and B-T are produced by the Core distribution. B-LT and B-LTA
* require the Enterprise long-term-validation package; without it the
* level reports unavailable so callers fail closed rather than emit a
* structure that does not carry the validation material the level names.
*
* @return SignatureLevel The highest level available in this runtime.
*/
function highestAvailableLevel(): SignatureLevel
{
foreach ([
SignatureLevel::PAdES_B_LTA,
SignatureLevel::PAdES_B_LT,
SignatureLevel::PAdES_B_T,
SignatureLevel::PAdES_B_B,
] as $level) {
if ($level->isAvailableInEnvironment()) {
return $level;
}
}
return SignatureLevel::PAdES_B_B;
}

isAvailableInEnvironment() retorna true para B-B e B-T sem um pacote extra. Ele retorna true para B-LT e B-LTA somente quando o pacote de validação de longo prazo Enterprise está instalado. Se você selecionar um nível indisponível sem optar pela degradação, o NextPDF lança uma exceção tipada de nível inalcançável cuja mensagem informa o pacote ausente. Uma implantação mal configurada, portanto, falha de forma fechada em vez de emitir silenciosamente um nível mais baixo do que o solicitado pelo chamador.

  • Uma assinatura estruturalmente B-T não é o mesmo que uma assinatura validada como B-T. A validação ocorre no verificador, com as âncoras de confiança e a atualidade dos dados de revogação desse verificador. O produtor não pode afirmar o resultado.
  • PAdES B-LT e B-LTA exigem o pacote NextPDF Enterprise (nextpdf/enterprise). Se ele não estiver instalado, o signer falha de forma fechada e B-LT/B-LTA ficam indisponíveis. O Core fornece B-B/B-T por meio da interface pública NextPDF\Contracts\SignerInterface; a validação de longo prazo permanece por trás de LtvManagerInterface. Selecionar um nível indisponível no Core falha de forma fechada por padrão. A exceção tipada informa o pacote público ausente, não um tipo interno. A degradação graciosa para um nível mais baixo é opt-in, nunca o padrão.
  • O digest do byte-range deve excluir o valor da assinatura. Se o digest também cobrir os octetos de Contents, a verificação nunca será bem-sucedida — ISO 32000-2 §12.8.1.
  • Em B-T, o carimbo de tempo de assinatura é calculado sobre o valor da assinatura, não sobre os bytes do documento. Em B-LTA, o carimbo de tempo de arquivamento é um document time-stamp separado. Eles não são intercambiáveis — ETSI PAdES §5.4.3 e §6.2.2.
  • A ETSI EN 319 142-1 (a parte de níveis de baseline) não está no corpus de evidências deste projeto. As alegações sobre a estrutura de níveis aqui são ancoradas na ETSI EN 319 142-2, no documento de perfil pades, na ISO 32000-2 §12.8 e em RFC 5652 / RFC 3161. Os nomes de nível e a estrutura aditiva são declarados como implementados em v3.x. Esta página não alega nenhum resultado de teste de conformidade ou atestação de terceiros.

O custo cresce com o nível. B-B é uma única operação de assinatura e leva milissegundos de um único dígito para uma chave de software. B-T acrescenta uma viagem de ida e volta de rede à Time-Stamping Authority. B-LT acrescenta uma busca de revogação por certificado na cadeia. B-LTA acrescenta um document time-stamp adicional. O orçamento de wall de 1500 ms cobre uma única assinatura B-T com uma Time-Stamping Authority (TSA) remota em uma conexão já aquecida. B-LT ou B-LTA contra um endpoint de revogação lento ultrapassa esse orçamento e deve ficar fora do caminho da requisição. O perfil de reprodutibilidade é structural, não bitwise. Um carimbo de tempo embute o instante de assinatura, então duas execuções diferem nos bytes do carimbo de tempo enquanto a estrutura do documento permanece idêntica.

O nível que uma assinatura alega e o nível em que ela é validada são fatos diferentes. Esta página descreve apenas a superfície do produtor. A validação de longo prazo depende dos dados de validação coletados no momento da assinatura e de o verificador confiar nas mesmas âncoras posteriormente. O produtor não pode garantir nenhum dos dois fatos. A confiança no carimbo de tempo se reduz à confiança na Time-Stamping Authority, que a implantação define por meio de um provedor injetável. Esta página está marcada como export_control_class: legal-review-required porque diz respeito a perfis de assinatura criptográfica. Todas as fontes normativas são parafraseadas, e nenhuma é reproduzida, conforme as práticas de higiene de citação.

AlegaçãoNormaCláusulaEvidência
O valor da assinatura é armazenado codificado em DER como SignedData de CMS ou um TimeStampToken na entrada Contents do dicionário de assinatura.ISO 32000-2§12.8.1
O digest é calculado sobre os intervalos de ByteRange e exclui o valor da assinatura.ISO 32000-2§12.8.1
O atributo de carimbo de tempo de assinatura é calculado sobre o valor da assinatura (B-T).ETSI PAdES (EN 319 142)§5.4.3
O material de validação de longo prazo é carregado no Document Security Store (B-LT).ETSI PAdES (EN 319 142) / ISO 32000-2§6.2.2 / §12.8.4.3,
Os dados de validação são colocados nos dicionários DSS e VRI.ETSI EN 319 142-2§6.3,
Um archive document time-stamp mantém a validade por longos períodos (B-LTA).ETSI PAdES (EN 319 142)§6.2.2
O SignerInfo carrega os atributos assinados content-type e message-digest.RFC 5652§5.3
O message digest é calculado sobre os atributos assinados codificados em DER (processo da §5.4).RFC 5652§5.4
O carimbo de tempo é solicitado de uma TSA RFC 3161 e retorna uma estrutura TSTInfo.RFC 3161§2.4.1

Todas as cláusulas são parafraseadas. O NextPDF não reproduz texto normativo. Consulte as normas publicadas para a redação autoritativa. A ETSI EN 319 142-1 não está no corpus de evidências. As alegações estruturais sobre os níveis de baseline são ancoradas nas fontes acima e declaradas como implementadas em v3.x.

O Core produz estruturas de assinatura B-B e B-T. O caminho de produção para B-LT e B-LTA, a custódia de chaves HSM e PKCS#11 e o perfil de política de cripto FIPS 140-3 vêm nas edições Pro e Enterprise. O Core resolve o produtor de validação de longo prazo em runtime, então o motor open source não carrega nenhuma dependência comercial. A API SignerInterface não muda na atualização.

  • Segurança / Assinatura — a superfície de implementação para CMS, carimbo de tempo, validação de longo prazo (LTV), cadeia de confiança e revogação.
  • Contratos / Assinatura — a service provider interface (SPI) SignerInterface e os níveis de estabilidade.
  • Segurança — superfície de implementação de criptografia e assinatura.
  • Conformidade — aplicação de PDF/A e de perfis associada ao arquivamento assinado.
  • PAdES · PAdES B-T · DSS · CAdES — termos do glossário.