OID (Object Identifier) представляет собой фундаментальный механизм идентификации алгоритмов, атрибутов и структур данных в ASN.1 и X.509. В криптографических системах OID используются для строгого и однозначного определения сущностей: алгоритмов хеширования, подписей, расширений сертификатов, полей субъектов и множества других элементов инфраструктуры PKI.
В jsrsasign работа с OID централизована в пространстве имён
KJUR.asn1.x509.OID, которое реализует реестр соответствий
между строковыми именами и числовыми идентификаторами OID. Этот реестр
позволяет выполнять двунаправленное преобразование, обеспечивая удобство
разработки при работе с сертификатами, ASN.1 структурами и
криптографическими объектами.
Основная задача реестра OID заключается в том, чтобы связать
человекочитаемые идентификаторы (например, sha256,
rsaEncryption, commonName) с их
ASN.1-эквивалентами вида 2.16.840.1.101.3.4.2.1. Такая
абстракция критически важна, поскольку напрямую работать с числовыми OID
неудобно и подвержено ошибкам.
Структура KJUR.asn1.x509.OID организована как глобальный
статический объект, содержащий внутренние таблицы соответствий:
Эта двунаправленная модель позволяет использовать библиотеку как при генерации сертификатов, так и при их анализе.
Основные методы реестра OID
В KJUR.asn1.x509.OID реализован набор функций для
взаимодействия с таблицей идентификаторов.
Метод преобразует строковое имя алгоритма или атрибута в числовой идентификатор.
var oid = KJUR.asn1.x509.OID.name2oid("sha256");
console.log(oid);
// 2.16.840.1.101.3.4.2.1
Внутри реестра поддерживаются стандартные криптографические и X.509-атрибуты, включая:
sha1, sha256, sha512rsaEncryptioncommonNamecountryNameorganizationNameОбратная операция позволяет интерпретировать ASN.1 структуры:
var name = KJUR.asn1.x509.OID.oid2name("2.5.4.3");
console.log(name);
// commonName
Этот механизм особенно полезен при разборе сертификатов X.509, когда требуется преобразовать низкоуровневые идентификаторы в человекочитаемый формат.
Реестр позволяет проверить наличие записи:
var exists = KJUR.asn1.x509.OID.oid2name("1.2.3.4") !== null;
Такая проверка используется при обработке нестандартных или расширенных OID, которые могут отсутствовать в стандартной базе jsrsasign.
Расширение реестра OID
Одной из ключевых возможностей является добавление пользовательских OID. Это важно при работе с корпоративными PKI, нестандартными расширениями сертификатов или собственными криптографическими схемами.
Добавление выполняется через регистрацию:
KJUR.asn1.x509.OID.register("1.2.3.4.5.6", "customAlgorithm");
После регистрации становятся доступны обе операции:
KJUR.asn1.x509.OID.name2oid("customAlgorithm");
// 1.2.3.4.5.6
KJUR.asn1.x509.OID.oid2name("1.2.3.4.5.6");
// customAlgorithm
Поведение реестра основано на простой таблице соответствий, однако при расширении важно учитывать конфликт имён. Если одно и то же имя регистрируется повторно с другим OID, последнее значение перезапишет предыдущее.
OID в контексте X.509 сертификатов
При генерации сертификатов X.509 OID используются для определения:
Пример использования в структуре сертификата:
var cert = new X509();
cert.setSubject({
C: "US",
O: "Example Org",
CN: "example.com"
});
Внутри jsrsasign эти атрибуты автоматически преобразуются в OID:
Реестр KJUR.asn1.x509.OID обеспечивает это
сопоставление.
Взаимодействие с ASN.1 объектами
При формировании ASN.1 структур OID представляется как объект типа
ASN1ObjectIdentifier. jsrsasign использует реестр для
корректной кодировки:
var asn1Oid = new KJUR.asn1.ASN1ObjectIdentifier({
oid: KJUR.asn1.x509.OID.name2oid("sha256")
});
Это позволяет избежать ручного указания числовых значений и снижает вероятность ошибок.
Внутренняя организация таблиц
Реестр OID в jsrsasign построен на основе двух словарей:
name2oidMapoid2nameMapКаждое добавление через register синхронно обновляет обе
структуры. Это обеспечивает постоянную согласованность данных и ускоряет
доступ по ключу.
Особенности стандартного набора OID
В стандартной поставке jsrsasign уже присутствует большой набор предопределённых значений. Среди них:
Алгоритмы:
Атрибуты X.500:
Расширения сертификатов:
Каждый из них связан с соответствующим числовым OID, используемым в ASN.1 кодировке.
Использование OID при валидации сертификатов
При проверке сертификатов реестр используется для интерпретации
структуры subject, issuer и
extensions. Например:
var oid = "2.5.29.15";
var name = KJUR.asn1.x509.OID.oid2name(oid);
Результат:
keyUsageЭто позволяет анализировать сертификаты без обращения к внешним справочникам OID.
Преобразование OID в процессе криптографических операций
Во время создания цифровой подписи OID определяет алгоритм хеширования:
var sigAlgOid = KJUR.asn1.x509.OID.name2oid("sha256withRSAEncryption");
Затем этот OID помещается в структуру
AlgorithmIdentifier внутри сертификата.
Обработка неизвестных OID
Если OID отсутствует в реестре, методы возвращают null.
Такая ситуация часто возникает при работе с:
В этих случаях допустимо расширение реестра через
register, что обеспечивает динамическую адаптацию системы
без модификации ядра библиотеки.
Роль OID в совместимости PKI
Использование централизованного реестра OID позволяет jsrsasign поддерживать совместимость с различными реализациями PKI, включая OpenSSL, Java Keytool и браузерные криптографические API. Унификация идентификаторов обеспечивает корректное чтение и генерацию сертификатов между различными платформами.
Стабильность и предсказуемость реестра OID особенно важны при сериализации ASN.1 структур, где любое несоответствие идентификаторов приводит к невозможности проверки подписи или чтения сертификата.