OID (Object Identifier) — это уникальный числовой идентификатор, используемый для обозначения объектов в иерархических системах стандартизации. Он широко применяется в криптографии, X.509 сертификатах, ASN.1 структурах, протоколах безопасности и в библиотеке Jsrsasign для точного указания алгоритмов, атрибутов и типов данных.
OID представляет собой последовательность чисел, разделённых точками:
1.2.840.113549.1.1.5
Каждое число в цепочке обозначает узел в древовидной структуре, где путь от корня до конечного элемента формирует уникальный идентификатор.
OID устроен как дерево, где:
Пример структуры:
1 (ISO)
└── 2 (Member Body)
└── 840 (USA)
└── 113549 (RSA Data Security, Inc.)
└── 1
└── 1
└── 5 (sha1WithRSAEncryption)
Таким образом, OID 1.2.840.113549.1.1.5 означает
конкретный алгоритм подписи — SHA-1 с RSA.
OID начинается с одного из трёх корневых значений:
| Значение | Организация |
|---|---|
| 0 | ITU-T |
| 1 | ISO |
| 2 | Joint ISO/ITU-T |
На практике чаще всего встречаются ветви:
1.2 — ISO Member Bodies1.2.840 — США1.3.6.1 — Интернет (IANA, SNMP, LDAP и др.)OID может быть представлен в двух формах:
1.2.840.113549.1.1.1
rsaEncryption
Библиотека Jsrsasign использует числовую форму, но часто предоставляет соответствия между именами и OID.
OID применяется в структурах ASN.1 и кодируется в бинарный формат DER/BER.
AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL
}
OID 1.2.840.113549.1.1.1 кодируется как:
06 09 2A 86 48 86 F7 0D 01 01 01
Где:
06 — тег OBJECT IDENTIFIER09 — длинаПервые два числа объединяются:
(X * 40) + Y
Например:
1.2 → (1 * 40) + 2 = 42 → 0x2AОстальные числа кодируются в base-128:
OID используется для идентификации:
1.2.840.113549.1.1.5 — SHA1withRSA1.2.840.113549.1.1.11 — SHA256withRSA2.16.840.1.101.3.4.2.1 — SHA-2561.2.840.113549.1.1.1 — RSA2.5.4.3 — Common Name (CN)2.5.4.6 — Country (C)Библиотека Jsrsasign активно работает с OID при:
var oid = KJUR.crypto.OID.name2oid("SHA256withRSA");
console.log(oid);
// "1.2.840.113549.1.1.11"
var name = KJUR.crypto.OID.oid2name("1.2.840.113549.1.1.11");
console.log(name);
// "SHA256withRSA"
| Название | OID |
|---|---|
| rsaEncryption | 1.2.840.113549.1.1.1 |
| SHA1withRSA | 1.2.840.113549.1.1.5 |
| SHA256withRSA | 1.2.840.113549.1.1.11 |
| SHA512withRSA | 1.2.840.113549.1.1.13 |
| ECDSAwithSHA256 | 1.2.840.10045.4.3.2 |
OID определяет:
signatureAlgorithm
CN, O, C и др.
basicConstraints → 2.5.29.19
keyUsage → 2.5.29.15
Пример в Jsrsasign:
var cert = new KJUR.asn1.x509.Certificate({
sigalg: "SHA256withRSA",
issuer: { str: "/C=US/O=Test CA/CN=Root" },
subject: { str: "/C=US/O=Test/CN=User" }
});
Внутри библиотека автоматически преобразует
SHA256withRSA в соответствующий OID.
Каждая организация может регистрировать собственные ветви:
Пример:
1.3.6.1.4.1.<enterprise-number>
Где <enterprise-number> выдаётся IANA.
Это позволяет:
Добавление нового OID:
KJUR.crypto.OID.name2oidList["MyAlgorithm"] = "1.2.3.4.5";
KJUR.crypto.OID.oid2nameList["1.2.3.4.5"] = "MyAlgorithm";
Это позволяет использовать пользовательские алгоритмы или расширения.
Пример:
1.3.6.1.4.1.311
│ │ │ │ │ │ └── Microsoft
│ │ │ │ │ └──── Private enterprises
│ │ │ │ └────── Internet
│ │ │ └──────── DoD
│ │ └────────── US
│ └──────────── ISO
└────────────── Root
OID обеспечивает:
Без OID невозможна корректная работа PKI-инфраструктуры, сертификатов и цифровых подписей.
OID используется в:
Jsrsasign реализует поддержку этих стандартов, опираясь на OID как ключевой механизм идентификации.