Почему временная метка обеспечивает доверие к старым цифровым подписям

Цифровая подпись подтверждает подлинность документа или файла в момент её создания. Однако сама подпись привязана к сертификату подписанта, который имеет ограниченный срок действия и может быть отозван. Без дополнительной информации через некоторое время проверить подпись становится невозможным: сертификат уже не считается валидным, а значит цепочка доверия разрывается. Временная метка решает эту проблему, фиксируя точное время существования подписи и позволяя проверить её даже после истечения или отзыва сертификата.

Что такое временная метка в контексте подписи

Временная метка (timestamp) – это криптографическая печать, созданная доверенным органом timestamping authority (TSA). Она содержит:

  • хеш данных, которые подписаны (обычно хеш самой подписи или подписанного объекта);
  • точное время, когда TSA создала метку;
  • подпись TSA своим собственным сертификатом.

Таким образом метка подтверждает, что определённый набор данных существовал в указанный момент и был заверен TSA.

Почему без метки старая подпись становится непроверяемой

При обычной проверке подписи проверяющий выполняет следующие шаги:

  1. Извлекает сертификат подписанта из подписи.
  2. Проверяет, что сертификат не просрочен и не находится в списке отозванных (CRL/OCSP) на момент проверки.
  3. Проверяет криптографическую корректность подписи с помощью открытого ключа из сертификата.

Если на момент проверки сертификат уже просрочен или помещён в CRL, шаг 2 завершается неудачей, и подпись считается недоверенной, даже если сама криптографическая подпись остаётся верной. Временная метка меняет момент, к которому относится проверка статуса сертификата: вместо текущего времени используется время, зафиксированное в метке.

Как работает процесс timestamping

При создании подписи с меткой происходит примерно следующая последовательность:

  1. Подписант формирует хеш подписываемого объекта.
  2. Этот хеш подписывается закрытым ключом подписанта → получаем обычную цифровую подпись.
  3. Хеш полученной подписи (или хеш объекта, в зависимости от стандарта) отправляется в TSA.
  4. TSA генерирует токен метки: добавляет текущее время, подписывает его своим закрытым ключом и возвращает токен подписанту.
  5. Подписант включает токен метки в итоговый пакет подписи (например, как атрибут в CMS/PKCS#7 или как отдельное поле в JWT).

При проверке получатель сначала валидирует метку у TSA (проверяет подпись TSA и цепочку доверия её сертификата на момент создания метки). Если метка валидна, то для проверки основной подписи используется время, указанное в метке, а не текущее системное время.

Требования к доверенному источнику метки

Для того чтобы метка действительно повышала доверие, необходимо выполнить несколько условий:

  • TSA должна быть общепризнанно доверенной: её корневой сертификат должен находиться в доверенном хранилище проверяющего.
  • Сертификат TSA должен быть валидным на момент создания метки (не просрочен и не отозван).
  • Идеально, чтобы сама метка также была защищена повторным timestamping (цепочка меток), чтобы защитить от возможного будущего отзыва сертификата TSA.
  • Подписант и проверяющий должны использовать совместимый формат токена (RFC 3161, Authenticode timestamp, и т.п.).

Если хотя бы одно из этих требований нарушено, метка не может гарантировать долгосрочную проверяемость.

Практические советы: как добавить и проверить метку

Ниже – общие шаги, которые применимы к большинству инструментов подписи (OpenSSL, signcode, jarsigner, GPG и т.д.). Конкретные ключи и команды могут отличаться, но логика остаётся той же.

Добавление метки при подписи

  1. Убедитесь, что у вас есть доступ к TSA (URL или служба, поддерживающая RFC 3161).
  2. При создании подписи укажите параметр timestamp, например:
    • OpenSSL: -tsa http://timestamp.example.com;
    • signcode: /t http://timestamp.example.com;
    • jarsigner: -tsa http://timestamp.example.com.
    • Инструмент отправит хеш подписи в TSA, получит токен и включит его в итоговый пакет.
    • После подписи проверьте, что метка присутствует (часто можно увидеть через команду проверки или просмотр структуры подписи).

    Проверка подписи с меткой

    1. Сначала проверьте саму метку: получите сертификат TSA из токена, проверьте его цепочку доверия и статус на время, указанное в метке.
    2. Если метка валидна, извлеките из неё временную метку и используйте её как опорную точку при проверке основной подписи (сертификат подписанта должен быть валиден на это время).
    3. Если метка отсутствует или не прошла проверку, откажитесь от доверия к подписи, иначе вы рискуете принять подпись, созданную после отзыва или истечения срока сертификата.

    Ограничения и риски использования временных меток

    Временная метка повышает надёжность, но не устраняет все возможные проблемы. Ниже перечислены основные ограничения, которые следует иметь в виду.

    • Зависимость от TSA: если сервер TSA недоступен в момент подписи, метку добавить нельзя. Некоторые инструменты позволяют отложить подпись, но это не всегда удобно.
    • Компромисс TSA: если закрытый ключ TSA скомпрометирован и это станет известно после создания метки, злоумышленник может подделать метку для любого времени. Поэтому важно использовать TSA с хорошей репутацией и, при возможности, проверять наличие повторного timestamping метки.
    • Формат и совместимость: не все форматы подписи поддерживают одинаковые типы токенов. При обмене документами между сторонами необходимо согласовать, какой стандарт timestamping используется.
    • Хранение токенов: токен метки увеличивает размер подписи. В некоторых сценариях (например, встроенные системы с ограниченной памятью) это может быть заметно.
    • Юридические аспекты: в некоторых юрисдикциях законом может требоваться конкретный тип TSA или конкретные требования к хранению меток. Следует уточнять applicable нормативы.

    Когда метка не нужна или недостаточна

    В ряде случаев добавление метки может быть избыточным:

    • Подпись используется только в короткоживущем контексте (например, сеансовая аутентификация, где проверка происходит мгновенно).
    • Подписант гарантирует, что сертификат будет обновлён до истечения срока, а все стороны готовы принимать только свежие подписи.
    • Внутренние корпоративные процессы, где все участники используют общий закрытый PKI и контролируют сроки сертификатов централизованно.

    В этих ситуациях метка добавляет сложность без существенной выгоды в отношении доверия.

    Что делать дальше: практический чек-лист

    Перед тем как полагаться на старую подпись, выполните следующие действия:

    • Убедитесь, что в подписи присутствует токен временной метки.
    • Получите из токена идентификатор TSA и его сертификат.
    • Проверьте цепочку доверия сертификата TSA до доверенного корня на дату, указанную в метке.
    • Убедитесь, что сертификат TSA не был отозван на момент создания метки (проверьте CRL/OCSP на эту дату).
    • Используя время из метки, проверьте сертификат подписанта: он должен быть валиден (не просрочен и не отозван) именно на эту дату.
    • Если все проверки пройдены, подпись можно считать доверенной независимо от текущего статуса сертификатов.
    • Если любой из пунктов не выполнен, рассматривайте подпись как потенциально ненадёжную и ищите альтернативные способы подтверждения подлинности (например, повторную подпись с новой меткой).

    Следуя этому чек-листу, вы сможете объективно оценить, можно ли доверять старой подписи, и избежать ситуаций, когда формальная криптографическая проверка проходит, а реальное доверие отсутствует из‑за истекшего или отозванного сертификата.

    PEFile.ru