Цифровая подпись подтверждает подлинность документа или файла в момент её создания. Однако сама подпись привязана к сертификату подписанта, который имеет ограниченный срок действия и может быть отозван. Без дополнительной информации через некоторое время проверить подпись становится невозможным: сертификат уже не считается валидным, а значит цепочка доверия разрывается. Временная метка решает эту проблему, фиксируя точное время существования подписи и позволяя проверить её даже после истечения или отзыва сертификата.
- Что такое временная метка в контексте подписи
- Почему без метки старая подпись становится непроверяемой
- Как работает процесс timestamping
- Требования к доверенному источнику метки
- Практические советы: как добавить и проверить метку
- Добавление метки при подписи
- Проверка подписи с меткой
- Ограничения и риски использования временных меток
- Когда метка не нужна или недостаточна
- Что делать дальше: практический чек-лист
Что такое временная метка в контексте подписи
Временная метка (timestamp) – это криптографическая печать, созданная доверенным органом timestamping authority (TSA). Она содержит:
- хеш данных, которые подписаны (обычно хеш самой подписи или подписанного объекта);
- точное время, когда TSA создала метку;
- подпись TSA своим собственным сертификатом.
Таким образом метка подтверждает, что определённый набор данных существовал в указанный момент и был заверен TSA.
Почему без метки старая подпись становится непроверяемой
При обычной проверке подписи проверяющий выполняет следующие шаги:
- Извлекает сертификат подписанта из подписи.
- Проверяет, что сертификат не просрочен и не находится в списке отозванных (CRL/OCSP) на момент проверки.
- Проверяет криптографическую корректность подписи с помощью открытого ключа из сертификата.
Если на момент проверки сертификат уже просрочен или помещён в CRL, шаг 2 завершается неудачей, и подпись считается недоверенной, даже если сама криптографическая подпись остаётся верной. Временная метка меняет момент, к которому относится проверка статуса сертификата: вместо текущего времени используется время, зафиксированное в метке.
Как работает процесс timestamping
При создании подписи с меткой происходит примерно следующая последовательность:
- Подписант формирует хеш подписываемого объекта.
- Этот хеш подписывается закрытым ключом подписанта → получаем обычную цифровую подпись.
- Хеш полученной подписи (или хеш объекта, в зависимости от стандарта) отправляется в TSA.
- TSA генерирует токен метки: добавляет текущее время, подписывает его своим закрытым ключом и возвращает токен подписанту.
- Подписант включает токен метки в итоговый пакет подписи (например, как атрибут в CMS/PKCS#7 или как отдельное поле в JWT).
При проверке получатель сначала валидирует метку у TSA (проверяет подпись TSA и цепочку доверия её сертификата на момент создания метки). Если метка валидна, то для проверки основной подписи используется время, указанное в метке, а не текущее системное время.
Требования к доверенному источнику метки
Для того чтобы метка действительно повышала доверие, необходимо выполнить несколько условий:
- TSA должна быть общепризнанно доверенной: её корневой сертификат должен находиться в доверенном хранилище проверяющего.
- Сертификат TSA должен быть валидным на момент создания метки (не просрочен и не отозван).
- Идеально, чтобы сама метка также была защищена повторным timestamping (цепочка меток), чтобы защитить от возможного будущего отзыва сертификата TSA.
- Подписант и проверяющий должны использовать совместимый формат токена (RFC 3161, Authenticode timestamp, и т.п.).
Если хотя бы одно из этих требований нарушено, метка не может гарантировать долгосрочную проверяемость.
Практические советы: как добавить и проверить метку
Ниже – общие шаги, которые применимы к большинству инструментов подписи (OpenSSL, signcode, jarsigner, GPG и т.д.). Конкретные ключи и команды могут отличаться, но логика остаётся той же.
Добавление метки при подписи
- Убедитесь, что у вас есть доступ к TSA (URL или служба, поддерживающая RFC 3161).
- При создании подписи укажите параметр timestamp, например:
- OpenSSL: -tsa http://timestamp.example.com;
- signcode: /t http://timestamp.example.com;
- jarsigner: -tsa http://timestamp.example.com.
- Инструмент отправит хеш подписи в TSA, получит токен и включит его в итоговый пакет.
- После подписи проверьте, что метка присутствует (часто можно увидеть через команду проверки или просмотр структуры подписи).
Проверка подписи с меткой
- Сначала проверьте саму метку: получите сертификат TSA из токена, проверьте его цепочку доверия и статус на время, указанное в метке.
- Если метка валидна, извлеките из неё временную метку и используйте её как опорную точку при проверке основной подписи (сертификат подписанта должен быть валиден на это время).
- Если метка отсутствует или не прошла проверку, откажитесь от доверия к подписи, иначе вы рискуете принять подпись, созданную после отзыва или истечения срока сертификата.
Ограничения и риски использования временных меток
Временная метка повышает надёжность, но не устраняет все возможные проблемы. Ниже перечислены основные ограничения, которые следует иметь в виду.
- Зависимость от TSA: если сервер TSA недоступен в момент подписи, метку добавить нельзя. Некоторые инструменты позволяют отложить подпись, но это не всегда удобно.
- Компромисс TSA: если закрытый ключ TSA скомпрометирован и это станет известно после создания метки, злоумышленник может подделать метку для любого времени. Поэтому важно использовать TSA с хорошей репутацией и, при возможности, проверять наличие повторного timestamping метки.
- Формат и совместимость: не все форматы подписи поддерживают одинаковые типы токенов. При обмене документами между сторонами необходимо согласовать, какой стандарт timestamping используется.
- Хранение токенов: токен метки увеличивает размер подписи. В некоторых сценариях (например, встроенные системы с ограниченной памятью) это может быть заметно.
- Юридические аспекты: в некоторых юрисдикциях законом может требоваться конкретный тип TSA или конкретные требования к хранению меток. Следует уточнять applicable нормативы.
Когда метка не нужна или недостаточна
В ряде случаев добавление метки может быть избыточным:
- Подпись используется только в короткоживущем контексте (например, сеансовая аутентификация, где проверка происходит мгновенно).
- Подписант гарантирует, что сертификат будет обновлён до истечения срока, а все стороны готовы принимать только свежие подписи.
- Внутренние корпоративные процессы, где все участники используют общий закрытый PKI и контролируют сроки сертификатов централизованно.
В этих ситуациях метка добавляет сложность без существенной выгоды в отношении доверия.
Что делать дальше: практический чек-лист
Перед тем как полагаться на старую подпись, выполните следующие действия:
- Убедитесь, что в подписи присутствует токен временной метки.
- Получите из токена идентификатор TSA и его сертификат.
- Проверьте цепочку доверия сертификата TSA до доверенного корня на дату, указанную в метке.
- Убедитесь, что сертификат TSA не был отозван на момент создания метки (проверьте CRL/OCSP на эту дату).
- Используя время из метки, проверьте сертификат подписанта: он должен быть валиден (не просрочен и не отозван) именно на эту дату.
- Если все проверки пройдены, подпись можно считать доверенной независимо от текущего статуса сертификатов.
- Если любой из пунктов не выполнен, рассматривайте подпись как потенциально ненадёжную и ищите альтернативные способы подтверждения подлинности (например, повторную подпись с новой меткой).
Следуя этому чек-листу, вы сможете объективно оценить, можно ли доверять старой подписи, и избежать ситуаций, когда формальная криптографическая проверка проходит, а реальное доверие отсутствует из‑за истекшего или отозванного сертификата.
