Доверенное время: как метка времени доказывает, когда это произошло
Spec: RFC 3161RFC 3161Spec: RFC 5816RFC 5816Spec: ISO 32000-2, §12.8.5ISO 32000-2 §12.8.5
Метка времени отвечает на единственный, на удивление скользкий вопрос: существовали ли эти данные уже? Не кто их создал, не верны ли они — только то, что в некий названный момент эти именно байты уже были в мире. Эта страница строит идею с нуля: что делает служба меток времени, что на самом деле содержит токен и почему число на часах становится доказательством.
Это спутник от первых принципов к ориентированной на движок странице Метки времени и доверенное время. Прочтите сначала эту, если “доверенное время” звучит как жаргон.
Почему это важно
Заголовок раздела «Почему это важно»Часы вашего компьютера — это признание, а не доказательство. Вы можете установить на них любое значение, и так может сделать любой другой. В тот момент, когда дата становится важна для второй стороны — договор, который нужно было подписать до срока, запись, которая должна была существовать до спора, — ваши собственные часы как доказательство ничего не стоят, потому что вы ими управляете. Вся проблема доверенного времени — найти часы, которые вы не можете перевести.
Это не нишевая забота. На неё опирается каждый долгоживущий подписанный PDF. Срок действия подписывающего сертификата в итоге истекает; спустя годы средству проверки нужно знать, что подпись была создана, пока сертификат был ещё действителен. Без независимой записи “когда” у этого вопроса нет честного ответа. Доверенное время — тихий фундамент, на котором держится всё здание устойчивых подписей.
Если коротко
Заголовок раздела «Если коротко»- Метка времени доказывает, что фрагмент данных существовал до заявленного момента. Это верхняя граница возраста, и не более того.
- Её создаёт третья сторона, служба меток времени (TSA), чьим часам вы доверяете именно потому, что они не ваши.
- TSA никогда не видит ваши данные. Она подписывает их хеш, привязанный к значению времени, и возвращает небольшой подписанный токен.
- Токен доказывает три вещи вместе: что данные — это данные (хеш совпадает), что время — это время TSA (её подпись) и что ответ соответствует отправленному вами запросу (одноразовое число, которое она возвращает, защищая от повторного воспроизведения более старого ответа).
- Он не доказывает, кто написал данные, что данные истинны или точный момент создания. Только: не позднее этого.
- Доверие перетекает к TSA. Публично доверенной TSA достаточно для большинства записей; квалифицированная по eIDAS TSA несёт юридическую презумпцию в ЕС.
Как это реализовано в NextPDF
Заголовок раздела «Как это реализовано в NextPDF»Начните с трюка в центре всего этого. Вы хотите, чтобы посторонний поручился за то, когда существовали ваши данные, но вы не можете показать ему сами данные — они могут быть конфиденциальными, и в любом случае они могут быть огромными. Поэтому вы этого не делаете. Вы вычисляете хеш: короткий отпечаток фиксированной длины, который полностью меняется, если изменится хоть один байт оригинала, и из которого оригинал восстановить нельзя. Вы отправляете отпечаток, а не файл.
TSA берёт этот отпечаток, прикрепляет своё текущее время, подписывает пару своим закрытым ключом и возвращает токен метки времени (Spec: RFC 3161, §2.1RFC 3161 §2.1). Токен — это сделанная постоянной привязка: этот отпечаток, в это время, заверено мной. Поскольку токен подписан, никто — даже сама TSA впоследствии — не может изменить время, не сломав подпись. Поскольку он несёт ваш отпечаток, он бесполезен для любого другого файла. И поскольку запрос включает свежее случайное одноразовое число (nonce), которое TSA возвращает без изменений, вы можете установить, что ответ соответствует этому конкретному запросу и не является повтором более старого ответа — одноразовое число удостоверяет свежесть, а не того, кто спросил (Spec: RFC 3161, §2.4.2RFC 3161 §2.4.2).
Представьте восковую печать, оттиснутую поверх сложенного письма. Печать не читает письмо; она лишь доказывает, что письмо было целым и присутствовало в момент, когда печать была оттиснута. Метка времени — это печать, оттиснутая часами, которыми вы не владеете, поверх отпечатка ваших данных.
- Fingerprint the dataCompute a one-way hash of the file or the signature value. The data itself never leaves your hands.
- Ask the authoritySend the hash and a fresh random nonce to the Time-Stamp Authority.
- The TSA seals a timeIt signs the hash bound to its own clock and echoes your nonce, producing a small signed token.
- Store the tokenFor a PDF, the token is placed inside the file so the proof travels with the document.
- 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.
В PDF этот же механизм носит две шляпы. Метка времени подписи скрепляет когда была применена подпись, проставляя метку времени на значении подписи. Метка времени документа скрепляет когда существовал весь файл, хешируя весь PDF (исключая заполнитель, который займёт токен) и сохраняя возвращённый токен обратно в этот заполнитель (Spec: ISO 32000-2, §12.8.5ISO 32000-2 §12.8.5). Второй вид — это то, что долгоживущая архивная подпись обновляет годами, чтобы сохранить свежесть своего доверия.
Одна современная деталь, которую стоит знать: более старый формат метки времени привязывал себя к одному алгоритму хеширования для именования собственного сертификата TSA. Обновлённый профиль позволяет токену именовать свой сертификат текущим дайджестом (Spec: RFC 5816, §2.1RFC 5816 §2.1), поэтому доверенное время не наследует втихую вчерашнюю криптографию.
Практический пример
Заголовок раздела «Практический пример»Вы не собираете токен вручную и не должны этого хотеть. Что стоит понять — это шов доверия: каким часам вы решаете верить. В NextPDF запрос уровня подписи, которому нужно доверенное время, делает этот выбор явным, а не неявным.
<?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.Смысл примера не в API. Он в том, что “есть ли у меня доверенное время?” — это факт “да или нет” о вашем документе, решаемый тем, была ли TSA в цепочке, — и движок отказывается позволить этому факту быть двусмысленным.
Распространённое заблуждение
Заголовок раздела «Распространённое заблуждение»Ловушка — читать метку времени как “это было создано в 14:32”. Она не говорит ничего подобного. Она говорит “это существовало не позднее 14:32”. В этом различии весь смысл. Метка времени — это верхняя граница, никогда не нижняя и никогда не точный момент. Ваши данные могли существовать годами, прежде чем вы собрались проставить метку времени; токен об этом молчит. Он проводит одну черту и говорит: не после этой точки.
Второе, более дорогое заблуждение: что метка времени доказывает, что ваш документ подлинный или верный. Она не делает ни того, ни другого. Она безразлична к смыслу. Безупречно отмеченная меткой времени ложь — всё ещё ложь, теперь доказуемо старая. Подлинность исходит от подписи, которая говорит кто; истина исходит из мира. Метка времени всегда говорит только о когда.
Пределы и границы
Заголовок раздела «Пределы и границы»Охват метки времени заканчивается ровно там, где заканчивается её модель доверия. Она доказывает верхнюю границу возраста, и только её, и только если вы доверяете службе, которая её скрепила.
Стоит различать два уровня служб. Публично доверенная TSA выстраивается в цепочку к сертификату, который ваше ПО уже принимает; её токены широко проверяемы и годятся для большинства записей. Квалифицированная по eIDAS TSA — это надзираемый поставщик в доверенном списке ЕС, и квалифицированная электронная метка времени несёт юридическую презумпцию точности её даты и целостности данных — презумпцию, которой нет у обычной метки времени (Spec: eIDAS, Art. 41eIDAS Art. 41). Выбор между ними — это вопрос о доказательственном весе, который вам нужен, а не о том, как работают байты; криптография одна и та же.
Метка времени также наследует срок жизни собственных якорей доверия. Срок действия сертификата TSA может истечь или он может быть отозван, а использованный ею алгоритм хеширования может устареть. Именно поэтому долгоживущие документы не проставляют метку времени один раз и не уходят — они обновляют её, накладывая свежую метку времени документа поверх старого доказательства, прежде чем старое доказательство ослабнет. Этот цикл обновления — отдельная тема; см. Долгосрочная проверка.
| Edition | Availability |
|---|---|
| Core | Поддерживает PAdES B-B и B-T. B-B — это базовая подпись без метки времени; B-T запрашивает и встраивает проверенную метку времени подписи RFC 3161 относительно поставляемой развёртыванием TSA, чьи часы вы выбираете. |
| Pro | Добавляет встроенные данные долгосрочной проверки (сертификаты, OCSP, CRL), которые нужны B-LT, чтобы подпись оставалась проверяемой после истечения срока действия её сертификатов. |
| Enterprise | Добавляет цикл обновления B-LTA, скрепляя данные проверки под свежей меткой времени документа и переставляя её, прежде чем защита ослабнет. |
Связанные документы
Заголовок раздела «Связанные документы»- Метки времени и доверенное время — тот же механизм на уровне движка и PAdES, с прописанными правилами проверки.
- Долгосрочная проверка — как обновление меток времени документа сохраняет проверяемость подписи годами.
- Как подпись доказывает, кто подписал — половина “кто” в истории, которую эта страница оставляет в стороне.
- Квалифицированные подписи: объяснение — что означает “квалифицированная” и почему квалифицированная TSA несёт юридический вес.
Глоссарий
Заголовок раздела «Глоссарий»- Служба меток времени (TSA) — независимая служба, которая выдаёт подписанные токены меток времени. Вы доверяете её часам именно потому, что они не ваши.
- Токен метки времени — небольшой подписанный объект, который возвращает TSA, привязывая хеш ваших данных к значению времени (Spec: RFC 3161, §2.1RFC 3161 §2.1).
- Хеш (отпечаток сообщения) — короткий односторонний отпечаток данных. TSA подписывает его, а не сами данные, поэтому ваше содержимое остаётся приватным.
- Одноразовое число (nonce) — свежее случайное число, отправляемое с запросом и возвращаемое без изменений в ответе, показывающее, что токен соответствует этому конкретному запросу и не является повтором старого ответа (оно удостоверяет свежесть, а не личность запрашивающего).
- Верхняя граница — то, что устанавливает метка времени: данные существовали не позднее заявленного момента. Никогда не точный момент создания.
- Квалифицированная по eIDAS метка времени — метка времени от надзираемого поставщика ЕС, несущая юридическую презумпцию точности даты и целостности данных.
- Метка времени документа — метка времени по всему файлу PDF, используемая для закрепления и обновления свидетельств долгосрочной проверки (Spec: ISO 32000-2, §12.8.5ISO 32000-2 §12.8.5).