Object Identifier (OID) используется в ASN.1 для однозначной идентификации алгоритмов, расширений сертификатов, атрибутов и других структурированных элементов криптографических протоколов. OID представляет собой последовательность чисел, разделённых точками, например:
В DER-формате ASN.1 такие идентификаторы кодируются в компактное бинарное представление, где первый два компонента кодируются особым образом, а остальные преобразуются в base-128 представление.
В библиотеке jsrsasign класс
KJUR.asn1.DERObjectIdentifier предназначен для создания
ASN.1 структуры OID в DER-формате. Он является частью модуля
KJUR.asn1 и наследует поведение базового ASN.1 объекта,
поддерживающего кодирование в DER.
Основная задача класса — преобразовать строковое представление OID в корректную ASN.1 структуру, пригодную для включения в сертификаты, запросы PKCS#10, CMS и другие криптографические контейнеры.
Объект OID в jsrsasign строится вокруг одной ключевой сущности — строки идентификатора.
Пример:
new KJUR.asn1.DERObjectIdentifier({
oid: "1.2.840.113549.1.1.1"
});
Эта строка интерпретируется как последовательность чисел, которые затем кодируются в DER.
KJUR.asn1.DERObjectIdentifier наследуется от базового
класса ASN.1 объектов, таких как KJUR.asn1.ASN1Object. Это
означает, что объект:
Основной смысл — интеграция OID в более крупные структуры, например:
Конструктор принимает объект конфигурации:
oid — строка OID в точечной нотацииПример:
const oid = new KJUR.asn1.DERObjectIdentifier({
oid: "2.5.4.3"
});
Значение должно быть валидным ASN.1 Object Identifier. Валидация обычно происходит на этапе кодирования.
При вызове методов сериализации объект преобразуется в DER-последовательность байтов.
OID кодируется следующим образом:
Первые два числа объединяются по формуле:
Остальные числа кодируются в base-128 с продолжением (continuation bit)
Пример:
OID 1.2.840.113549
будет преобразован в байтовую последовательность, где:
Возвращает DER-представление объекта в виде hex-строки.
Пример использования:
const oid = new KJUR.asn1.DERObjectIdentifier({
oid: "1.2.840.113549.1.1.11"
});
const hex = oid.getEncodedHex();
Результат — строка шестнадцатеричного представления ASN.1 DER.
Возвращает строковое представление объекта. Обычно используется для отладки и логирования.
oid.toString();
Может возвращать исходную строку OID, если поддерживается реализацией базового класса.
DERObjectIdentifier часто применяется внутри сертификатов, например для указания алгоритма подписи.
Пример RSA с SHA-256:
const algOid = new KJUR.asn1.DERObjectIdentifier({
oid: "1.2.840.113549.1.1.11"
});
Этот объект затем помещается в структуру AlgorithmIdentifier:
const algId = new KJUR.asn1.x509.AlgorithmIdentifier({
name: "sha256WithRSAEncryption"
});
Внутри таких объектов OID является ключевым элементом, определяющим криптографический алгоритм.
OID используется для идентификации расширений X.509:
Пример:
const keyUsageOid = new KJUR.asn1.DERObjectIdentifier({
oid: "2.5.29.15"
});
DERObjectIdentifier часто используется внутри:
Пример вложенной структуры:
const seq = new KJUR.asn1.DERSequence({
array: [
new KJUR.asn1.DERObjectIdentifier({
oid: "2.5.4.3"
}),
new KJUR.asn1.DERUTF8String({
str: "Common Name"
})
]
});
OID должен состоять только из чисел и точек:
Библиотека не всегда проверяет существование OID в глобальных регистрах, поэтому ошибка проявляется только в контексте криптографической операции.
OID без правильного включения в SEQUENCE не имеет смысла в DER-структуре, так как ASN.1 требует строгой иерархии.
DERObjectIdentifier является фундаментальным элементом следующих протоколов:
Без корректного OID невозможно однозначно определить криптографический алгоритм или структуру данных.
Класс KJUR.asn1.DERObjectIdentifier оптимизирован
для:
При этом вся работа сосредоточена на преобразовании строки в бинарное ASN.1 представление.
DERObjectIdentifier часто используется совместно с:
Эта связка формирует основу всех структур в jsrsasign, связанных с сертификатами и криптографическими сообщениями.