Salta ai contenuti

Il panorama degli standard

Spec: ISO 32000-2 Spec: ETSI EN 319 142-1 Spec: RFC 3161 Spec: WCAG 2.2 Evidence: Standard-backed

Un motore PDF non risponde a un solo documento. Risponde a una piccola federazione di documenti, redatti da enti diversi, che si richiamano a vicenda. Questa pagina è la mappa di quella federazione, così come NextPDF la traccia. È anche il percorso che una clausola compie da «lo dice uno standard» a «il motore lo fa, e un test lo dimostra».

È scritta per un ingegnere senior che deve sapere quale documento governa un comportamento, prima di decidere se la lettura che ne dà NextPDF sia difendibile.

«Supporto PDF» è un’affermazione che nasconde una domanda: supporto a che cosa, esattamente. La sintassi di base è ISO 32000-2. Le firme passano per ETSI. Le marche temporali sono un protocollo IETF. HTML e CSS che il motore usa per il rendering ricadono sotto W3C. La crittografia sottostante è NIST. L’accessibilità dell’output ricade di nuovo sotto W3C.

Se una libreria tratta tutto questo come un’unica massa indifferenziata, non è possibile ragionare su un guasto. Quando un validatore rifiuta una fattura firmata, la prima domanda utile non è «il PDF è rotto». È «quale clausola di quale standard non è stata soddisfatta, e da quale lato». Per porre quella domanda, serve una mappa che indichi gli enti e un resoconto onesto di come una clausola diventa comportamento.

  • NextPDF traccia cinque enti di normazione. ISO possiede il formato. ETSI possiede i profili di firma europei. IETF possiede i protocolli di trasporto (marche temporali, primitive crittografiche per riferimento). W3C possiede HTML, CSS e i criteri di accessibilità. NIST possiede gli algoritmi crittografici approvati.
  • Questi documenti formano dei percorsi, non un elenco: un’unica capacità di PDF firmato attraversa ISO → ETSI → IETF → NIST, e ciascun livello fa riferimento normativo al successivo.
  • Una clausola non diventa comportamento per il solo fatto di essere letta. Diventa comportamento per il fatto di essere parafrasata e citata, mappata a un requisito, implementata e fissata da un test. La pagina che descrive il comportamento lo dichiara con il proprio livello di evidenza.
  • Dove una clausola è obbligatoria, porta una parola chiave normativa (uno shall, un must). NextPDF tratta quelle parole chiave come il contratto. Uno should è una raccomandazione che documenta come tale, non una garanzia.

ISO 32000-2 è il centro. Definisce che cos’è un file conforme. Un file conforme deve rispettare ogni requisito del documento, pur essendo libero di omettere qualsiasi funzionalità che il documento non richieda esplicitamente Spec: ISO 32000-2, §6 . Fissa inoltre l’obbligo a carico di chi scrive: tutto ciò che NextPDF crea o modifica in un file deve essere conforme al formato e restare coerente con gli elementi già presenti Spec: ISO 32000-2, §6 . È in forza di quell’unica clausola che il motore rifiuta di emettere un aggiornamento incrementale strutturalmente incoerente. Non è una preferenza di NextPDF. È la regola del formato stesso.

Da quel centro, ISO 32000-2 punta verso l’esterno. La sua gestione delle firme è definita «mediante riferimento» alla serie ETSI EN 319 142 per PAdES. A sua volta ETSI fa riferimento alla RFC 3161 IETF per il token di marca temporale, e alla serie NIST FIPS per gli algoritmi di hash e di firma. Una capacità è quindi un percorso attraverso più documenti, ciascuno dei quali è normativo per il proprio livello.

  1. Step 1 of 5: ISO 32000-2 §12.8 signatures
  2. Step 2 of 5: ETSI EN 319 142-1 PAdES baseline
  3. Step 3 of 5: RFC 3161 timestamp token
  4. Step 4 of 5: NIST FIPS 180-4 hash strength
  5. Step 5 of 5: WCAG 2.2 tagged output
Il percorso di standard che attraversa un singolo PDF firmato validabile a lungo termine: ISO definisce il contenitore e rimanda a ETSI per il profilo di firma; ETSI richiede una marca temporale IETF; le primitive crittografiche sono approvate da NIST; l'output del rendering è vincolato all'accessibilità W3C. Ogni freccia è un riferimento normativo, non un'associazione vaga.

Il modo pericoloso di lavorare sugli standard è leggere una clausola e poi scrivere il codice a memoria. Il percorso di NextPDF è deliberatamente più lungo, proprio perché può essere sottoposto ad audit:

  1. Retrieve The clause is read from the standard, not from memory.
  2. Cite It is paraphrased and pinned with a chunk digest, never quoted.
  3. Classify Its keyword (shall / should / may) sets whether it is a contract or a recommendation.
  4. Map The obligation becomes a concrete engine requirement.
  5. Implement The requirement is built into the pipeline.
  6. Pin A test holds the behaviour against drift.
  7. Tag The page that describes it declares its evidence level.
Il percorso da una clausola normativa a un comportamento del motore verificato da test: recuperare e citare la clausola, classificarne l'obbligo in base alla parola chiave normativa, mapparla a un requisito del motore, implementarla, fissarla con un test e contrassegnare la pagina che la documenta con la sua base di evidenza. Una clausola che si ferma prima del test è un'affermazione, non un comportamento.

Il passo di «classificazione» è il punto in cui si risolve la maggior parte delle ambiguità. Le specifiche codificano i propri livelli di requisito in parole chiave: la nota famiglia MUST, SHALL, SHOULD, MAY. Il significato di quelle parole chiave è fissato dalla convenzione IETF sulle parole chiave di requisito, aggiornata per chiarire che solo le forme in maiuscolo sono normative, e poi sovrapposto alla prosa descrittiva di ciascuna specifica Spec: RFC 2119 Spec: RFC 8174 . NextPDF legge uno shall come un confine rigido che il motore non oltrepassa, e uno should come una raccomandazione che segue e documenta come raccomandazione — mai come una promessa. Quella distinzione è la differenza tra una dichiarazione di capacità onesta e una rivendicazione eccessiva.

«Conforme» è raramente un solo bit. Gli standard di firma sono articolati in livelli: il profilo europeo a lungo termine con archiviazione, ad esempio, esiste proprio per aggiungere token di marca temporale che mantengono una firma validabile molto dopo la sua creazione Spec: ETSI EN 319 122-1, §6 . È una rivendicazione rigorosamente più forte di una semplice firma baseline. Lo standard di accessibilità segue lo stesso schema: un livello di conformità si raggiunge soltanto soddisfacendo ogni criterio di successo a quel livello, e una dichiarazione indica il livello effettivamente raggiunto Spec: WCAG 2.2, §5.2.1 . NextPDF dichiara quindi il profilo e il livello, non un generico «conforme».

Questa pagina è Evidence: Standard-backed : ogni affermazione è ancorata a una clausola, parafrasata e citata tramite digest, così che il revisore successivo possa riverificarla sulla fonte.

LivelloEnteClausola di ancoraggio (parafrasata)Che cosa governa in NextPDF
FormatoISOGli elementi creati o modificati da chi scrive devono essere conformi e restare coerenti Spec: ISO 32000-2, §6 Il PDF che il motore emette
ConformitàISOUn file conforme soddisfa tutti i requisiti; le funzionalità aggiuntive sono facoltative Spec: ISO 32000-2, §6 Che cosa significa «output valido»
Profilo di firmaETSIIl livello a lungo termine con archiviazione aggiunge marche temporali per la validazione successiva Spec: ETSI EN 319 122-1, §6 Il profilo PAdES a cui mira una firma
Tempo attendibileIETFUn servizio di marcatura temporale dimostra che un dato esisteva prima di un certo istante Spec: RFC 3161, §2 Il token di marca temporale del documento
CrittografiaNISTGli hash approvati differiscono per la robustezza di sicurezza che conferiscono Spec: NIST FIPS 180-4, §1 L’algoritmo di digest sotto una firma
Accesso all’outputW3CUn livello di conformità richiede ogni criterio a quel livello Spec: WCAG 2.2, §5.2.1 Rivendicazioni di accessibilità sui PDF generati dal rendering

I digest citati sono registrati nel front-matter citations di questa pagina. Qui non viene riprodotto alcun testo degli standard. La regola che governa questa scelta è descritta in una pagina dedicata. Vedere Disciplina delle citazioni.

Non si esegue il panorama degli standard; lo si legge per decidere che cosa chiedere al motore. In concreto, una chiamata di firma validabile a lungo termine è una dichiarazione su quale punto del percorso è richiesto:

examples/36-sign-pades-b-b-and-b-t.php
<?php
declare(strict_types=1);
use NextPDF\Core\Document;
use NextPDF\Security\Signature\CertificateInfo;
use NextPDF\Security\Signature\DigitalSigner;
use NextPDF\Security\Signature\SignatureLevel;
// The signature level is a coordinate on the ISO -> ETSI -> RFC trail.
// PAdES B-B is the ETSI baseline CMS SignedData the Core engine produces;
// B-T adds an RFC 3161 timestamp, and B-LT/B-LTA add the DSS and document
// timestamps that keep a signature validatable after the certificate
// expires. The level you name is the point on the trail you are asking for.
$certInfo = CertificateInfo::fromFiles(
certPath: 'signer-cert.pem',
keyPath: 'signer-key.pem',
);
// The functional signing path is the direct two-phase signing engine.
// (Document::setSignature() records intent but its writer seam is not yet
// wired and fail-fasts on output — see the PadesOrchestrator docblock.)
$signer = new DigitalSigner(
certInfo: $certInfo,
level: SignatureLevel::PAdES_B_B,
);
$result = $signer->sign(file_get_contents('agreement.pdf'));
printf(
"PAdES %s CMS: %d bytes, timestamp=%s\n",
SignatureLevel::PAdES_B_B->value,
$result->getSize(),
$result->hasTimestamp() ? 'yes' : 'no',
);

Indicare PAdES_B_LTA anziché una semplice baseline non è un parametro di prestazioni. È una decisione su quanto in profondità nel percorso di standard arriva l’obbligo. B-LT e B-LTA chiamano in causa i livelli DSS e di marca temporale di archiviazione e richiedono il pacchetto LTV enterprise a runtime. Anziché degradare silenziosamente, il motore rifiuta di fingere che un livello inferiore ne fornisca uno superiore.

La trappola è leggere «NextPDF è conforme agli standard» come un’unica garanzia totale. Non lo è, e non lo è quella di alcun motore onesto. La conformità è per standard, per clausola e per livello. NextPDF mira alla baseline PDF 2.0, a profili PAdES nominati e a livelli di accessibilità dichiarati — ciascuno circoscritto, ciascuno citato. Un’affermazione senza una clausola e un livello a supporto è marketing, e Insider_ non la pubblica.

La seconda trappola, più sottile, è supporre che uno should normativo sia una promessa. È una raccomandazione. NextPDF documenta le raccomandazioni come raccomandazioni. Le garanzie del motore sono costruite a partire dalle clausole shall, e la differenza è portante.

Questa pagina è la mappa, non il territorio. Non enumera ogni clausola che NextPDF implementa, e non è un certificato di conformità. La prova per ciascun comportamento risiede nella pagina tematica responsabile di quel comportamento, con il livello di evidenza proprio di quella pagina — ad esempio PDF 2.0: cosa è cambiato per il delta di formato.

Anche il panorama degli standard si muove. Vengono pubblicate nuove edizioni. I riferimenti vengono ridiretti. Una clausola citata qui è fissata allo snapshot del corpus registrato nel citations di questa pagina. Quando uno standard a monte viene revisionato, la citazione viene rivalidata sulla nuova clausola, non si presume che resti valida. Dove questa pagina nomina una capacità di livello Premium, lo fa in termini di quale standard rispetta, mai in termini di meccanismo interno.

  • Ente di normazione — un’organizzazione che pubblica una specifica (ISO, ETSI, IETF, W3C, NIST). Ciascuno possiede un livello diverso dello stack PDF.
  • Clausola normativa — un requisito di uno standard, identificato dalla sua parola chiave (shall/must per obbligatorio, should per raccomandato, may per facoltativo).
  • Percorso di standard — una catena ordinata di specifiche che una singola capacità attraversa, in cui ogni documento fa riferimento normativo al successivo.
  • Livello di conformità — un livello graduato di conformità (un profilo baseline ETSI, un livello WCAG). Una dichiarazione indica il livello effettivamente raggiunto, non un generico «conforme».
  • PAdES — PDF Advanced Electronic Signatures, la famiglia ETSI EN 319 142 di profili di firma a cui ISO 32000-2 fa riferimento per la firma dei PDF.