OID (Object Identifier) в ASN.1 представляет собой иерархически структурированную последовательность чисел, предназначенную для однозначной идентификации криптографических алгоритмов, атрибутов и структур данных. В контексте хеширования OID фиксирует конкретный алгоритм дайджеста, используемый в цифровых подписях, сертификатах X.509 и криптографических контейнерах.
Структура OID задаётся в виде строкового представления:
2.16.840.1.101.3.4.2.1
Каждый узел иерархии уточняет область определения, вплоть до конкретного алгоритма. В криптографических стандартах наиболее значимые ветви принадлежат организациям NIST, ISO и RSA Security.
Алгоритмы хеширования, применяемые в криптографических протоколах, стандартизированы и имеют закреплённые идентификаторы:
SHA-1 исторически использовался в цифровых подписях и сертификатах:
1.3.14.3.2.26
Несмотря на широкое распространение в прошлом, алгоритм считается криптографически небезопасным.
SHA-2 включает несколько вариантов с различной длиной выхода:
2.16.840.1.101.3.4.2.1
Наиболее часто используемый алгоритм в современных TLS-сертификатах.
2.16.840.1.101.3.4.2.2
Применяется в высокозащищённых системах и криптографических протоколах.
2.16.840.1.101.3.4.2.3
Используется при повышенных требованиях к стойкости.
MD5 имеет идентификатор:
1.2.840.113549.2.5
Алгоритм считается устаревшим и не используется в криптографически защищённых системах.
Библиотека Jsrsasign реализует работу с ASN.1 структурами, сертификатами X.509 и криптографическими алгоритмами. OID используется как связующее звено между алгоритмами хеширования и их представлением в сертификатах и подписях.
Внутреннее представление OID в Jsrsasign реализуется через строки и специализированные объекты:
var oid = "2.16.840.1.101.3.4.2.1"; // SHA-256
В модуле KJUR.crypto.MessageDigest алгоритмы
идентифицируются как человекочитаемыми именами, но при формировании
ASN.1 структур происходит преобразование в OID.
var md = new KJUR.crypto.MessageDigest({alg: "sha256"});
var hash = md.digestString("test data");
При использовании внутри X.509 или CMS структур Jsrsasign автоматически сопоставляет:
sha1 → 1.3.14.3.2.26sha256 → 2.16.840.1.101.3.4.2.1sha384 → 2.16.840.1.101.3.4.2.2sha512 → 2.16.840.1.101.3.4.2.3В структуре X.509 каждый криптографический алгоритм представлен через
AlgorithmIdentifier, включающий OID и параметры.
В Jsrsasign это реализуется через
KJUR.asn1.x509.AlgorithmIdentifier:
var algId = new KJUR.asn1.x509.AlgorithmIdentifier({
name: "sha256WithRSAEncryption"
});
В ASN.1 структурах это преобразуется в:
AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL
}
Пример итогового OID для подписи SHA-256 с RSA:
1.2.840.113549.1.1.11
| Алгоритм | OID |
|---|---|
| SHA-1 | 1.3.14.3.2.26 |
| SHA-256 | 2.16.840.1.101.3.4.2.1 |
| SHA-384 | 2.16.840.1.101.3.4.2.2 |
| SHA-512 | 2.16.840.1.101.3.4.2.3 |
| MD5 | 1.2.840.113549.2.5 |
При формировании подписи Jsrsasign объединяет хеш-функцию и алгоритм подписи в единый идентификатор. Например:
sha256WithRSAEncryption → 1.2.840.113549.1.1.11
Процесс включает:
AlgorithmIdentifierJsrsasign использует внутренние таблицы соответствий:
KJUR.crypto.OID = {
"sha256": "2.16.840.1.101.3.4.2.1",
"sha384": "2.16.840.1.101.3.4.2.2",
"sha512": "2.16.840.1.101.3.4.2.3"
};
При сериализации ASN.1 объектов происходит автоматическое преобразование:
OID кодируется по правилам DER:
40 * X + YНапример SHA-256:
2.16.840.1.101.3.4.2.1
преобразуется в байтовую последовательность, используемую в сертификатах X.509.
В CMS (Cryptographic Message Syntax) OID определяет алгоритм
хеширования в структуре SignedData.
Jsrsasign при формировании CMS пакета использует:
var cms = new KJUR.asn1.cms.SignedData({
digestAlg: "sha256"
});
В итоговой структуре OID фиксирует алгоритм дайджеста, используемый для проверки подписи.
ASN.1 допускает определение пользовательских OID. В Jsrsasign это реализуется через ручное указание:
var customOid = "1.2.3.4.5.6.7.8.9";
Такие идентификаторы применяются в экспериментальных протоколах или закрытых криптосистемах.
При несогласованности OID и фактического алгоритма возникают ошибки валидации сертификатов:
Jsrsasign при разборе структуры X.509 сравнивает OID с внутренним реестром алгоритмов.
В зависимости от окружения Jsrsasign может взаимодействовать с:
В каждом случае OID служит универсальным идентификатором, не зависящим от конкретной реализации хеш-функции.
OID обеспечивает: