OID (Object Identifier) в криптографических алгоритмах подписи представляет собой иерархически структурированную последовательность чисел, которая однозначно идентифицирует алгоритм, используемый для формирования цифровой подписи. В экосистеме X.509, PKCS и CMS именно OID определяет, каким образом будет интерпретироваться подпись, какие хэш-функции и асимметричный алгоритм применяются, а также как проверяющая сторона должна обработать данные.
OID записывается в виде последовательности чисел, разделённых точками, например:
Каждый уровень иерархии имеет смысл:
В криптографии это критично, поскольку строковое имя алгоритма не используется в сертификатах и ASN.1 структурах — только OID обеспечивает строгую интероперабельность между системами.
В контексте JavaScript-библиотеки Jsrsasign OID играет центральную роль при:
Наиболее распространённая группа:
Эти OID используются в сертификатах X.509 и определяют связку “хэш + RSA”.
В Jsrsasign они соответствуют строковым идентификаторам:
SHA256withRSASHA384withRSASHA512withRSAДля эллиптических кривых используются отдельные OID:
ECDSA требует точного соответствия кривой и хэш-функции, что делает OID особенно важным в структуре сертификата.
В Jsrsasign они отображаются как:
SHA256withECDSASHA384withECDSASHA512withECDSAБолее современный механизм подписи:
Этот OID не фиксирует конкретный хэш, поскольку параметры задаются отдельно (MGF1, salt length и т.д.), что отражается и в Jsrsasign через параметрические структуры.
В некоторых сборках встречаются:
Они используются в ограниченных криптосистемах и требуют отдельной конфигурации провайдера.
В Jsrsasign существует слой абстракции, который переводит строковые имена алгоритмов в ASN.1 OID.
Внутри библиотеки используется механизм:
Пример логики:
"SHA256withRSA" → 1.2.840.113549.1.1.11
"SHA256withECDSA" → 1.2.840.10045.4.3.2
При формировании сертификата или подписи Jsrsasign:
signatureAlgorithmВ X.509 структурах OID присутствует минимум в трёх местах:
Определяет алгоритм подписи сертификата:
Определяет тип публичного ключа:
Некоторые расширения также используют OID, например:
| Jsrsasign алгоритм | OID |
|---|---|
| SHA1withRSA | 1.2.840.113549.1.1.5 |
| SHA256withRSA | 1.2.840.113549.1.1.11 |
| SHA384withRSA | 1.2.840.113549.1.1.12 |
| SHA512withRSA | 1.2.840.113549.1.1.13 |
| SHA256withECDSA | 1.2.840.10045.4.3.2 |
| SHA384withECDSA | 1.2.840.10045.4.3.3 |
| SHA512withECDSA | 1.2.840.10045.4.3.4 |
| RSA (key type) | 1.2.840.113549.1.1.1 |
| EC public key | 1.2.840.10045.2.1 |
Внутри ASN.1 структура выглядит следующим образом:
AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL
}
Jsrsasign формирует этот блок автоматически при вызове:
KEYUTIL.generateKeypairKJUR.asn1.x509.CertificateKJUR.crypto.SignatureOID здесь является ключевым элементом, поскольку без него структура теряет семантическую интерпретацию.
При создании подписи:
При проверке:
Несоответствие OID и реального алгоритма приводит к невозможности верификации.
Хотя JWT не использует OID напрямую, Jsrsasign связывает:
alg: RS256 → SHA256withRSA → 1.2.840.113549.1.1.11Таким образом OID остаётся внутренним представлением криптографического алгоритма даже в упрощённых форматах.
Внутри библиотеки используется несколько слоёв:
OID находится на границе ASN.1 и криптографической логики, обеспечивая строгую совместимость между всеми слоями.
Типичные проблемы:
В Jsrsasign такие ошибки проявляются как:
Signature verification failedunsupported algorithminvalid ASN.1 structureJsrsasign позволяет расширять таблицу алгоритмов:
Это важно при интеграции с корпоративными PKI или государственными криптографическими стандартами.