Pular para o conteúdo
getnextpdf.com

Carimbos de tempo e tempo confiável

Spec: RFC 3161Spec: RFC 5816Spec: ISO 32000-2, §12.8.5

Um carimbo de tempo não registra “quando isso foi assinado.” Ele comprova algo mais restrito e mais forte: que um item de dados específico existia antes de um instante específico, atestado por uma parte que não é o signatário. Essa distinção concentra todo o valor do tempo confiável e é frequentemente mal compreendida.

O horário de assinatura contido em uma assinatura é aquilo que o computador do signatário afirmou. Um relógio pode estar errado, por acidente ou de propósito. Se a única evidência do quando for a declaração do próprio signatário, então um signatário pode antedatar ou pós-datar um documento à vontade. Um certificado revogado ontem pode ser apresentado como se tivesse assinado no ano passado. O “quando” não é um detalhe. Ele determina se uma assinatura feita com um certificado agora expirado ou agora revogado ainda é válida. E, se o tempo confiável estiver errado, todo argumento de validade de longo prazo construído sobre ele desmorona.

  • O horário de assinatura do próprio signatário é uma alegação, não uma prova. Ele é trivialmente falsificável.
  • Um carimbo de tempo RFC 3161 é um token assinado de uma Autoridade de Carimbo de Tempo (TSA) que vincula um hash dos seus dados ao horário da TSA.
  • O que ele comprova é preciso: os dados existiam antes do horário declarado pela TSA. Não o momento exato da criação — trata-se de um limite superior.
  • O token ecoa o seu nonce e a sua impressão de mensagem, de modo que ele não pode ser uma repetição nem se referir a dados diferentes.
  • Um carimbo de tempo de documento aplica o mesmo mecanismo ao PDF inteiro, ancorando tudo o que está sob ele — a assinatura e a evidência de validação incorporada — em um instante confiável.

O NextPDF trata um carimbo de tempo como algo a ser verificado, não apenas obtido. Solicitar um token é a menor parte do trabalho. O entendimento do motor é que um token não verificado não é evidência.

Quando o motor carimba o tempo de uma assinatura, ele envia à TSA um hash dos dados e um novo nonce aleatório, nunca os dados em si. O token retornado é então conferido contra o conjunto completo de propriedades que o tornam significativo: o status retornado pela autoridade foi “granted”, o nonce no token corresponde ao que foi enviado, a impressão de mensagem no token corresponde ao hash enviado, a própria assinatura criptográfica do token é verificada, o tipo de conteúdo do token é o tipo de carimbo de tempo e o horário declarado fica dentro de uma tolerância aceitável. Qualquer divergência é uma falha definitiva com um motivo tipado. Não existe um caminho de “parece próximo o suficiente”. Um carimbo de tempo de documento segue a mesma regra, aplicada ao arquivo inteiro em vez do valor de uma única assinatura.

Os dois lados são simétricos de propósito. Quando o motor carimba o tempo de uma assinatura, a impressão que ele envia à TSA é o hash do valor da assinatura do signatário; quando mais tarde verifica esse carimbo de tempo, ele recalcula o mesmo hash e exige que a impressão do token corresponda. O NextPDF expõe a metade de verificação como uma etapa dedicada verifySignatureTimestamp que recebe o valor da assinatura como uma entrada obrigatória — de modo que um carimbo de tempo de assinatura nunca pode ser “verificado” sem de fato conferir aquilo que ele cobre. Essa etapa falha de forma fechada diante de uma entrada vazia, de um algoritmo de impressão não reconhecido ou fraco (SHA-1), de uma impressão malformada ou de um hash que não vincula o valor da assinatura. Um token produzido por uma versão do motor que gerou o hash de uma entrada diferente, portanto, não consegue provar o vínculo, por design.

  1. Hash the dataOnly a digest of the signature value (or the whole PDF, for a document timestamp) is computed — never the data itself.
  2. Send hash + nonceThe digest and a fresh random nonce go to the Time-Stamp Authority.
  3. TSA returns a tokenA signed token binds the digest to the TSA’s genTime and echoes the nonce.
  4. Verify the tokenStatus granted, nonce matches, message imprint matches, token signature verifies, time within tolerance.
  5. Conclude an upper boundThe data provably existed before the TSA’s stated time — attested by a party that is not the signer.
Como um carimbo de tempo confiável é obtido e o que ele comprova: um hash mais um nonce são enviados à TSA, a TSA retorna um token assinado que vincula esse hash ao seu horário, e o verificador confirma o vínculo antes de tratá-lo como prova de que os dados existiam antes daquele horário.

Você não monta um token de carimbo de tempo manualmente. O que importa é o ponto de integração da confiança. Uma TSA é algo que você configura e protege, porque o horário dela se torna a sua evidência.

<?php
declare(strict_types=1);
use NextPDF\Security\Signature\SignatureLevel;
// Asking for any level at or above B-T requires a TSA.
$level = SignatureLevel::PAdES_B_T;
$level->requiresTimestamp(); // true → a Time-Stamp Authority must be supplied
// The TSA endpoint, its transport security, and its trust anchor are
// deployment-supplied. The engine sends a hash plus a fresh nonce — never the
// document — and verifies the returned token before the signature is accepted.
// A token that fails any check (status, nonce, imprint, signature, time)
// is a hard error, not a warning.

O ponto de integração importante é que o motor envia um hash, não o documento, de modo que a TSA nunca vê o seu conteúdo. E ele verifica a resposta. Uma TSA que você não consegue autenticar não é tempo confiável. Ela é apenas mais um relógio.

A armadilha é ler um carimbo de tempo como “isso foi assinado exatamente às 14:32 nesta data.” Ele não funciona como cronômetro do evento de assinatura. Ele comprova que os dados existiam no máximo até o horário da TSA, que é um limite superior definido por um terceiro. A criação pode ter ocorrido em qualquer momento antes disso. Uma segunda armadilha é supor que qualquer servidor de carimbo de tempo fornece tempo confiável a você. Um token cuja assinatura você não consegue verificar, ou em cuja autoridade você não confia, não comprova nada. É um relógio em que você não tem motivo para acreditar. O tempo confiável vem de uma TSA que você consegue autenticar e de um token que você verificou, não do ato de pedir um número a um servidor.

O NextPDF constrói a requisição, envia apenas um hash e verifica o token retornado. Ele não responde pela autoridade por trás dele. A precisão da TSA, a validade do certificado dela e a confiabilidade dessa TSA são propriedades do serviço e da configuração da sua implantação, não do motor. Um carimbo de tempo vincula um hash a um horário. Ele não diz nada sobre o significado dos dados, a identidade do signatário ou se o certificado do signatário era válido. Essas são verificações separadas, abordadas em Validando uma assinatura corretamente. O motor não pode tornar confiável uma TSA não confiável. Esta página também não afirma nenhum peso jurídico específico para um carimbo de tempo; isso depende do status da TSA e da jurisdição. A forma como o tempo confiável é reutilizado para manter uma assinatura verificável ao longo de décadas é abordada em Validação de longo prazo.

Disponibilidade do carimbo de tempo por edição:

RFC 3161 timestamping (signature timestamp and document timestamp) — edition availability
EditionAvailability
CoreNot in this edition
Pro

PAdES B-T — um carimbo de tempo RFC 3161 verificado sobre o valor da assinatura, contra uma TSA fornecida pela implantação.

Enterprise

Adiciona o carimbo de tempo de documento usado por B-LT e B-LTA para ancorar a evidência de validação incorporada e para conduzir o ciclo de renovação de arquivamento.

  • Carimbo de tempo (RFC 3161) — um token assinado de uma TSA que vincula um hash de dados ao horário da TSA, comprovando que os dados existiam antes desse horário.
  • Autoridade de Carimbo de Tempo (TSA) — o serviço confiável que emite tokens de carimbo de tempo.
  • TSTInfo — a estrutura de conteúdo do token: impressão de mensagem, horário de geração, número de série e nonce opcional.
  • Impressão de mensagem — o hash dos dados que recebem o carimbo de tempo, ecoado no token.
  • Nonce — um novo valor aleatório enviado com a requisição e ecoado no token, de modo que a resposta não possa ser uma repetição.
  • Carimbo de tempo de documento — um carimbo de tempo RFC 3161 sobre o PDF inteiro (conforme atualizado pela RFC 5816), ancorando a assinatura e a evidência dela em um instante confiável.