OID (Object Identifier) представляет собой иерархическую систему
числовых идентификаторов, используемых в криптографии и ASN.1 для
однозначного обозначения алгоритмов, атрибутов, расширений сертификатов
и структурных элементов. В виде строки OID записывается как
последовательность чисел, разделённых точками, например
1.2.840.113549.1.1.5. В прикладных библиотеках, включая
Jsrsasign, поверх этого формата часто накладывается слой
человекочитаемых имен, таких как sha1WithRSAEncryption или
rsaEncryption.
В Jsrsasign работа с OID сосредоточена в таблицах соответствий и утилитах, позволяющих выполнять двустороннюю конвертацию: строковое имя ↔︎ числовой OID. Это необходимо при разборе сертификатов X.509, генерации подписей, формировании ASN.1 структур и интерпретации криптографических параметров.
Внутри библиотеки OID используется в двух основных формах:
Пример соответствия:
"rsaEncryption" ↔︎
"1.2.840.113549.1.1.1""sha256WithRSAEncryption" ↔︎
"1.2.840.113549.1.1.11"Такая модель позволяет работать на уровне абстракции алгоритмов, не оперируя «сырыми» идентификаторами, но при необходимости переходить к ASN.1 представлению.
В Jsrsasign используется внутренний словарь, содержащий отображения между именами и OID. Он включает:
Структурно это выглядит как две взаимосвязанные таблицы:
Подобная организация позволяет выполнять обратимые преобразования без потери информации.
Для преобразования символьного имени в OID используется утилитарный слой Jsrsasign, связанный с ASN.1 и криптографическими объектами.
Типичный сценарий — получение OID алгоритма подписи:
var oid = KJUR.asn1.x509.OID.name2oid("sha256WithRSAEncryption");
Результат:
1.2.840.113549.1.1.11
Механизм работает через внутреннюю таблицу соответствий, где ключом выступает строковое имя, а значением — ASN.1 идентификатор.
В случае отсутствия имени в таблице возвращается неопределённое значение или исходная строка без преобразования, в зависимости от контекста использования.
Обратное преобразование применяется при анализе сертификатов X.509, когда ASN.1 структура содержит только числовой идентификатор.
Пример:
var name = KJUR.asn1.x509.OID.oid2name("1.2.840.113549.1.1.11");
Результат:
sha256WithRSAEncryption
Такое преобразование критично при интерпретации подписей, так как ASN.1 сертификаты всегда хранят алгоритмы в виде OID, а не строковых описаний.
При декодировании X.509 структуры OID встречается в нескольких ключевых местах:
signatureAlgorithmsignatureAlgorithm parameterssubjectPublicKeyInfo.algorithmextensionsJsrsasign при парсинге сертификата автоматически применяет таблицы OID для упрощения вывода:
var cert = new X509();
cert.readCertPEM(pemString);
var sigAlgOid = cert.getSignatureAlgorithmField();
var sigAlgName = KJUR.asn1.x509.OID.oid2name(sigAlgOid);
Таким образом, низкоуровневое представление преобразуется в семантическое имя алгоритма.
Расширения сертификатов также идентифицируются через OID. Например:
basicConstraints → 2.5.29.19keyUsage → 2.5.29.15subjectAltName → 2.5.29.17Jsrsasign использует OID для определения типа расширения при парсинге:
var extName = KJUR.asn1.x509.OID.oid2name("2.5.29.15");
Результат:
keyUsage
Если расширение не входит в стандартный набор, оно остаётся в виде числового OID без преобразования.
Возможна регистрация дополнительных соответствий, что важно при работе с корпоративными или национальными криптографическими стандартами.
Пример расширения таблицы:
KJUR.asn1.x509.OID.name2oidList["customAlgorithm"] = "1.2.3.4.5.6.7.8.9";
KJUR.asn1.x509.OID.oid2nameList["1.2.3.4.5.6.7.8.9"] = "customAlgorithm";
После этого преобразования становятся двусторонними:
KJUR.asn1.x509.OID.name2oid("customAlgorithm");
// 1.2.3.4.5.6.7.8.9
KJUR.asn1.x509.OID.oid2name("1.2.3.4.5.6.7.8.9");
// customAlgorithm
OID тесно связан с определением алгоритмов в криптографических структурах. В Jsrsasign он используется для:
Пример использования при формировании подписи:
var algOid = KJUR.asn1.x509.OID.name2oid("sha1WithRSAEncryption");
Далее этот OID включается в ASN.1 структуру
AlgorithmIdentifier.
Механизм конвертации в Jsrsasign не использует внешние сервисы или динамическое разрешение. Он основан на статических JSON-подобных структурах.
Алгоритм работы:
name2oidListoid2nameListТакая модель обеспечивает детерминированность и независимость от окружения.
При встрече неизвестного идентификатора библиотека сохраняет его в исходном виде:
"1.2.999.1" остаётся без измененийЭто важно при работе с нестандартными криптографическими расширениями.
При создании ASN.1 структур OID кодируется как OBJECT IDENTIFIER тип:
var alg = {
name: "sha256WithRSAEncryption",
oid: KJUR.asn1.x509.OID.name2oid("sha256WithRSAEncryption")
};
В ASN.1 сериализации используется именно числовая форма, поскольку она является обязательной в стандарте X.509.
Система преобразования OID ↔︎ имя решает ключевую задачу интерпретации криптографических данных:
Jsrsasign выполняет роль связующего уровня, обеспечивая согласованность между ними без необходимости ручного сопоставления идентификаторов.