Класс KJUR.asn1.cades.CompleteCertificateRefs

В спецификации CAdES (CMS Advanced Electronic Signatures) одним из ключевых элементов расширенной валидации подписи является ссылка на полные данные о сертификатах, участвующих в цепочке доверия. Для этого используется структура CompleteCertificateRefs, которая формирует список идентификаторов сертификатов, включённых в подпись или связанных с ней через цепочку сертификации.

В библиотеке Jsrsasign данный ASN.1-компонент представлен классом KJUR.asn1.cades.CompleteCertificateRefs, предназначенным для генерации и представления структуры в формате ASN.1 DER, соответствующей требованиям стандарта ETSI.

ASN.1 структура CompleteCertificateRefs

С точки зрения ASN.1 описание структуры выглядит как последовательность:

  • CompleteCertificateRefs ::= SEQUENCE OF OtherCertID

Каждый элемент списка представляет собой идентификатор сертификата, обычно включающий:

  • хэш сертификата (digest)
  • алгоритм хэширования
  • опциональные дополнительные атрибуты (issuerSerial и другие поля в зависимости от профиля CAdES)

Таким образом, класс в Jsrsasign инкапсулирует массив ссылок на сертификаты, обеспечивая их корректную сериализацию.

Роль в архитектуре CAdES

Структура CompleteCertificateRefs используется в расширенных форматах подписи CAdES-X Long Type и CAdES-A. Основная задача — предоставить независимую возможность верификации цепочки сертификатов без необходимости повторного получения их из внешних источников.

Это особенно важно в следующих сценариях:

  • архивное хранение подписанных документов
  • долгосрочная валидация подписи
  • офлайн-проверка доверенной цепочки
  • юридически значимые электронные подписи

Использование CompleteCertificateRefs позволяет фиксировать состояние цепочки сертификатов на момент подписания.

Пространство имён Jsrsasign

Класс находится в пространстве:

KJUR.asn1.cades.CompleteCertificateRefs

и относится к модулю CAdES ASN.1-структур библиотеки Jsrsasign. Он взаимодействует с другими компонентами:

  • KJUR.asn1.cades.OtherCertID
  • KJUR.asn1.cms.SignedData
  • KJUR.asn1.ASN1Object

Конструктор класса

Типичная инициализация объекта выполняется через передачу массива идентификаторов сертификатов.

Основная сигнатура:

new KJUR.asn1.cades.CompleteCertificateRefs(params)

где params содержит:

  • otherCertIDs — массив объектов OtherCertID

Каждый элемент массива описывает отдельный сертификат в цепочке.

Пример создания структуры

Формирование объекта начинается с создания идентификаторов сертификатов:

var certId1 = new KJUR.asn1.cades.OtherCertID({
  digestAlgorithm: "sha256",
  certHash: "a1b2c3d4e5f6..."
});

var certId2 = new KJUR.asn1.cades.OtherCertID({
  digestAlgorithm: "sha256",
  certHash: "112233445566..."
});

Далее создаётся структура CompleteCertificateRefs:

var completeCertRefs = new KJUR.asn1.cades.CompleteCertificateRefs({
  otherCertIDs: [certId1, certId2]
});

Кодирование в ASN.1 DER

Для получения бинарного представления используется метод:

completeCertRefs.getEncodedHex();

Результатом является DER-кодированная строка в шестнадцатеричном формате, которая может быть встроена в CMS SignedData или использована в атрибуте подписи CAdES.

Внутренняя логика формирования SEQUENCE

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

  • создаёт ASN.1 SEQUENCE
  • добавляет каждый OtherCertID как отдельный элемент последовательности
  • кодирует структуру согласно DER-правилам
  • возвращает итоговое значение как HEX-строку

Особенность реализации заключается в строгом соответствии ASN.1 DER, что критично для совместимости с криптографическими валидаторами.

Связь с OtherCertID

Класс CompleteCertificateRefs не содержит криптографической логики сам по себе. Его корректность полностью зависит от объектов типа OtherCertID.

Типичная структура OtherCertID включает:

  • хэш сертификата (обычно SHA-256)
  • идентификатор алгоритма
  • опциональные поля идентификации сертификата

Таким образом, CompleteCertificateRefs выступает контейнером для набора таких идентификаторов.

Использование в CAdES-X Long

В расширении CAdES-X Long структура CompleteCertificateRefs применяется совместно с:

  • CompleteRevocationRefs
  • CertificateValues
  • RevocationValues

Эти элементы формируют полный архив проверочных данных, необходимых для долгосрочной проверки подписи.

Особенности реализации в Jsrsasign

Реализация класса ориентирована на следующие принципы:

  • соответствие ETSI TS 101 733 / 102 778
  • совместимость с CMS (RFC 5652)
  • минимальная абстракция поверх ASN.1 SEQUENCE
  • отсутствие избыточной бизнес-логики

Это делает класс низкоуровневым строительным блоком для формирования CAdES-структур.

Типичные ошибки при использовании

На практике при работе с CompleteCertificateRefs встречаются следующие ошибки:

  • передача пустого массива otherCertIDs
  • использование неподдерживаемого алгоритма хэширования
  • несоответствие хэша реальному сертификату
  • нарушение порядка элементов цепочки при строгой валидации

Особенно критично корректное формирование certHash, так как именно он используется для сопоставления сертификатов при проверке подписи.

Взаимодействие с CMS подписанными данными

В составе CMS структура включается как атрибут подписанта:

  • SignedAttributes
  • UnsignedAttributes (в расширенных CAdES профилях)

CompleteCertificateRefs становится частью набора доказательственных данных, прикреплённых к подписи.

Практическая роль в валидации подписи

При проверке подписи валидатор:

  • извлекает CompleteCertificateRefs
  • сравнивает хэши с доступными сертификатами
  • восстанавливает цепочку доверия
  • подтверждает неизменность структуры подписи с момента создания

Таким образом, структура выполняет функцию криптографического «слепка» цепочки сертификатов.