Модуль KJUR.asn1.cades в библиотеке Jsrsasign
предназначен для работы с расширениями формата CMS Advanced Electronic
Signatures (CAdES). Он реализует структуры ASN.1, необходимые для
формирования, разбора и проверки расширенных электронных подписей,
соответствующих стандарту CAdES (ETSI EN 319 122 / 319 132).
Основная задача этого пространства имён — предоставление высокоуровневых классов для создания и обработки подписанных данных CMS (Cryptographic Message Syntax) с дополнительными атрибутами, такими как временные метки, политика подписи, доказательства подлинности и долгосрочная проверка (LTV).
CAdES строится поверх CMS/PKCS#7 и расширяет его через набор подписанных и неподписанных атрибутов.
Внутри KJUR.asn1.cades реализуются:
Базовая идея — строгая совместимость с ASN.1 схемами ETSI, где каждая структура представлена отдельным классом.
Базовый класс для всех атрибутов CAdES. Представляет ASN.1 структуру
Attribute.
Содержит:
Используется как родительский класс для всех специализированных атрибутов.
Ключевая роль — унификация сериализации атрибутов в SignedAttributes.
Контейнер для набора атрибутов.
Функциональность:
Используется при формировании блока signedAttrs в CMS
подписи.
Класс, реализующий атрибут политики подписи.
Содержит:
Используется для привязки подписи к формальной политике, определяющей правила создания и проверки подписи.
Структура соответствует:
SignaturePolicyIdentifier ::= CHOICE
Представление сертификата подписанта в виде хэш-структуры.
Поддерживает:
Функции:
Используется в качестве доказательства привязки подписи к конкретному сертификату.
Реализация атрибута временной метки содержимого.
Функции:
Структура:
Используется для доказательства существования данных в момент времени.
Класс для временной метки самой подписи.
Отличие от ContentTimestamp:
Формирует:
Один из ключевых классов уровня LTA (Long Term Archival).
Функции:
Используется для длительного хранения подписи с возможностью проверки спустя годы.
Структура, содержащая ссылки на все сертификаты цепочки.
Содержит:
Используется для offline проверки подписи.
Хранилище самих сертификатов, используемых в подписи.
Функции:
Класс для хранения данных об отзыве сертификатов.
Поддерживает:
Позволяет проверять действительность сертификата на момент подписания.
Signed attributes — ключевая часть CAdES. Они кодируются как ASN.1 SET OF Attribute и подписываются вместе с хэшом данных.
Основные правила:
В Jsrsasign это реализуется через:
Unsigned attributes не включаются в хэш подписи, но добавляются в SignedData после вычисления подписи.
Типичные примеры:
В реализации Jsrsasign они хранятся отдельно и добавляются в
unsignedAttrs.
Процесс построения CAdES подписи включает несколько этапов:
Формирование SignedData (CMS)
Создание SignedAttributes:
Вычисление подписи
Добавление UnsignedAttributes:
Все классы KJUR.asn1.cades используют базовые механизмы
Jsrsasign:
Каждый объект имеет метод:
toASN1Object()Он возвращает структуру, готовую к сериализации в DER.
KJUR.asn1.cades тесно связан с:
KJUR.crypto — криптографические операцииKJUR.asn1.cms — базовый CMS слойKJUR.asn1.x509 — работа с сертификатамиKJUR.jws — JWT (в некоторых сценариях)CAdES фактически является расширением CMS, поэтому использует его структуры как основу.
Типичная цепочка создания атрибутов выглядит следующим образом:
Каждый шаг строго соответствует ASN.1 спецификации ETSI.
KJUR.asn1.cades выступает как слой над CMS,
добавляющий: