ASN.1 (Abstract Syntax Notation One) в контексте криптографической библиотеки Jsrsasign используется как фундаментальный слой для построения и разбора структур, применяемых в сертификатах X.509, ключах PKCS, подписях CMS и других форматах, основанных на DER/BER кодировании. Модуль реализует создание ASN.1 объектов, их вложенность и сериализацию в бинарный формат, совместимый с криптографическими стандартами.
В Jsrsasign ASN.1 реализован через пространство имён
KJUR.asn1, где каждая сущность представляет собой узел
дерева ASN.1. Любая структура строится как иерархия объектов, где
базовый класс определяет общий интерфейс кодирования.
Ключевая концепция — представление ASN.1 дерева как композиции:
Каждый объект способен сериализоваться в DER (Distinguished Encoding Rules), что критично для криптографической совместимости.
Все элементы наследуются от абстрактной модели:
KJUR.asn1.ASN1ObjectASN1UtilБазовый объект определяет:
Ключевая особенность — ленивое кодирование: объект может быть создан как структура, а сериализация происходит только при вызове метода получения HEX/DER представления.
SEQUENCE — основной строительный блок ASN.1.
В Jsrsasign он представлен классом:
KJUR.asn1.DERSequenceОн используется для группировки полей:
SEQUENCE хранит массив дочерних ASN.1 объектов и при сериализации кодирует их последовательно.
Особенность DER-формата: порядок элементов строго фиксирован и важен для криптографической проверки.
Представляется через:
KJUR.asn1.DERIntegerИспользуется для:
Особенности:
Реализуется как:
KJUR.asn1.DERObjectIdentifierOID используется для идентификации:
Структура OID кодируется через базовую схему сжатия (base-128 encoding), где первые два числа объединяются в одно значение.
Класс:
KJUR.asn1.DEROctetStringПрименение:
Особенность: может содержать как «сырые» байты, так и вложенные DER-структуры.
Класс:
KJUR.asn1.DERBitStringИспользуется для:
Структура включает:
ASN.1 поддерживает различные строковые представления, которые в Jsrsasign реализованы отдельными классами:
DERUTF8StringDERPrintableStringDERIA5StringОни используются в:
Кодирование зависит от типа строки, включая ограничение допустимых символов (например, PrintableString имеет строгий набор ASCII символов).
Классы:
KJUR.asn1.DERUTCTimeKJUR.asn1.DERGeneralizedTimeИспользуются для временных меток:
UTCTime применяет двухзначный год, GeneralizedTime — четырёхзначный.
Для удобства построения ASN.1 деревьев Jsrsasign предоставляет высокоуровневые конструкторы:
ASN1Util.newObjectKJUR.asn1.DERTaggedObjectTaggedObject позволяет создавать структуры с явными и неявными тегами, что важно для сложных протоколов.
DER (Distinguished Encoding Rules) — строгая форма BER. В Jsrsasign реализация кодирования включает три этапа:
Каждый объект предоставляет метод:
getEncodedHex()который возвращает шестнадцатеричное представление DER.
Ключевая особенность DER в библиотеке — детерминированность результата: одинаковая структура всегда даёт одинаковый байтовый вывод.
ASN.1 дерево в Jsrsasign строится рекурсивно. Пример типичной композиции:
SEQUENCE
SEQUENCE
BIT STRING
Каждый узел может содержать другие узлы без ограничений глубины.
Это позволяет моделировать:
Хотя Jsrsasign предоставляет высокоуровневый API X509,
внутри он полностью опирается на ASN.1 модуль.
Структура сертификата включает:
ASN.1 модуль отвечает за:
ASN.1 поддерживает явные и неявные теги:
В Jsrsasign это реализовано через:
KJUR.asn1.DERTaggedObjectОн позволяет:
Механизм длины в DER:
Jsrsasign автоматически выбирает формат, исходя из размера содержимого.
var seq = new KJUR.asn1.DERSequence({
array: [
new KJUR.asn1.DERInteger({int: 123}),
new KJUR.asn1.DERObjectIdentifier({oid: "1.2.840.113549.1.1.5"})
]
});
var hex = seq.getEncodedHex();
Здесь:
ASN.1 слой Jsrsasign построен на следующих принципах:
Объекты не используют глобальное состояние, что позволяет безопасно строить структуры параллельно.
ASN.1 модуль используется как фундамент для:
Каждый из этих сценариев сводится к построению ASN.1 дерева и его последующей сериализации.
При работе с ASN.1 в Jsrsasign важно учитывать:
Эти ограничения обеспечивают криптографическую совместимость, но требуют точного соблюдения структуры данных.