Назначение SignaturePolicyIdentifier связано с реализацией политики электронной подписи в формате CAdES, где каждая подпись может быть привязана к формально определённому набору правил. Этот идентификатор позволяет однозначно указать, по какой политике сформирована подпись, и обеспечивает возможность проверки соответствия подписи требованиям регламента, установленного заранее.
В рамках ASN.1 структура SignaturePolicyIdentifier представляет собой элемент, который может принимать два состояния: указание конкретной политики либо значение отсутствия политики. В случае наличия политики она описывается через идентификатор OID, хэш-значение политики и дополнительные квалификаторы. Такая конструкция обеспечивает криптографическую привязку подписи к документированному набору правил, исключая возможность подмены интерпретации условий формирования подписи.
Структура в терминах ASN.1 обычно описывается следующим образом:
SignaturePolicyIdentifier ::= CHOICE { signaturePolicyId SignaturePolicyId, signaturePolicyImplied NULL }
SignaturePolicyId ::= SEQUENCE { sigPolicyId SigPolicyId, sigPolicyHash SigPolicyHash, sigPolicyQualifiers SEQUENCE SIZE (1..MAX) OF SigPolicyQualifierInfo OPTIONAL }
SigPolicyId ::= OBJECT IDENTIFIER
SigPolicyHash ::= SEQUENCE { hashAlgorithm AlgorithmIdentifier, hashValue OCTET STRING }
Эта модель задаёт строгую структуру, в которой политика подписи не является произвольной строкой, а формализована через криптографические и идентификационные элементы.
Класс KJUR.asn1.cades.SignaturePolicyIdentifier в
библиотеке Jsrsasign предназначен для построения ASN.1 структуры
SignaturePolicyIdentifier в соответствии с требованиями CAdES. Он входит
в пространство имён KJUR.asn1.cades, которое содержит набор
инструментов для работы с CMS/PKCS#7 и расширениями CAdES.
Основная задача класса заключается в генерации корректного ASN.1 объекта, который затем может быть встроен в SignedAttributes подписи CMS.
Внутренняя логика класса опирается на базовые ASN.1 примитивы Jsrsasign: SEQUENCE, OBJECT IDENTIFIER, OCTET STRING и конструкции алгоритмов хэширования.
Конструктор KJUR.asn1.cades.SignaturePolicyIdentifier
принимает объект с описанием политики подписи. Типичная структура
параметров включает:
В зависимости от переданных данных формируется либо CHOICE с NULL (implied policy), либо полная структура SignaturePolicyId.
Идентификатор политики представляет собой OID, например:
Этот идентификатор включается в ASN.1 как OBJECT IDENTIFIER и служит ключевым элементом привязки подписи к конкретной нормативной политике.
В Jsrsasign данный элемент формируется через ASN1ObjectIdentifier, который обеспечивает корректное кодирование OID в DER-формате.
Хэш политики используется для криптографической фиксации содержимого политики подписи. Это предотвращает возможность изменения политики после того, как подпись была сформирована.
Структура включает:
Пример логики формирования:
sha256)В Jsrsasign алгоритм задаётся через идентификаторы из
KJUR.crypto.Util, а значение хэша передаётся в hex или byte
representation.
Поле sigPolicyQualifiers является необязательным и предназначено для расширения описания политики. Оно может содержать:
Каждый квалификатор кодируется как SigPolicyQualifierInfo, который включает OID типа квалификатора и значение.
В Jsrsasign квалификаторы передаются как массив объектов, каждый из которых преобразуется в ASN.1 SEQUENCE.
SignaturePolicyIdentifier может быть представлена в двух формах:
В Jsrsasign это реализуется через условие:
implied = true, создаётся ASN.1 NULLТакой подход соответствует требованиям ETSI TS 101 733.
var sigPolicy = new KJUR.asn1.cades.SignaturePolicyIdentifier({
sigPolicyId: "2.16.756.1.89.1.2.1.1",
sigPolicyHash: {
alg: "sha256",
hash: "9f2c7a..."
},
sigPolicyQualifiers: [
{
oid: "1.2.840.113549.1.9.16.5.1",
uri: "https://example.com/policy.pdf"
}
]
});
В результате выполнения создаётся ASN.1 объект, который может быть сериализован в DER и включён в структуру SignedAttributes.
SignaturePolicyIdentifier используется внутри SignedAttributes CMS подписи. При формировании PKCS#7 структуры она включается как один из атрибутов:
Jsrsasign автоматически кодирует этот атрибут как контекстно-зависимый ASN.1 элемент, который затем участвует в вычислении подписываемого хэша.
Важно, что SignaturePolicyIdentifier влияет на итоговое значение SignedData, поскольку входит в набор подписываемых атрибутов.
Реализация SignaturePolicyIdentifier опирается на следующие компоненты:
Каждый из этих модулей отвечает за отдельный уровень абстракции ASN.1/CMS модели.
После формирования объекта SignaturePolicyIdentifier выполняется кодирование в DER (Distinguished Encoding Rules). Это строго бинарный формат, в котором:
Jsrsasign обеспечивает автоматическое выполнение этих преобразований
через метод toHex() или getEncodedHex().
При формировании SignaturePolicyIdentifier возможны типовые ошибки:
Jsrsasign в большинстве случаев не выполняет строгую валидацию бизнес-логики, ограничиваясь проверкой ASN.1 корректности, поэтому контроль входных данных остаётся на уровне приложения.
Класс SignaturePolicyIdentifier соответствует требованиям:
Эти стандарты определяют структуру расширенных электронных подписей, включая обязательность или опциональность политики подписи в зависимости от профиля CAdES-BES, CAdES-EPES и других.
SignaturePolicyIdentifier особенно важен в профиле EPES (Explicit Policy-based Electronic Signature), где наличие политики является обязательным.
В типичном процессе создания подписи:
SignaturePolicyIdentifier участвует до шага подписи, влияя на итоговый подписываемый блок.
В корпоративных системах SignaturePolicyIdentifier применяется для:
Наличие политики позволяет валидатору подписи проверять не только криптографическую корректность, но и соответствие регламенту.
SignaturePolicyIdentifier часто используется совместно с:
Эти атрибуты образуют полный набор SignedAttributes, обеспечивающий семантическую и криптографическую целостность подписи.
При сериализации важно учитывать:
Jsrsasign автоматически упорядочивает SET, но структура данных должна быть корректной на уровне входа.
KJUR.asn1.cades.SignaturePolicyIdentifier является не самостоятельным криптографическим механизмом, а генератором ASN.1 структуры, встроенной в более широкий процесс CMS-подписи. Его функция заключается в формализации политики подписи в виде стандартизированного бинарного представления, совместимого с PKCS#7 и CAdES.