OID алгоритмов подписи

OID (Object Identifier) в криптографических алгоритмах подписи представляет собой иерархически структурированную последовательность чисел, которая однозначно идентифицирует алгоритм, используемый для формирования цифровой подписи. В экосистеме X.509, PKCS и CMS именно OID определяет, каким образом будет интерпретироваться подпись, какие хэш-функции и асимметричный алгоритм применяются, а также как проверяющая сторона должна обработать данные.

OID записывается в виде последовательности чисел, разделённых точками, например:

  • 1.2.840.113549.1.1.11
  • 1.2.840.10045.4.3.2
  • 2.16.840.1.101.3.4.3.2

Каждый уровень иерархии имеет смысл:

  • первые значения определяют международные организации (ISO, ITU-T, ANSI)
  • последующие сегменты уточняют ветку стандарта
  • конечные узлы определяют конкретный алгоритм

В криптографии это критично, поскольку строковое имя алгоритма не используется в сертификатах и ASN.1 структурах — только OID обеспечивает строгую интероперабельность между системами.

В контексте JavaScript-библиотеки Jsrsasign OID играет центральную роль при:

  • генерации цифровых подписей
  • формировании X.509 сертификатов
  • создании CSR (Certificate Signing Request)
  • обработке PKCS#7 / CMS контейнеров
  • верификации JWT с алгоритмами RSA/ECDSA

Основные семейства OID алгоритмов подписи

RSA с хэшированием

Наиболее распространённая группа:

  • sha1WithRSAEncryption — 1.2.840.113549.1.1.5
  • sha256WithRSAEncryption — 1.2.840.113549.1.1.11
  • sha384WithRSAEncryption — 1.2.840.113549.1.1.12
  • sha512WithRSAEncryption — 1.2.840.113549.1.1.13

Эти OID используются в сертификатах X.509 и определяют связку “хэш + RSA”.

В Jsrsasign они соответствуют строковым идентификаторам:

  • SHA256withRSA
  • SHA384withRSA
  • SHA512withRSA

ECDSA алгоритмы

Для эллиптических кривых используются отдельные OID:

  • ecdsa-with-SHA256 — 1.2.840.10045.4.3.2
  • ecdsa-with-SHA384 — 1.2.840.10045.4.3.3
  • ecdsa-with-SHA512 — 1.2.840.10045.4.3.4

ECDSA требует точного соответствия кривой и хэш-функции, что делает OID особенно важным в структуре сертификата.

В Jsrsasign они отображаются как:

  • SHA256withECDSA
  • SHA384withECDSA
  • SHA512withECDSA

RSASSA-PSS (современный RSA)

Более современный механизм подписи:

  • RSASSA-PSS — 1.2.840.113549.1.1.10

Этот OID не фиксирует конкретный хэш, поскольку параметры задаются отдельно (MGF1, salt length и т.д.), что отражается и в Jsrsasign через параметрические структуры.


ГОСТ алгоритмы (если поддерживаются расширениями)

В некоторых сборках встречаются:

  • 1.2.643.2.2.19 (ГОСТ R 34.10-2001)
  • 1.2.643.7.1.1.3.2 (ГОСТ R 34.10-2012)

Они используются в ограниченных криптосистемах и требуют отдельной конфигурации провайдера.


Как Jsrsasign связывает OID и алгоритмы

В Jsrsasign существует слой абстракции, который переводит строковые имена алгоритмов в ASN.1 OID.

Внутри библиотеки используется механизм:

  • таблица соответствий (mapping table)
  • ASN.1 генераторы
  • криптографические провайдеры (WebCrypto / pure JS implementation)

Пример логики:

"SHA256withRSA" → 1.2.840.113549.1.1.11
"SHA256withECDSA" → 1.2.840.10045.4.3.2

При формировании сертификата или подписи Jsrsasign:

  1. определяет алгоритм подписи
  2. выбирает соответствующий OID
  3. записывает его в поле signatureAlgorithm
  4. формирует ASN.1 структуру

Использование OID в X.509 сертификатах

В X.509 структурах OID присутствует минимум в трёх местах:

1. signatureAlgorithm

Определяет алгоритм подписи сертификата:

  • AlgorithmIdentifier { algorithm: OID, parameters: NULL }

2. SubjectPublicKeyInfo

Определяет тип публичного ключа:

  • rsaEncryption → 1.2.840.113549.1.1.1
  • id-ecPublicKey → 1.2.840.10045.2.1

3. Extensions

Некоторые расширения также используют OID, например:

  • keyUsage
  • extendedKeyUsage
  • basicConstraints

Таблица соответствий OID и Jsrsasign алгоритмов

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 представление и роль OID

Внутри ASN.1 структура выглядит следующим образом:

AlgorithmIdentifier ::= SEQUENCE {
    algorithm OBJECT IDENTIFIER,
    parameters ANY DEFINED BY algorithm OPTIONAL
}

Jsrsasign формирует этот блок автоматически при вызове:

  • KEYUTIL.generateKeypair
  • KJUR.asn1.x509.Certificate
  • KJUR.crypto.Signature

OID здесь является ключевым элементом, поскольку без него структура теряет семантическую интерпретацию.


Подпись и проверка: роль OID в процессе

При создании подписи:

  1. выбирается алгоритм (например, SHA256withRSA)
  2. вычисляется хэш сообщения
  3. выполняется RSA операция
  4. в ASN.1 добавляется OID алгоритма

При проверке:

  1. извлекается OID из сертификата
  2. определяется алгоритм проверки
  3. выбирается соответствующая функция хэширования
  4. выполняется проверка подписи

Несоответствие OID и реального алгоритма приводит к невозможности верификации.


JWT и OID косвенная связь

Хотя JWT не использует OID напрямую, Jsrsasign связывает:

  • alg: RS256 → SHA256withRSA → 1.2.840.113549.1.1.11

Таким образом OID остаётся внутренним представлением криптографического алгоритма даже в упрощённых форматах.


Внутренняя модель Jsrsasign

Внутри библиотеки используется несколько слоёв:

  • криптографический слой (RSA, ECDSA, SHA)
  • ASN.1 слой (структуры и кодирование)
  • слой идентификаторов (OID mapping)
  • слой сертификатов (X.509, CSR)

OID находится на границе ASN.1 и криптографической логики, обеспечивая строгую совместимость между всеми слоями.


Ошибки, связанные с OID

Типичные проблемы:

  • несовпадение OID и алгоритма ключа
  • отсутствие поддержки OID в старых браузерах
  • неправильное кодирование параметров ASN.1
  • использование устаревших OID (например, SHA-1)

В Jsrsasign такие ошибки проявляются как:

  • Signature verification failed
  • unsupported algorithm
  • invalid ASN.1 structure

Расширяемость системы OID

Jsrsasign позволяет расширять таблицу алгоритмов:

  • добавлять пользовательские OID
  • связывать их с кастомными функциями хэширования
  • использовать нестандартные криптосистемы

Это важно при интеграции с корпоративными PKI или государственными криптографическими стандартами.