Salta ai contenuti

Flusso di lavoro degli accordi firmati

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

Un accordo firmato non è «un PDF con una firma sopra». È un documento preparato affinché la firma protegga i byte corretti. È firmato a un livello coerente con l’obbligo. È confezionato in modo da restare verificabile anche dopo la scadenza del certificato di firma. Questa pagina percorre lo scenario dal documento vuoto al contratto destinato a durare nel tempo. Dichiara con franchezza quali passaggi il motore cabla oggi e quali espone come superficie congelata.

Un contratto che risulta verificabile il giorno della firma e fallisce tre anni dopo in una controversia è peggio dell’assenza totale di firma, perché qualcuno vi ha fatto affidamento. Il problema raramente è la crittografia. Di solito mancano una marca temporale o prove di revoca, e lo si scopre molto tempo dopo che il firmatario è passato ad altro.

Scegliere in anticipo l’obbligo di firma e produrre al momento della firma le prove richieste da quell’obbligo è la differenza tra un accordo che regge e uno che decade silenziosamente. È una decisione da prendere una sola volta, nel flusso di lavoro, anziché riscoprirla a ogni controversia.

  • Prima preparare, poi firmare. Una firma copre esattamente l’intervallo di byte su cui è stata calcolata. Assicurarsi che il documento sia definitivo — incluse eventuali revisioni accodate in seguito — prima di firmare, non dopo.
  • Scegliere il livello in base all’obbligo, non il contrario. PAdES definisce una progressione: una firma di base, una con marca temporale, una con materiale di convalida incorporato e una rimarcata per la validità d’archiviazione a tempo indefinito (ETSI EN 319 142-2 §5.1).
  • La validità a lungo termine è una struttura, non una proprietà. Consiste in un Document Security Store più una marca temporale di documento, scritti nel file (ISO 32000-2:2020 §12.8).
  • Essere precisi sulla giuntura. Il metodo di alto livello Document::setSignature() di NextPDF congela l’API pubblica, ma fallisce rapidamente anziché emettere un file non firmato. Il percorso cablato è l’orchestratore di livello più basso. Questa pagina non lascia intendere il contrario.

NextPDF separa la decisione dal meccanismo. La decisione è quale livello PAdES l’obbligo richiede. Il meccanismo è come i byte vengono firmati e come viene trasportato il materiale di convalida. Trattare queste due cose come una sola porta i team a ritrovarsi con una firma valida ma non durevole.

Lo scenario si articola in quattro fasi.

  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.
Lo scenario dell'accordo firmato dall'inizio alla fine: ogni fase aggiunge una garanzia, e il livello scelto nella seconda fase determina quante prove devono produrre la terza e la quarta fase.

L’enum dei livelli è reale e codifica l’obbligo in modo esplicito. B-B prova l’identità del firmatario. B-T aggiunge una marca temporale attendibile. Il «quando» viene richiesto con la stessa fermezza del «chi». B-LT incorpora i certificati e le risposte di revoca necessari per convalidare la firma dopo la scadenza del certificato di firma. B-LTA aggiunge marche temporali di documento affinché la catena di fiducia possa essere estesa a tempo indefinito tramite rimarcatura prima della scadenza di ciascun certificato di marca temporale. L’enum indica quali livelli richiedono una marca temporale e quali richiedono materiale di convalida incorporato, così che il motore possa rifiutare una combinazione impossibile anziché produrre un file “firmato” in modo fuorviante.

La progressione è fondata su standard. Evidence: Standard-backed Spec: ETSI EN 319 142-2, §5.1 descrive i livelli PAdES stratificati sui blocchi costitutivi EN 319 142-1, da una firma di base incorporata in poi. La struttura a lungo termine è fissata da Spec: ISO 32000-2:2020, §12.8 : la convalida a lungo termine poggia su un Document Security Store e su un dizionario di marca temporale di documento scritti nel file.

Il modello dei livelli è fondato su codice. Evidence: Code-backed L’enum SignatureLevel ha i quattro casi PAdES (B-B, B-T, B-LT, B-LTA) con metodi predicativi per «richiede una marca temporale», «richiede materiale di convalida incorporato» e «richiede marche temporali di documento». Il metodo di alto livello Document::setSignature() è cablato a una protezione fail-fast che solleva un messaggio diagnostico bloccante e azionabile anziché emettere un documento non firmato — un comportamento verificabile, non un’affermazione.

Il comportamento di manutenzione a lungo termine è documentato a livello di capacità per il livello Premium: la superficie di archiviazione scrive il DSS e il VRI per ciascuna firma, verifica la completezza dell’archiviazione con un controllo di integrità e rimarca con una marca temporale di documento prima che il certificato di marca temporale scada. La documentazione afferma chiaramente che spetta al verificatore decidere.

L’esempio mostra la decisione — la scelta dell’obbligo — usando l’enum reale. Il percorso di firma cablato è l’orchestratore di livello più basso. La chiamata di alto livello è mostrata solo per rendere esplicito il comportamento fail-fast.

<?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

L’oggetto livello non è un’etichetta. Risponde a ciò che l’obbligo comporta, così che il cablaggio a valle non debba ricavarlo di nuovo.

L’equivoco ricorrente è «la firma è valida, quindi abbiamo finito». La validità di oggi è necessaria ma non sufficiente. Una firma è calcolata su un intervallo di byte. Qualunque cosa accodata al di fuori di tale intervallo in una revisione successiva non è coperta da essa, ed è esattamente per questo che la preparazione precede la firma. Una firma che risulta verificabile ora può fallire in seguito, alla scadenza del suo certificato, a meno che il materiale di convalida non sia stato incorporato al momento della firma. «Valida» e «durevole» sono garanzie diverse, e solo l’obbligo indica quale delle due serva realmente.

Una trappola correlata, specifica di questo motore: presumere che il metodo di alto livello setSignature() produca oggi un file firmato. Non lo fa. Fallisce rapidamente di proposito. Considerare il messaggio diagnostico come il contratto.

  • Document::setSignature() è una superficie pubblica congelata, non un firmatario cablato. Fallisce rapidamente con un messaggio diagnostico bloccante. Non emette mai un PDF non firmato al posto di uno firmato. Il percorso cablato è l’orchestratore a due fasi di livello più basso.
  • La manutenzione della convalida a lungo termine (DSS/VRI, controllo di integrità, ciclo di marca temporale d’archiviazione) è una capacità di livello Premium. Core non fornisce il ciclo di archiviazione. Vedere il confine più sotto.
  • Una firma protegge esattamente il suo intervallo di byte. Le revisioni accodate in seguito sono separate. Il motore non estende retroattivamente la copertura.
  • NextPDF produce e mantiene le strutture; non giudica. Se una firma sia attendibile dipende dalle ancore di fiducia e dalla policy del verificatore, che restano al di fuori del motore.
  • B-LTA da solo non rende una firma eterna. Abilita la validità a tempo indefinito solo se il ciclo di rimarcatura viene eseguito secondo programma prima della scadenza di ciascun certificato di marca temporale.
  • Questa pagina descrive il comportamento della superficie di archiviazione Premium. Non afferma alcuna accettazione da parte di un tribunale o di un’autorità specifici.
PAdES signing and long-term validity — edition availability
Edition Availability
Core

Core espone l’enum SignatureLevel e la superficie congelata Document::setSignature() (fail-fast). L’orchestratore cablato di livello più basso copre la firma di base. La manutenzione d’archiviazione a lungo termine non è in Core.

Pro

La firma di base PAdES (B-B / B-T) tramite l’orchestratore è disponibile.

Enterprise

Aggiunge B-LT / B-LTA, la manutenzione del Document Security Store e del VRI per ciascuna firma, il controllo di integrità LTV e il ciclo d’archiviazione con marca temporale di documento per la validità a tempo indefinito.

  • Profili di base PAdESB-B, B-T, B-LT, B-LTA spiegati come progressione e come scegliere.
  • Convalida a lungo termine — perché una firma che risulta verificabile oggi può fallire tra dieci anni, e come la LTV incorpora le prove.
  • Guida alla decisione di integrazione — quale pacchetto dell’ecosistema si adatta a un flusso di lavoro di firma, inclusa la giuntura di approvazione umana in NextPDF Connect.
  • PAdES — PDF Advanced Electronic Signatures: la famiglia di profili ETSI che definisce come una firma elettronica avanzata viene trasportata in un PDF.
  • Intervallo di byte — l’estensione contigua di byte del file su cui è calcolata una firma; il contenuto al di fuori di esso non è protetto da tale firma.
  • Livello di firma (B-B / B-T / B-LT / B-LTA) — la progressione PAdES: chi ha firmato, quando, con materiale di convalida incorporato e rimarcabile per la validità d’archiviazione a tempo indefinito.
  • TSA — Time-Stamping Authority: un servizio RFC 3161 che attesta che uno stato del documento esisteva in un dato istante UTC.
  • DSS (Document Security Store) — l’archivio nel file di certificati, risposte OCSP e CRL necessari per convalidare una firma dopo la scadenza del suo certificato.
  • LTV (Long-Term Validation) — mantenere una firma verificabile nel tempo incorporando le prove di convalida e rimarcandola.
  • Fail-fast — rifiutare di produrre un artefatto fuorviante sollevando invece un errore azionabile, anziché emettere un file silenziosamente errato.