X.690

редактировать

X.690 - это стандарт ITU-T, определяющий несколько ASN.1 форматы кодирования:

  • Основные правила кодирования (BER)
  • Канонические правила кодирования (CER)
  • Особые правила кодирования (DER)

Основные правила кодирования были исходные правила, изложенные в стандарте ASN.1 для кодирования абстрактной информации в конкретный поток данных. Правила, в совокупности называемые синтаксисом передачи на языке ASN.1, определяют точные последовательности октетов, которые используются для кодирования заданного элемента данных. Синтаксис определяет такие элементы, как: представления для основных типов данных, структура информации о длине и средства для определения сложных или составных типов на основе более примитивных типов. Синтаксис BER, а также два подмножества BER (канонические правила кодирования и особые правила кодирования ), определяются в коде X ITU-T. Документ стандартов.690, который является частью серии документов ASN.1.

Содержание
  • 1 Кодировка BER
    • 1.1 Структура кодирования
    • 1.2 Октеты идентификатора
      • 1.2.1 Типы
      • 1.2.2 Кодирование
      • 1.2.3 Длинная форма
    • 1.3 Октеты длины
      • 1.3.1 Определенная форма
      • 1.3.2 Неопределенная форма
    • 1.4 Октеты содержимого
  • 2 Кодировка CER
  • 3 Кодировка DER
  • 4 Сравнение BER, CER и DER
    • 4.1 Критика Кодирование BER
  • 5 Использование
  • 6 См. Также
  • 7 Ссылки
  • 8 Внешние ссылки
Кодирование BER

Формат для основных правил кодирования определяет самоописание и самоограничение формат для кодирования структур данных ASN.1. Каждый элемент данных кодируется как идентификатор типа, описание длины, фактические элементы данных и, при необходимости, маркер конца содержимого. Эти типы кодирования обычно называются кодировками тип-длина-значение или TLV-кодированием. Этот формат позволяет получателю декодировать информацию ASN.1 из неполного потока, не требуя каких-либо предварительных знаний о размере, содержании или семантическом значении данных.

Структура кодирования

Кодирование данных обычно состоит из четырех компонентов, которые появляются в следующем порядке:

Октеты идентификатора. ТипОктеты длины. ДлинаОктеты содержимого. ЗначениеОктеты конца содержимого

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

Октеты идентификатора

Типы

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

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

Следующие теги являются собственными для ASN.1:

Типы, универсальный класс
ИмяРазрешенная конструкцияНомер тега
Десятичное числоШестнадцатеричный
Конец содержимого (EOC)Примитив00
BOOLEANПримитив11
INTEGERПримитив22
BIT STRINGОба33
СТРОКА ОКТЕТОВОба44
NULLПримитив55
ИДЕНТИФИКАТОР ОБЪЕКТА Примитив66
Дескриптор объектаОба77
EXTERNALConstructed88
REAL (float)Primitive99
ENUMERATEDPrimitive10A
EMBEDDED PDVСконструированный11B
UTF8String Оба12C
ОТНОСИТЕЛЬНЫЙ-OIDПримитивный13D
ВРЕМЯПримитив14E
Зарезервировано15F
ПОСЛЕДОВАТЕЛЬНОСТЬ и ПОСЛЕДОВАТЕЛЬНОСТЬСозданы1610
НАБОР и НАБОРПостроено1711
NumericStringОба1812
PrintableString Оба1913
T61String Оба2014
VideotexStringОба2115
IA5String Оба2216
UTCTime Оба2317
GeneralizedTime Оба2418
GraphicStringОба2519
VisibleStringОба261A
GeneralStringОба271B
UniversalString Оба281C
СТРОКА СИМВОЛОВСоздана291D
BMPStringОба301E
ДАТАПримитив311F
ВРЕМЯ ДНЯПримитив3220
ДАТА-ВРЕМЯПримитив3321
DURATIONPrimitive3422
OID-IRIPrimitive3523
RELATIVE-OID-IRIPrimitive3624

Список присваиваемых тегов универсального класса см. на Рек. МСЭ-T X.680, раздел 8, таблица 1.

Кодирование

Октеты идентификатора кодируют тип элемента как тег ASN.1, состоящий из класса и числа, а также того, представляют ли октеты содержимого сконструированное или примитивное значение. Обратите внимание, что некоторые типы могут иметь значения либо с примитивными, либо с построенными кодировками. Он кодируется как 1 или несколько октетов.

Октет 1Октет 2 и далее
8765432187654321
Класс тегаP / CНомер тега (0–30)Н / Д
31ДополнительноНомер тега

В начальном октете бит 6 кодирует, является ли тип примитивным или сконструированным, биты 7–8 кодируют класс типа и биты 1–5 кодируют номер тега. Возможны следующие значения:

КлассЗначениеОписание
Универсальный0Тип является собственным для ASN.1
Приложение1Тип только действительно для одного конкретного приложения
Зависит от контекста2Значение этого типа зависит от контекста (например, в пределах последовательности, набора или выбора)
Частный3Определен в частных спецификациях
P / CЗначениеОписание
Примитив (P)0Октеты содержимого непосредственно кодируют значение элемента.
Сконструировано (C)1Октеты содержимого содержат 0, 1 или более кодировок элементов.

Длинная форма

Если номер тега слишком велик для 5-битного поля тега, его необходимо закодировать в следующих октетах.

Начальный октет кодирует класс и примитив / построенный, как и раньше, а биты 1–5 равны 1. Номер тега кодируется в следующих октетах, где бит 8 каждого равен 1, если октетов больше, а биты 1–7 кодируют номер тега. Комбинированные биты номера тега с прямым порядком байтов кодируют номер тега. Должно быть закодировано наименьшее количество следующих октетов; то есть биты 1–7 не должны быть 0 в первом последующем октете.

Октеты длины

Есть две формы октетов длины: определенная форма и неопределенная форма.

Первый октет длины
ФормаБиты
87654321
Определенная, короткая0Длина (0–127)
Неопределенная10
Определенная, длинная1Количество следующих октетов ( 1–126)
Зарезервировано1127

Определенная форма

Кодирует количество октетов содержимого и всегда используется, если тип является примитивным или сконструированным и данные доступны немедленно. Есть краткая форма и полная форма, которые могут кодировать различные диапазоны длин. Числовые данные кодируются как целые числа без знака, причем младший бит всегда находится первым (справа).

Краткая форма состоит из одного октета, в котором бит 8 равен 0, а биты 1–7 кодируют длину (которая может быть 0) в виде числа октетов.

Длинная форма состоит из 1 начального октета, за которым следуют 1 или несколько последующих октетов, содержащих длину. В начальном октете бит 8 равен 1, а биты 1–7 (исключая значения 0 и 127) кодируют количество следующих за ним октетов. Следующие октеты кодируют с прямым порядком байтов длину (которая может быть равна 0) в виде числа октетов.

Пример полной формы, длина 435
Октет 1Октет 2Октет 3
100000100000000110110011
Полная форма2 октета длины435 октетов содержимого

Неопределенная форма

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

Он состоит из одного октета, в котором бит 8 равен 1, а биты 1–7 равны 0. Затем 2 октета конца содержимого должны завершать октеты содержимого.

Октеты содержимого

Октеты содержимого кодируют значение данных элемента.

Обратите внимание, что октетов содержимого может не быть (следовательно, длина элемента равна 0), если только необходимо отметить существование объекта ASN.1 или его пустоту. Например, это имеет место для значения NULL ASN.1.

Кодирование CER

CER (канонические правила кодирования) - это ограниченный вариант BER для создания однозначного синтаксиса передачи для структур данных, описываемых ASN.1. В то время как BER дает выбор относительно того, как значения данных могут быть закодированы, CER (вместе с DER) выбирает только одну кодировку из тех, которые разрешены основными правилами кодирования, исключая остальные варианты. CER полезен, когда необходимо сохранить кодировки; например, при обмене ценными бумагами.

Кодирование DER

DER (Distinguished Encoding Rules) - это ограниченный вариант BER для создания синтаксиса однозначной передачи для структур данных, описываемых ASN.1. Как и CER, кодировки DER являются допустимыми кодировками BER. DER - это то же самое, что и BER, но все параметры отправителя, кроме одного, удалены.

DER - это подмножество BER, обеспечивающее только один способ кодирования значения ASN.1. DER предназначен для ситуаций, когда требуется уникальная кодировка, например, в криптографии, и гарантирует, что структура данных, которая должна быть подписана цифровой подписью, дает уникальное сериализованное представление. DER можно рассматривать как каноническую форму BER. Например, в BER значение Boolean, равное true, может быть закодировано как любое из 255 ненулевых байтовых значений, в то время как в DER есть один способ кодировать логическое значение true.

Наиболее важные ограничения кодирования DER:

  1. Кодирование длины должно использовать определенную форму
    • Кроме того, должно использоваться кодирование самой короткой длины
  2. Битовая строка, строка октетов и ограниченный символ строки должны использовать примитивную кодировку.
  3. Элементы набора кодируются в отсортированном порядке на основе их значения тега.

DER широко используется для цифровых сертификатов, таких как X.509.

BER, Сравнение CER и DER

Ключевым различием между форматом BER и форматами CER или DER является гибкость, обеспечиваемая базовыми правилами кодирования. BER, как объяснено выше, является базовым набором правил кодирования, приведенным в ITU-T X.690 для передачи структур данных ASN.1. Это дает отправителям четкие правила для кодирования структур данных, которые они хотят отправить, но также оставляет отправителям некоторые варианты кодирования. Как указано в стандарте X.690, «Альтернативные кодировки разрешены основными правилами кодирования в качестве опции отправителя. Получатели, которые заявляют о соответствии основным правилам кодирования, должны поддерживать все альтернативы».

Приемник должен быть подготовлен принимать все юридические кодировки, чтобы на законных основаниях заявлять о соответствии BER. Напротив, как CER, так и DER ограничивают доступные спецификации длины одним параметром. Таким образом, CER и DER являются ограниченными формами BER и служат для устранения неоднозначности стандарта BER.

CER и DER различаются набором ограничений, которые они накладывают на отправителя. Основное различие между CER и DER заключается в том, что DER использует форму окончательной длины, а CER использует форму неопределенной длины в некоторых точно определенных случаях. То есть DER всегда имеет информацию о начальной длине, в то время как CER использует октеты конца содержимого вместо предоставления длины закодированных данных. Из-за этого CER требует меньше метаданных для больших закодированных значений, а DER - для маленьких.

Чтобы облегчить выбор между правилами кодирования, в стандарте X.690 представлены следующие рекомендации:

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

Критика кодирования BER

Существует общее восприятие BER как "неэффективного" по сравнению с альтернативными правилами кодирования. Некоторые утверждали, что такое восприятие в первую очередь связано с плохой реализацией, не обязательно с какой-либо врожденной ошибкой в ​​правилах кодирования. Эти реализации полагаются на гибкость, которую обеспечивает BER для использования логики кодирования, которую легче реализовать, но которая приводит к большему потоку кодированных данных, чем необходимо. Независимо от того, является ли эта неэффективность реальностью или восприятием, она привела к ряду альтернативных схем кодирования, таких как Правила пакетного кодирования, которые пытаются улучшить производительность и размер BER.

Другие альтернативные правила форматирования, которые по-прежнему обеспечивают гибкость BER, но используют альтернативные схемы кодирования, также разрабатываются. Наиболее популярными из них являются альтернативы на основе XML, такие как правила кодирования XML и ASN.1 SOAP. Кроме того, существует стандартное отображение для преобразования схемы XML в схему ASN.1, которая затем может быть закодирована с использованием BER.

Использование

Несмотря на предполагаемые проблемы, BER является популярным формат для передачи данных, особенно в системах с различными собственными кодировками данных.

  • Протоколы SNMP и LDAP определяют ASN.1 с BER в качестве требуемой схемы кодирования.
  • Стандарт EMV для кредита и дебетовые карты используют BER для кодирования данных на карту
  • Стандарт цифровой подписи PKCS # 7 также определяет ASN.1 с BER для кодирования зашифрованных сообщений и их цифровой подписи или цифровой конверт.
  • Многие телекоммуникационные системы, такие как ISDN, бесплатная маршрутизация вызовов и большинство услуг сотовой связи, в некоторой степени используют ASN.1 с BER для передачи управляющих сообщений по сети..
  • Файлы GSM TAP (процедуры передачи учетных записей), (обмен данными в роуминге в режиме, близком к реальному времени) кодируются с использованием BER. [1]

Для сравнения: более определенное кодирование DER широко используется для передачи цифровых сертификатов, таких как X.509.

См. Также
Ссылки

Эта статья основана на материалах, взятых из Free On -line Dictionary of Computing до 1 ноября 2008 г. и включенный в соответствии с условиями "перелицензирования" GFDL, версия 1.3 или более поздняя.

Внешние ссылки
Последняя правка сделана 2021-06-22 06:07:20
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте