Przejdź do głównej zawartości

Krajobraz standardów

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

Silnik PDF nie odpowiada przed jednym dokumentem. Odpowiada przed niewielką federacją standardów, opracowanych przez różne organizacje, które wzajemnie się do siebie odwołują. Ta strona przedstawia tę federację tak, jak śledzi ją NextPDF. Pokazuje też drogę, którą klauzula przechodzi od „standard tak mówi” do „silnik tak robi, a test to potwierdza”.

Jest napisana dla doświadczonego inżyniera, który musi wiedzieć, który dokument reguluje dane zachowanie, zanim oceni, czy interpretacja tego dokumentu przez NextPDF jest możliwa do obrony.

„Obsługa PDF” to deklaracja, która ukrywa pytanie: obsługa czego, dokładnie? Podstawową składnię określa ISO 32000-2. Podpisy przechodzą przez ETSI. Znaczniki czasu to protokół IETF. HTML i CSS renderowane przez silnik należą do W3C. Kryptografia leżąca u podstaw to NIST. Dostępność wyniku ponownie należy do W3C.

Jeśli biblioteka traktuje je jako jeden niezróżnicowany blok, nie da się sensownie analizować awarii. Gdy walidator odrzuca podpisaną fakturę, użytecznym pierwszym pytaniem nie jest „czy PDF jest uszkodzony?”. Brzmi ono: „klauzula którego standardu nie została spełniona i po której stronie?”. Aby zadać to pytanie, potrzebna jest mapa, która wskazuje organizacje, oraz uczciwy opis tego, jak klauzula staje się zachowaniem.

  • NextPDF śledzi pięć organizacji standaryzacyjnych. ISO odpowiada za format. ETSI odpowiada za europejskie profile podpisów. IETF odpowiada za protokoły transmisji (znaczniki czasu, prymitywy kryptograficzne przez odwołanie). W3C odpowiada za HTML, CSS i kryteria dostępności. NIST odpowiada za zatwierdzone algorytmy kryptograficzne.
  • Te dokumenty tworzą ścieżki, a nie listę: pojedyncza zdolność dotycząca podpisanego PDF przechodzi przez ISO → ETSI → IETF → NIST, gdzie każda warstwa normatywnie odwołuje się do następnej.
  • Klauzula nie staje się zachowaniem przez samo jej przeczytanie. Staje się nim dopiero wtedy, gdy zostaje sparafrazowana i zacytowana, odwzorowana na wymaganie, zaimplementowana i przypięta testem. Strona opisująca to zachowanie komunikuje to przez swój poziom dowodu.
  • Gdy klauzula jest obowiązkowa, zawiera słowo kluczowe normatywne (shall, must). NextPDF traktuje te słowa kluczowe jako kontrakt. should to zalecenie, które dokumentuje jako zalecenie, a nie jako gwarancję.

ISO 32000-2 jest punktem centralnym. Definiuje, czym jest plik zgodny. Plik zgodny musi spełniać każde wymaganie dokumentu, a jednocześnie może pominąć każdą funkcję, której dokument wyraźnie nie wymaga Spec: ISO 32000-2, §6 . Nakłada też obowiązek na podmiot zapisujący: wszystko, co NextPDF tworzy lub zmienia w pliku, musi być zgodne z formatem i pozostać spójne z już istniejącymi elementami Spec: ISO 32000-2, §6 . Ta jedna klauzula sprawia, że silnik odmawia wyemitowania strukturalnie niespójnej aktualizacji przyrostowej. To nie jest preferencja NextPDF. To reguła samego formatu.

Z tego punktu centralnego ISO 32000-2 wskazuje na zewnątrz. Obsługa podpisów jest w nim zdefiniowana „przez odwołanie” do serii ETSI EN 319 142 dla PAdES. ETSI z kolei odwołuje się do IETF RFC 3161 w sprawie tokenu znacznika czasu oraz do serii NIST FIPS w sprawie algorytmów skrótu i podpisu. Dana zdolność jest więc ścieżką przez kilka dokumentów, z których każdy jest normatywny dla swojej własnej warstwy.

  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
Ścieżka standardów, którą przechodzi pojedynczy podpisany PDF z możliwością długoterminowej walidacji: ISO definiuje kontener i wskazuje na ETSI dla profilu podpisu; ETSI wymaga znacznika czasu IETF; prymitywy kryptograficzne są zatwierdzone przez NIST; wynik renderowania jest oceniany względem dostępności W3C. Każda strzałka to odwołanie normatywne, a nie luźne skojarzenie.

Niebezpieczna wersja pracy ze standardami polega na przeczytaniu klauzuli, a następnie kodowaniu z pamięci. Ścieżka NextPDF jest celowo dłuższa, ponieważ właśnie tę dłuższą ścieżkę można audytować:

  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.
Ścieżka od klauzuli normatywnej do przetestowanego zachowania silnika: pobierz i zacytuj klauzulę, sklasyfikuj jej obowiązek według słowa kluczowego normatywnego, odwzoruj ją na wymaganie silnika, zaimplementuj ją, przypnij ją testem i oznacz dokumentującą ją stronę jej podstawą dowodową. Klauzula, która zatrzymuje się przed testem, jest deklaracją, a nie zachowaniem.

Krok „sklasyfikuj” to moment, w którym rozstrzyga się większość niejednoznaczności. Specyfikacje kodują swoje poziomy wymagań w słowach kluczowych: dobrze znana rodzina MUST, SHALL, SHOULD, MAY. Znaczenie tych słów kluczowych ustala konwencja słów kluczowych wymagań IETF, później doprecyzowana tak, by normatywne były wyłącznie formy pisane wielkimi literami, a następnie stosowana do opisowej treści każdej specyfikacji Spec: RFC 2119 Spec: RFC 8174 . NextPDF odczytuje shall jako twardą granicę, której silnik nie przekracza, a should jako zalecenie, które stosuje i dokumentuje jako zalecenie — nigdy jako obietnicę. To rozróżnienie wyznacza różnicę między uczciwą deklaracją zdolności a deklaracją na wyrost.

„Zgodny” rzadko oznacza pojedynczy bit. Standardy podpisów są poziomowane — europejski profil długoterminowy z archiwizacją istnieje na przykład właśnie po to, aby dodawać tokeny znaczników czasu, które utrzymują podpis walidowalnym długo po jego utworzeniu Spec: ETSI EN 319 122-1, §6 . To deklaracja ściśle silniejsza niż sam podpis na poziomie podstawowym. Standard dostępności ma podobny kształt: poziom zgodności osiąga się tylko poprzez spełnienie każdego kryterium sukcesu na tym poziomie, a deklaracja podaje poziom, który faktycznie osiągnięto Spec: WCAG 2.2, §5.2.1 . NextPDF podaje zatem profil i poziom, a nie nieokreślone „zgodny”.

Ta strona jest Evidence: Standard-backed : każda deklaracja jest zakotwiczona w klauzuli, sparafrazowana i zacytowana wraz ze skrótem, aby kolejny recenzent mógł ponownie zweryfikować ją względem źródła.

WarstwaOrganizacjaKlauzula kotwicząca (sparafrazowana)Co reguluje w NextPDF
FormatISOUtworzone lub zmienione elementy podmiotu zapisującego muszą być zgodne i pozostać spójne Spec: ISO 32000-2, §6 PDF, który emituje silnik
ZgodnośćISOPlik zgodny spełnia wszystkie wymagania; dodatkowe funkcje są opcjonalne Spec: ISO 32000-2, §6 Co oznacza „poprawny wynik”
Profil podpisuETSIPoziom długoterminowy z archiwizacją dodaje znaczniki czasu do późniejszej walidacji Spec: ETSI EN 319 122-1, §6 Profil PAdES, na który celuje podpis
Zaufany czasIETFUsługa znakowania czasem dowodzi, że dana wielkość istniała przed określonym czasem Spec: RFC 3161, §2 Token znacznika czasu dokumentu
KryptografiaNISTZatwierdzone skróty różnią się siłą bezpieczeństwa, którą zapewniają Spec: NIST FIPS 180-4, §1 Algorytm skrótu pod podpisem
Dostęp do wynikuW3CPoziom zgodności wymaga każdego kryterium na tym poziomie Spec: WCAG 2.2, §5.2.1 Deklaracje dostępności dla wyrenderowanych plików PDF

Zacytowane skróty są zapisane we frontmatterze citations tej strony. Żadna treść standardów nie jest tu odtwarzana. Reguła, która reguluje ten wybór, sama ma osobną stronę. Zobacz Dyscyplina cytowania.

Krajobrazu standardów się nie uruchamia; czyta się go, aby zdecydować, o co poprosić silnik. W praktyce wywołanie podpisu z możliwością długoterminowej walidacji to deklaracja tego, którego punktu na ścieżce potrzebujesz:

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',
);

Nazwanie PAdES_B_LTA zamiast samego poziomu podstawowego nie jest przełącznikiem wydajności. To decyzja o tym, jak głęboko w ścieżkę standardów sięga obowiązek. B-LT i B-LTA włączają warstwy DSS oraz znaczników czasu archiwizacji i wymagają pakietu enterprise LTV w czasie działania. Zamiast po cichu obniżać poziom, silnik odmawia udawania, że niższy poziom dostarcza wyższy.

Pułapką jest odczytanie „NextPDF jest zgodny ze standardami” jako pojedynczej, całkowitej gwarancji. Tak nie jest i żaden uczciwy silnik takiej nie oferuje. Zgodność dotyczy konkretnego standardu, konkretnej klauzuli i konkretnego poziomu. NextPDF celuje w poziom podstawowy PDF 2.0, nazwane profile PAdES oraz określone poziomy dostępności — każdy z nich opatrzony zakresem i cytowaniem. Deklaracja bez stojącej za nią klauzuli i poziomu to marketing, a Insider_ tego nie publikuje.

Druga, subtelniejsza pułapka to założenie, że normatywne should jest obietnicą. To zalecenie. NextPDF dokumentuje zalecenia jako zalecenia. Gwarancje silnika są zbudowane z klauzul shall, a ta różnica ma znaczenie.

Ta strona to mapa, a nie teren. Nie wylicza każdej klauzuli, którą implementuje NextPDF, i nie jest certyfikatem zgodności. Dowód dla danego zachowania znajduje się na stronie tematycznej, która opisuje to zachowanie, wraz z właściwym dla niej poziomem dowodu — na przykład PDF 2.0: co się zmieniło dla różnicy formatu.

Krajobraz standardów również się zmienia. Pojawiają się nowe wydania. Odwołania są aktualizowane. Klauzula zacytowana tutaj jest przypięta do migawki korpusu zapisanej we frontmatterze citations tej strony. Gdy standard nadrzędny jest poprawiany, cytowanie jest ponownie walidowane względem nowej klauzuli, a nie uznawane automatycznie za przeniesione. Tam, gdzie ta strona nazywa zdolność z poziomu Premium, robi to na poziomie standardu, do którego się odwołuje, nigdy na poziomie wewnętrznego mechanizmu.

  • Organizacja standaryzacyjna — organizacja, która publikuje specyfikację (ISO, ETSI, IETF, W3C, NIST). Każda odpowiada za inną warstwę stosu PDF.
  • Klauzula normatywna — wymaganie w standardzie, identyfikowane na podstawie słowa kluczowego (shall/must dla obowiązkowego, should dla zalecanego, may dla opcjonalnego).
  • Ścieżka standardów — uporządkowany łańcuch specyfikacji, przez który przechodzi pojedyncza zdolność, gdzie każdy dokument normatywnie odwołuje się do następnego.
  • Poziom zgodności — stopniowalny szczebel zgodności (podstawowy profil ETSI, poziom WCAG). Deklaracja podaje poziom faktycznie osiągnięty, a nie nieokreślone „zgodny”.
  • PAdES — PDF Advanced Electronic Signatures, rodzina profili podpisów ETSI EN 319 142, do której ISO 32000-2 odwołuje się przy podpisywaniu PDF.