Что означают числа в "последовательности" синтаксиса ASN.1?

Вот пример:

 TBSCertificate  ::=  SEQUENCE  {
     version         [0]  EXPLICIT Version DEFAULT v1,
     serialNumber         CertificateSerialNumber,
     signature            AlgorithmIdentifier,
     issuer               Name,
     validity             Validity,
     subject              Name,
     subjectPublicKeyInfo SubjectPublicKeyInfo,
     issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
                          -- If present, version must be v2 or v3
     subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
                          -- If present, version must be v2 or v3
     extensions      [3]  EXPLICIT Extensions OPTIONAL
                          -- If present, version must be v3
     }

Что означают числа [0], [1], ..., когда они нужны и что означает отсутствие такого числа?


person savx2    schedule 21.10.2020    source источник


Ответы (1)


Они называются номерами тегов, и они используются (вместе со словом EXPLICIT или IMPLICIT, которое может следовать) для кодирования / декодирования значения TBSCertificate, когда используется форма TLV (значение длины тега) (например, основные правила кодирования ASN.1)

Текст, который вы показываете, вызывает спецификацию и описывает тип (TBSCertificate). Фактически, это лишь часть спецификации, поскольку вам не хватает определения Version, CerficateSerialNumber и т. Д.

Спецификация представляет собой читаемый человеком текст.

К тому времени, когда вы захотите создать экземпляры значений, вы должны знать, какая кодировка будет использоваться (ASN.1 определяет некоторые из них, двоичные и текстовые).

Самая старая двоичная кодировка называется базовыми правилами кодирования и использует форму TLV.

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

Для меня разрешение тегов в спецификации было огромной ошибкой, которая была сделана в самом начале ASN.1. Он смешивает две совершенно разные вещи (спецификацию и кодировку).

Позднее это было решено с помощью так называемой АВТОМАТИЧЕСКОЙ маркировки, но ущерб был нанесен.

person YaFred    schedule 21.10.2020
comment
Теги ручного производства по-прежнему используются в системах, где совокупность схем не компилируется в один вывод, т.е. разные подсистемы получают для использования разные файлы схемы. В этом случае автоматическая маркировка становится помехой, потому что компиляторы начинают с нуля и работают оттуда в том порядке, в котором они попадают в продукцию. Это менее чем полезно, если разные подсистемы имеют одинаковое производство через разную последовательность ИМПОРТОВ; автоматическое назначение будет другим. Ручная маркировка решает эту проблему, но затем становится немного похожей на управление номерами строк в старомодном BASICA. - person bazza; 22.11.2020