Перейти к содержимому
getnextpdf.com

Метки времени и доверенное время

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

Метка времени не фиксирует “когда это было подписано”. Она доказывает более узкий, но более сильный факт: определённый фрагмент данных существовал до определённого момента, и это засвидетельствовала сторона, которая не является подписавшим. Именно в этом различии вся ценность доверенного времени, и его часто понимают неправильно.

Время подписания внутри подписи — это значение, заявленное компьютером подписавшего. Часы могут идти неверно случайно или намеренно. Если единственное свидетельство того, когда это произошло, — утверждение самого подписавшего, подписавший может произвольно поставить документу более раннюю или более позднюю дату. Сертификат, отозванный вчера, можно представить так, будто им подписали в прошлом году. “Когда” — это не деталь. От него зависит, действительна ли ещё подпись, сделанная сертификатом, который уже истёк или уже отозван. А если доверенное время неверно, рушится любое обоснование долгосрочной действительности, построенное на нём.

  • Собственное время подписания у подписавшего — это утверждение, а не доказательство. Его легко подделать.
  • Метка времени RFC 3161 — это подписанный токен от службы меток времени (TSA), связывающий хеш ваших данных со временем TSA.
  • Она доказывает ровно одно: данные существовали до указанного TSA времени. Не точный момент создания, а верхнюю границу.
  • Токен возвращает ваш nonce и ваш отпечаток сообщения, поэтому он не может быть повтором и не может относиться к другим данным.
  • Метка времени документа применяет тот же механизм ко всему PDF и закрепляет всё, что находится под ней, — подпись и встроенные свидетельства проверки — за доверенным моментом времени.

NextPDF рассматривает метку времени как объект, который нужно проверить, а не просто получить. Запрос токена — меньшая часть работы. Позиция движка проста: непроверенный токен не является доказательством.

Когда движок проставляет метку времени на подпись, он отправляет в TSA хеш данных и свежий случайный nonce, но никогда сами данные. Затем возвращённый токен проверяется по всему набору свойств, которые делают его значимым: статус службы был “granted”, nonce в токене совпадает с отправленным, отпечаток сообщения в токене совпадает с отправленным хешом, собственная криптографическая подпись токена проходит проверку, тип содержимого токена соответствует типу метки времени, а указанное время попадает в допустимый диапазон погрешности. Любое расхождение — безусловный отказ с типизированной причиной. Пути “выглядит достаточно близко” не существует. Метка времени документа подчиняется тому же правилу, только применяется оно ко всему файлу, а не к значению одной подписи.

Обе стороны намеренно симметричны. Когда движок проставляет метку времени на подпись, отпечаток, который он отправляет в TSA, — это хеш значения подписи подписавшего; когда он позже проверяет эту метку времени, он заново вычисляет тот же хеш и требует, чтобы отпечаток в токене совпал с ним. NextPDF выделяет проверяющую половину в отдельный шаг verifySignatureTimestamp, который принимает значение подписи как обязательный входной параметр, — поэтому метку времени подписи невозможно “проверить”, фактически не проверив то, что она покрывает. Этот шаг завершается отказом при пустом входе, нераспознанном или слабом (SHA-1) алгоритме отпечатка, некорректном отпечатке или хеше, который не связывает значение подписи. Поэтому токен, созданный версией движка, которая хешировала другой вход, не может доказать эту связь — так задумано.

  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.
Как получают доверенную метку времени и что она доказывает: хеш вместе с nonce отправляется в TSA, TSA возвращает подписанный токен, связывающий этот хеш со своим временем, а проверяющий подтверждает эту связь, прежде чем рассматривать её как доказательство того, что данные существовали до этого времени.

Токен метки времени не собирают вручную. Важна граница доверия. TSA — это то, что вы настраиваете и защищаете, потому что её время становится вашим доказательством.

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

Важная граница в том, что движок отправляет хеш, а не документ, поэтому TSA никогда не видит ваше содержимое. И движок проверяет ответ. TSA, которую вы не можете аутентифицировать, — это не доверенное время. Это всего лишь ещё одни часы.

Ловушка в том, чтобы читать метку времени как “это было подписано ровно в 14:32 в этот день”. Это не секундомер на событии подписания. Она доказывает, что данные существовали не позднее времени TSA, то есть верхнюю границу, установленную третьей стороной. Создание могло произойти в любой момент до этого. Вторая ловушка — считать, что любой сервер меток времени даёт доверенное время. Токен, подпись которого вы не можете проверить или службе которого вы не доверяете, ничего не доказывает. Это часы, которым у вас нет причин верить. Доверенное время даёт TSA, которую вы можете аутентифицировать, и токен, который вы проверили, а не сам факт запроса числа у сервера.

NextPDF формирует запрос, отправляет только хеш и проверяет возвращённый токен. Он не ручается за службу, которая стоит за этим токеном. Точность TSA, действительность её собственного сертификата и её надёжность — свойства самой службы и конфигурации вашего развёртывания, а не движка. Метка времени связывает хеш со временем. Она ничего не говорит о смысле данных, личности подписавшего или о том, был ли действителен сертификат подписавшего. Это отдельные проверки, описанные в разделе Правильная проверка подписи. Движок не может сделать ненадёжную TSA надёжной. Эта страница также не утверждает какой-либо конкретной юридической силы метки времени; это зависит от статуса TSA и юрисдикции. Как доверенное время повторно используется, чтобы подпись оставалась проверяемой на протяжении десятилетий, описано в разделе Долгосрочная проверка.

Доступность простановки меток времени по тарифам:

Простановка меток времени RFC 3161 (метка времени подписи и метка времени документа) — edition availability
EditionAvailability
CoreNot in this edition
Pro

PAdES B-T — проверенная метка времени RFC 3161 на значении подписи, относительно TSA, предоставляемой развёртыванием.

Enterprise

Добавляет метку времени документа, используемую B-LT и B-LTA, чтобы закрепить встроенные свидетельства проверки и запустить цикл архивного обновления.

  • Метка времени (RFC 3161) — подписанный токен от TSA, связывающий хеш данных со временем TSA и доказывающий, что данные существовали до этого времени.
  • Служба меток времени (TSA) — доверенная служба, которая выпускает токены меток времени.
  • TSTInfo — структура содержимого токена: отпечаток сообщения, время создания, серийный номер и необязательный nonce.
  • Отпечаток сообщения — хеш данных, для которых проставляется метка времени, возвращаемый в токене.
  • Nonce — свежее случайное значение, которое отправляется вместе с запросом и возвращается в токене, поэтому ответ не может быть повтором.
  • Метка времени документа — метка времени RFC 3161 для всего PDF (с обновлениями из RFC 5816), закрепляющая подпись и её свидетельства за доверенным моментом времени.