Przejdź do głównej zawartości
getnextpdf.com

Zaufany czas: jak znacznik czasu dowodzi kiedy

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

Znacznik czasu odpowiada na jedno, zaskakująco śliskie pytanie: czy te dane już istniały? Nie kto je stworzył, nie czy są poprawne — tylko to, że w jakiejś nazwanej chwili te dokładnie bajty były już na świecie. Ta strona buduje tę ideę od podstaw: co robi urząd znacznika czasu, co faktycznie zawiera token i dlaczego liczba na zegarze staje się dowodem.

To towarzysz od podstaw dla skupionych na silniku Znaczników czasu i zaufanego czasu. Przeczytaj najpierw tę stronę, jeśli „zaufany czas” brzmi jak żargon.

Zegar twojego komputera to wyznanie, a nie dowód. Możesz ustawić go na dowolną wartość, jak każdy inny. W chwili, gdy data zaczyna mieć znaczenie dla drugiej strony — umowa, którą trzeba było podpisać przed terminem, zapis, który musiał istnieć przed sporem — twój własny zegar jest jako dowód bezwartościowy, bo go kontrolujesz. Cały problem zaufanego czasu to znalezienie zegara, którego nie możesz przesunąć.

To nie jest niszowa troska. Opiera się na niej każdy długo żyjący podpisany plik PDF. Certyfikat podpisujący w końcu wygasa; lata później weryfikator musi wiedzieć, że podpis powstał, gdy certyfikat był jeszcze ważny. Bez niezależnego zapisu „kiedy” to pytanie nie ma uczciwej odpowiedzi. Zaufany czas to cichy fundament, na którym wspiera się cała budowla trwałych podpisów.

  • Znacznik czasu dowodzi, że fragment danych istniał przed podaną chwilą. To górna granica wieku, nic więcej.
  • Wytwarza go strona trzecia, urząd znacznika czasu (TSA), którego zegarowi ufasz właśnie dlatego, że nie jest twój.
  • Urząd TSA nigdy nie widzi twoich danych. Podpisuje ich skrót, związany z wartością czasu, i zwraca mały podpisany token.
  • Token dowodzi trzech rzeczy łącznie: że dane są danymi (skrót się zgadza), że czas to czas urzędu TSA (jego podpis) oraz że odpowiedź pasuje do żądania, które wysłałeś (nonce, który odzwierciedla, chroniący przed powtórzeniem starszej odpowiedzi).
  • Nie dowodzi, kto napisał dane, że dane są prawdziwe, ani dokładnej chwili utworzenia. Tylko: nie później niż to.
  • Zaufanie spływa na urząd TSA. Publicznie zaufany urząd TSA wystarcza dla większości zapisów; kwalifikowany w rozumieniu eIDAS urząd TSA niesie w UE domniemanie prawne.

Zacznij od sztuczki leżącej w centrum tego wszystkiego. Chcesz, by ktoś obcy poręczył kiedy twoje dane istniały, ale nie możesz mu pokazać danych — mogą być poufne, a w każdym razie mogłyby być ogromne. Więc tego nie robisz. Obliczasz skrót: krótki, stałej długości odcisk palca, który zmienia się całkowicie, jeśli zmieni się choć jeden bajt oryginału, a z którego oryginału nie da się odtworzyć. Wysyłasz odcisk palca, a nie plik.

Urząd TSA bierze ten odcisk palca, dołącza swój własny bieżący czas, podpisuje parę swoim kluczem prywatnym i zwraca token znacznika czasu (Spec: RFC 3161, §2.1). Token to powiązanie utrwalone na stałe: ten odcisk palca, w tym czasie, poręczony przeze mnie. Ponieważ token jest podpisany, nikt — nawet sam urząd TSA później — nie może zmienić czasu bez zerwania podpisu. Ponieważ niesie twój odcisk palca, jest bezużyteczny dla żadnego innego pliku. A ponieważ żądanie zawiera świeży, losowy nonce, który urząd TSA odzwierciedla niezmieniony, możesz stwierdzić, że odpowiedź odpowiada temu konkretnemu żądaniu i nie jest powtórką starszej odpowiedzi — nonce poświadcza świeżość, a nie to, kto pytał (Spec: RFC 3161, §2.4.2).

Pomyśl o woskowej pieczęci odciśniętej na złożonym liście. Pieczęć nie czyta listu; dowodzi jedynie, że list był cały i obecny, gdy ją odciśnięto. Znacznik czasu to pieczęć odciśnięta przez zegar, którego nie jesteś właścicielem, na odcisku palca twoich danych.

  1. Fingerprint the dataCompute a one-way hash of the file or the signature value. The data itself never leaves your hands.
  2. Ask the authoritySend the hash and a fresh random nonce to the Time-Stamp Authority.
  3. The TSA seals a timeIt signs the hash bound to its own clock and echoes your nonce, producing a small signed token.
  4. Store the tokenFor a PDF, the token is placed inside the file so the proof travels with the document.
  5. Verify laterAnyone who trusts the TSA can check the token: its signature against the TSA certificate, the matching hash, the echoed nonce, and the time — then concludes an upper bound on age.
How a trusted timestamp is obtained and what it proves: a hash plus a fresh nonce go to the TSA, the TSA signs that hash bound to its own time and echoes the nonce, and the verifier checks every link before treating the token as proof that the data existed before the stated time.

W pliku PDF ten sam mechanizm pełni dwie role. Znacznik czasu podpisu pieczętuje, kiedy zastosowano podpis, opatrując znacznikiem czasu wartość podpisu. Znacznik czasu dokumentu pieczętuje, kiedy istniał cały plik, hashując cały PDF (z wyłączeniem zaślepki, którą zajmie token) i zapisując zwrócony token z powrotem w tej zaślepce (Spec: ISO 32000-2, §12.8.5). Ten drugi rodzaj to to, co długo żyjący podpis archiwalny odnawia przez lata, by utrzymać swoje zaufanie świeżym.

Jeden nowoczesny szczegół warto znać: starszy format znacznika czasu przypinał się do jednego algorytmu skrótu przy nazywaniu własnego certyfikatu urzędu TSA. Zaktualizowany profil pozwala tokenowi nazwać swój certyfikat bieżącym skrótem (Spec: RFC 5816, §2.1), więc zaufany czas nie dziedziczy po cichu wczorajszej kryptografii.

Nie składasz tokenu ręcznie i nie powinieneś tego chcieć. Rzeczą wartą zrozumienia jest punkt styku z zaufaniem: który zegar wybierasz, by mu wierzyć. W NextPDF poproszenie o poziom podpisu, który wymaga zaufanego czasu, czyni ten wybór jawnym, a nie domyślnym.

<?php
declare(strict_types=1);
use NextPDF\Security\Signature\SignatureLevel;
// A baseline signature trusts only the signer's own clock.
$baseline = SignatureLevel::PAdES_B_B;
$baseline->requiresTimestamp(); // false → no third party vouches for "when"
// Stepping up to B-T means a Time-Stamp Authority must be supplied:
// from here on, "when" is attested by a clock you do not control.
$timestamped = SignatureLevel::PAdES_B_T;
$timestamped->requiresTimestamp(); // true → a TSA is now part of your trust model
// The decision is now visible at the call site, not buried in a default.
// Choosing the TSA is choosing whose time becomes your evidence.

Sednem przykładu nie jest API. Chodzi o to, że „czy mam zaufany czas?” to fakt tak-lub-nie dotyczący twojego dokumentu, rozstrzygnięty przez to, czy urząd TSA był w pętli — a silnik odmawia pozostawienia tego faktu niejednoznacznym.

Pułapką jest odczytywanie znacznika czasu jako „to utworzono o 14:32.” Nie mówi on niczego takiego. Mówi „to istniało nie później niż o 14:32.” Ta różnica jest całym sednem. Znacznik czasu to górna granica, nigdy granica dolna i nigdy dokładna chwila. Twoje dane mogły istnieć przez lata, zanim zabrałeś się za ich opatrzenie znacznikiem czasu; token na ten temat milczy. Kreśli jedną linię i mówi: nie po tym miejscu.

Drugie, kosztowniejsze nieporozumienie: że znacznik czasu dowodzi, iż twój dokument jest autentyczny lub poprawny. Nie dowodzi żadnego z tych. Jest obojętny wobec znaczenia. Doskonale opatrzone znacznikiem czasu kłamstwo nadal jest kłamstwem — teraz w sposób dowodliwy stare. Autentyczność płynie z podpisu, który mówi kto; prawda płynie ze świata. Znacznik czasu mówi zawsze tylko o kiedy.

Zasięg znacznika czasu zatrzymuje się dokładnie tam, gdzie jego model zaufania. Dowodzi górnej granicy wieku i tylko tego, i tylko jeśli ufasz urzędowi, który go zapieczętował.

Warto rozróżnić dwa poziomy urzędów. Publicznie zaufany urząd TSA wiąże się łańcuchem do certyfikatu, który twoje oprogramowanie już akceptuje; jego tokeny są szeroko weryfikowalne i wystarczają dla większości zapisów. Kwalifikowany w rozumieniu eIDAS urząd TSA to nadzorowany dostawca z unijnej listy zaufania, a kwalifikowany elektroniczny znacznik czasu niesie domniemanie prawne co do dokładności swojej daty oraz integralności danych — domniemanie, którego zwykły znacznik czasu nie ma (Spec: eIDAS, Art. 41). Wybór między nimi to pytanie o ciężar dowodowy, którego potrzebujesz, a nie o to, jak działają bajty; kryptografia jest ta sama.

Znacznik czasu dziedziczy też okres życia własnych kotwic zaufania. Certyfikat urzędu TSA może wygasnąć lub zostać unieważniony, a algorytm skrótu, którego użył, może się zestarzeć. Właśnie dlatego długo żyjące dokumenty nie opatrują się znacznikiem czasu raz i nie odchodzą — odnawiają, nakładając świeży znacznik czasu dokumentu na stary dowód, zanim stary dowód osłabnie. Ta pętla odnawiania to osobny temat; zobacz Walidacja długoterminowa.

RFC 3161 trusted timestamping (signature and document timestamps) — edition availability
EditionAvailability
Core

Supports PAdES B-B and B-T. B-B is the baseline signature with no timestamp; B-T requests and embeds a verified RFC 3161 signature timestamp against a deployment-supplied TSA whose clock you choose.

Pro

Adds the embedded long-term validation data (certificates, OCSP, CRLs) that B-LT needs to keep a signature verifiable after its certificates expire.

Enterprise

Adds the B-LTA renewal loop, sealing the validation data under a fresh document timestamp and re-stamping it before the protection weakens.

  • Urząd znacznika czasu (TSA) — niezależna usługa, która wydaje podpisane tokeny znaczników czasu. Ufasz jej zegarowi właśnie dlatego, że nie jest twój.
  • Token znacznika czasu — mały podpisany obiekt, który zwraca urząd TSA, wiążący skrót twoich danych z wartością czasu (Spec: RFC 3161, §2.1).
  • Skrót (odcisk wiadomości) — krótki, jednokierunkowy odcisk palca danych. Urząd TSA podpisuje go, nigdy zaś same dane, więc twoja treść pozostaje prywatna.
  • Nonce — świeża wartość losowa wysyłana wraz z żądaniem i odzwierciedlona niezmieniona w odpowiedzi, pokazująca, że token odpowiada temu konkretnemu żądaniu i nie jest powtórką starej odpowiedzi (poświadcza świeżość, a nie tożsamość żądającego).
  • Górna granica — to, co ustala znacznik czasu: dane istniały nie później niż w podanej chwili. Nigdy nie jest to dokładny moment utworzenia.
  • Kwalifikowany znacznik czasu w rozumieniu eIDAS — znacznik czasu od nadzorowanego dostawcy z UE, który niesie domniemanie prawne co do dokładności daty i integralności danych.
  • Znacznik czasu dokumentu — znacznik czasu obejmujący cały plik PDF, używany do zakotwiczenia i odnawiania dowodów walidacji długoterminowej (Spec: ISO 32000-2, §12.8.5).