INTEGER в ASN.1 представляется в jsrsasign как один из базовых
примитивов DER-кодирования и используется для хранения целочисленных
значений произвольной длины. В библиотеке Jsrsasign работа с INTEGER
реализована через класс KJUR.asn1.DERInteger, который
формирует корректное DER-представление числа с учётом знака и
минимальной длины байтового представления.
Внутренне ASN.1 INTEGER кодируется в двоичном виде в формате
big-endian, где старший бит первого байта определяет знак числа. Это
означает, что при кодировании положительных чисел, у которых старший бит
может быть установлен в 1, добавляется дополнительный байт
0x00 для предотвращения интерпретации значения как
отрицательного.
Пример создания INTEGER в jsrsasign:
const intObj = new KJUR.asn1.DERInteger({ int: 12345 });
const hex = intObj.getEncodedHex();
Также возможно передавать отрицательные значения:
const intNeg = new KJUR.asn1.DERInteger({ int: -42 });
При работе с криптографическими структурами INTEGER часто используется для представления версий, порядковых номеров, длины параметров и компонентов ключей. В частности, в структурах сертификатов X.509 целые числа применяются для серийных номеров.
BIT STRING представляет собой тип ASN.1, предназначенный для хранения
последовательности битов, где длина может быть не кратна байту. В
jsrsasign данный тип реализуется через
KJUR.asn1.DERBitString. В отличие от OCTET STRING, BIT
STRING хранит дополнительный первый байт, указывающий количество
неиспользуемых битов в последнем октете.
Структура BIT STRING в DER включает:
Пример создания BIT STRING:
const bitStr = new KJUR.asn1.DERBitString({
hex: "a0ff12"
});
const encoded = bitStr.getEncodedHex();
Также можно задавать значение через бинарную строку:
const bitStr2 = new KJUR.asn1.DERBitString({
bin: "11001010"
});
BIT STRING широко используется в криптографии, например в X.509 сертификатах для хранения публичного ключа, где важна точная битовая структура без выравнивания до байта.
OCTET STRING используется для хранения произвольных бинарных данных,
представленных как последовательность байтов. В jsrsasign он реализован
через KJUR.asn1.DEROctetString.
В отличие от BIT STRING, OCTET STRING не содержит метаданных о битовой длине, так как всегда оперирует байтами.
Пример создания OCTET STRING:
const oct = new KJUR.asn1.DEROctetString({
hex: "deadbeef"
});
const encoded = oct.getEncodedHex();
Также поддерживается строковое представление:
const oct2 = new KJUR.asn1.DEROctetString({
str: "Hello"
});
В криптографических структурах OCTET STRING часто используется для хранения:
Особенность OCTET STRING в ASN.1 заключается в том, что он может содержать вложенные ASN.1 структуры, закодированные как байтовая последовательность.
NULL в ASN.1 обозначает отсутствие значения и реализуется в jsrsasign
через KJUR.asn1.DERNull. Этот тип не содержит полезной
нагрузки и всегда кодируется фиксированным образом.
DER-представление NULL всегда одинаково:
Пример создания:
const nullObj = new KJUR.asn1.DERNull();
const encoded = nullObj.getEncodedHex();
NULL используется в случаях, когда параметр алгоритма или поле структуры должно быть явно задано как пустое значение. Например, в алгоритмах подписи RSA часто указывается NULL для параметров, которые не используются.
В X.509 сертификатах NULL встречается в поле параметров алгоритма подписи, где оно обозначает отсутствие дополнительных параметров.
OID (Object Identifier) представляет собой иерархический
идентификатор, используемый для уникального обозначения алгоритмов,
атрибутов и структур данных. В jsrsasign OID реализуется через
KJUR.asn1.DERObjectIdentifier.
OID состоит из последовательности чисел, разделённых точками,
например 1.2.840.113549.
Пример создания OID:
const oid = new KJUR.asn1.DERObjectIdentifier({
oid: "1.2.840.113549.1.1.11"
});
const encoded = oid.getEncodedHex();
Этот OID соответствует алгоритму
sha256WithRSAEncryption.
Особенность кодирования OID заключается в том, что первые два числа кодируются в одном байте по формуле:
first_byte = 40 * value1 + value2
Остальные элементы кодируются в формате base-128 с использованием continuation bit (0x80).
OID широко используется в ASN.1 структурах для:
В jsrsasign OID часто используется совместно с последовательностями
DERSequence, формируя сложные структуры, например
AlgorithmIdentifier:
const alg = new KJUR.asn1.DERSequence({
array: [
new KJUR.asn1.DERObjectIdentifier({ oid: "1.2.840.113549.1.1.1" }),
new KJUR.asn1.DERNull()
]
});
Такая комбинация определяет RSA без параметров.
Каждый из рассмотренных типов является базовым строительным блоком ASN.1-структур в jsrsasign. INTEGER обеспечивает числовую основу, BIT STRING — точное битовое представление, OCTET STRING — универсальный контейнер байтовых данных, NULL — явное отсутствие значения, OID — глобальную систему идентификации элементов криптографической экосистемы.