WikiDer > X.690
X.690 является ITU-T стандарт, определяющий несколько ASN.1 форматы кодирования:
- Основные правила кодирования (BER)
- Канонические правила кодирования (CER)
- Отличительные правила кодирования (DER)
Основные правила кодирования были исходными правилами, установленными стандартом ASN.1 для кодирования абстрактной информации в конкретный поток данных. Правила, вместе именуемые синтаксис передачи на языке ASN.1 укажите точное октет последовательности, которые используются для кодирования заданного элемента данных. Синтаксис определяет такие элементы, как: представления для основных типов данных, структура информации о длине и средства для определения сложных или составных типов на основе более примитивных типов. Синтаксис BER вместе с двумя подмножествами BER ( Канонические правила кодирования и Отличительные правила кодирования), определяются ITU-Tдокумент стандартов X.690, который является частью серии документов ASN.1.
Кодирование BER
Формат для базовых правил кодирования определяет самоописывающий и саморазграничивающий формат для кодирования структур данных ASN.1. Каждый элемент данных кодируется как идентификатор типа, описание длины, фактические элементы данных и, при необходимости, маркер конца содержимого. Эти типы кодировок обычно называют тип-длина-значение или кодировки TLV. Этот формат позволяет получателю декодировать информацию ASN.1 из неполного потока, не требуя каких-либо предварительных знаний о размере, содержании или семантическом значении данных.[1]
Структура кодирования
Кодирование данных обычно состоит из четырех компонентов, которые появляются в следующем порядке:
Октеты идентификатора Тип | Октеты длины Длина | Октеты содержания Ценить | Октеты конца содержимого |
Октеты конца содержимого являются необязательными и используются только в том случае, если используется форма неопределенной длины. Октет содержимого также может быть опущен, если нет содержимого для кодирования, как в типе NULL.
Октеты идентификатора
Типы
Данные (особенно элементы последовательностей, наборов и вариантов выбора) могут быть помечены уникальным номером тега (показанным в ASN.1 в квадратных скобках []), чтобы отличать эти данные от других элементов. Такие теги могут быть неявными (где они кодируются как тег TLV значения вместо использования базового типа в качестве тега TLV) или явными (когда тег используется в построенном TLV, который охватывает TLV базового типа). Стиль тегов по умолчанию является явным, если неявный не установлен на уровне модуля ASN.1. Такие теги имеют класс по умолчанию, зависящий от контекста, но его можно переопределить, используя имя класса перед тегом.
Кодировка значения выбора такая же, как кодировка значения выбранного типа. Кодировка может быть примитивной или построенной, в зависимости от выбранного типа. Тег, используемый в октетах идентификатора, является тегом выбранного типа, как указано в определении выбранного типа в ASN.1.
Следующие теги являются родными для ASN.1:
Имя | Разрешенное строительство | Номер тега | |
---|---|---|---|
Десятичный | Шестнадцатеричный | ||
Конец содержания (EOC) | Примитивный | 0 | 0 |
BOOLEAN | Примитивный | 1 | 1 |
ЦЕЛОЕ | Примитивный | 2 | 2 |
BIT STRING | Обе | 3 | 3 |
ОКТЕТНАЯ СТРОКА | Обе | 4 | 4 |
НОЛЬ | Примитивный | 5 | 5 |
ИДЕНТИФИКАТОР ОБЪЕКТА | Примитивный | 6 | 6 |
Дескриптор объекта | Обе | 7 | 7 |
ВНЕШНИЙ | Построено | 8 | 8 |
НАСТОЯЩИЙ (плавающий) | Примитивный | 9 | 9 |
ПЕРЕЧИСЛЕННЫЕ | Примитивный | 10 | А |
ВСТРОЕННЫЙ PDV | Построено | 11 | B |
UTF8String | Обе | 12 | C |
ОТНОСИТЕЛЬНЫЙ-OID | Примитивный | 13 | D |
ВРЕМЯ | Примитивный | 14 | E |
Зарезервированный | 15 | F | |
ПОСЛЕДОВАТЕЛЬНОСТЬ И ПОСЛЕДОВАТЕЛЬНОСТЬ | Построено | 16 | 10 |
НАБОР и НАБОР | Построено | 17 | 11 |
NumericString | Обе | 18 | 12 |
PrintableString | Обе | 19 | 13 |
T61String | Обе | 20 | 14 |
VideotexString | Обе | 21 | 15 |
IA5String | Обе | 22 | 16 |
UTCTime | Обе | 23 | 17 |
GeneralizedTime | Обе | 24 | 18 |
GraphicString | Обе | 25 | 19 |
VisibleString | Обе | 26 | 1А |
GeneralString | Обе | 27 | 1B |
UniversalString | Обе | 28 | 1С |
СТРОКА ХАРАКТЕРА | Построено | 29 | 1D |
BMPString | Обе | 30 | 1E |
ДАТА | Примитивный | 31 | 1F |
ВРЕМЯ ДНЯ | Примитивный | 32 | 20 |
ДАТА-ВРЕМЯ | Примитивный | 33 | 21 |
ПРОДОЛЖИТЕЛЬНОСТЬ | Примитивный | 34 | 22 |
OID-IRI | Примитивный | 35 | 23 |
ОТНОСИТЕЛЬНЫЙ-OID-IRI | Примитивный | 36 | 24 |
Список назначений тегов универсального класса можно найти в Рек. ITU-T X.680, раздел 8, таблица 1 [2] .
Кодирование
Октеты идентификатора кодируют тип элемента как тег ASN.1, состоящий из класса и числа, а также того, представляют ли октеты содержимого сконструированное или примитивное значение. Обратите внимание, что некоторые типы могут иметь значения либо с примитивным, либо с сконструированным кодированием. как 1 или несколько октетов.
Октет 1 | Октет 2 и далее | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
Класс тега | ПК | Номер тега (0–30) | Нет данных | ||||||||||||
31 | Более | Номер тега |
В начальном октете бит 6 кодирует, является ли тип примитивным или сконструированным, биты 7–8 кодируют класс типа, а биты 1–5 кодируют номер тега. Возможны следующие значения:
Учебный класс | Ценить | Описание |
---|---|---|
Универсальный | 0 | Тип является родным для ASN.1 |
Заявление | 1 | Тип действителен только для одного конкретного приложения |
Зависит от контекста | 2 | Значение этого типа зависит от контекста (например, в последовательности, наборе или выборе) |
Частный | 3 | Определено в частных спецификациях |
ПК | Ценить | Описание |
---|---|---|
Примитивный (P) | 0 | Октеты содержимого непосредственно кодируют значение элемента. |
Построен (C) | 1 | Октеты содержимого содержат 0, 1 или более кодировок элементов. |
Длинная форма
Если номер тега слишком велик для 5-битного поля тега, его необходимо закодировать в дополнительных октетах.
Начальный октет кодирует класс и примитив / построенный, как и раньше, а биты 1–5 равны 1. Номер тега кодируется в следующих октетах, где бит 8 каждого равен 1, если октетов больше, а биты 1–7 кодируют номер тега. Комбинированные биты номера тега, с прямым порядком байтов, кодируют номер тега. Должно быть закодировано наименьшее количество следующих октетов; то есть биты 1–7 не должны быть 0 в первом последующем октете.
Октеты длины
Есть две формы октетов длины: определенная форма и неопределенная форма.
Форма | Биты | |||||||
---|---|---|---|---|---|---|---|---|
8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | |
Определенный, короткий | 0 | Длина (0–127) | ||||||
Неопределенный | 1 | 0 | ||||||
Определенный, длинный | 1 | Количество следующих октетов (1–126) | ||||||
Зарезервированный | 1 | 127 |
Определенная форма
Это кодирует количество октетов содержимого и всегда используется, если тип является примитивным или сконструированным, и данные доступны немедленно. Существует короткая форма и длинная форма, которые могут кодировать различные диапазоны длины. Числовые данные кодируются как целые числа без знака с младший значащий бит всегда первым (справа).
В Краткая форма состоит из одного октета, в котором бит 8 равен 0, а биты 1–7 кодируют длину (которая может быть равна 0) как число октетов.
В полная форма состоят из 1 начального октета, за которым следуют 1 или несколько последующих октетов, содержащих длину. В начальном октете бит 8 равен 1, а биты 1–7 (исключая значения 0 и 127) кодируют количество следующих за ним октетов.[1]Следующие октеты кодируют с прямым порядком байтов длину (которая может быть равна 0) в виде числа октетов.
Октет 1 | Октет 2 | Октет 3 | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
Длинная форма | 2 октета длины | 435 октетов содержимого |
Неопределенная форма
Это вообще не кодирует длину, но октеты содержимого заканчиваются октетами маркеров. Это относится к сконструированным типам и обычно используется, если содержимое не доступно сразу во время кодирования.
Он состоит из одного октета, в котором бит 8 равен 1, а биты 1–7 равны 0. Тогда 2 октеты конца содержимого должен завершать октеты содержимого.
Октеты содержания
Октеты содержимого кодируют значение данных элемента.[1]
Обратите внимание, что октетов содержимого может не быть (следовательно, длина элемента равна 0), если необходимо отметить только существование объекта ASN.1 или его пустоту. Например, это имеет место для ASN. 1 значение NULL.
Кодирование CER
CER (Canonical Encoding Rules) - это ограниченный вариант 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 a Булево Значение true может быть закодировано как любое из 255 ненулевых байтовых значений, в то время как в DER есть один способ кодировать логическое значение true.
Наиболее существенными ограничениями кодирования DER являются:
- Кодирование длины должно использовать определенную форму
- Кроме того, необходимо использовать кодировку с минимально возможной длиной.
- Строка битов, строка октетов и ограниченные символьные строки должны использовать примитивную кодировку.
- Элементы набора кодируются в отсортированном порядке в зависимости от значения их тегов.
DER широко используется для цифровых сертификатов, таких как X.509.
Сравнение BER, CER и DER
Ключевое различие между форматом BER и форматами CER или DER заключается в гибкости, обеспечиваемой базовыми правилами кодирования. BER, как объяснено выше, является базовым набором правил кодирования, заданным ITU-T X.690 для передачи структур данных ASN.1. Это дает отправителям четкие правила кодирования структур данных, которые они хотят отправить, но также оставляет отправителям некоторые варианты кодирования. Как указано в стандарте X.690, «Альтернативные кодировки разрешены основными правилами кодирования в качестве опции отправителя. Получатели, заявляющие о соответствии основным правилам кодирования, должны поддерживать все альтернативы».[1]
Получатель должен быть готов принять все законные кодировки, чтобы законно заявить о соответствии BER. Напротив, как CER, так и DER ограничивают доступные спецификации длины одним параметром. Таким образом, CER и DER являются ограниченными формами BER и служат для устранения неоднозначности стандарта BER.
CER и DER различаются набором ограничений, которые они накладывают на отправителя. Основное различие между CER и DER заключается в том, что DER использует форму окончательной длины, а CER использует форму неопределенной длины в некоторых точно определенных случаях. То есть DER всегда имеет информацию о начальной длине, в то время как CER использует октеты конца содержимого вместо предоставления длины закодированных данных. Из-за этого CER требует меньше метаданных для больших закодированных значений, а DER - для маленьких.
Чтобы облегчить выбор между правилами кодирования, документ стандартов X.690 предоставляет следующие рекомендации:
Выделенные правила кодирования более подходят, чем канонические правила кодирования, если закодированное значение достаточно мало, чтобы поместиться в доступной памяти, и есть необходимость быстро пропустить некоторые вложенные значения. Канонические правила кодирования более подходят, чем выделенные правила кодирования, если необходимо кодировать значения, которые настолько велики, что они не могут легко поместиться в доступную память, или если необходимо кодировать и передавать часть значения перед всем значением. доступен. Базовые правила кодирования более подходят, чем канонические или выделенные правила кодирования, если кодирование содержит заданное значение или набор значений и нет необходимости в ограничениях, которые накладывают канонические и выделенные правила кодирования.
Критика кодирования BER
Существует общее восприятие BER как «неэффективного» по сравнению с альтернативными правилами кодирования. Некоторые утверждали, что такое восприятие в первую очередь связано с плохой реализацией, а не обязательно с каким-либо внутренним недостатком в правилах кодирования.[3] Эти реализации полагаются на гибкость, которую обеспечивает BER для использования логики кодирования, которую проще реализовать, но которая приводит к большему потоку кодированных данных, чем необходимо. Независимо от того, является ли эта неэффективность реальностью или восприятием, она привела к ряду альтернативных схем кодирования, таких как Упакованные правила кодирования, которые пытаются улучшить производительность и размер BER.
Также разрабатываются другие альтернативные правила форматирования, которые по-прежнему обеспечивают гибкость BER, но используют альтернативные схемы кодирования. Наиболее популярными из них являются альтернативы на основе XML, такие как Правила кодирования XML и ASN.1 МЫЛО.[4] Кроме того, существует стандартное отображение для преобразования схемы XML в схему ASN.1, которая затем может быть закодирована с использованием BER.[5]
использование
Несмотря на кажущиеся проблемы, BER - популярный формат для передачи данных, особенно в системах с различными собственными кодировками данных.
- В SNMP и LDAP протоколы определяют ASN.1 с BER в качестве требуемой схемы кодирования.
- В EMV стандарт для кредитных и дебетовых карт использует BER для кодирования данных на карту
- Стандарт цифровой подписи PKCS # 7 также определяет ASN.1 с BER для кодирования зашифрованных сообщений и их цифровой подписи или же цифровой конверт.
- Многие телекоммуникационные системы, такие как ISDN, бесплатную маршрутизацию вызовов, и большинство услуг сотовой связи в определенной степени используют ASN.1 с BER для передачи управляющих сообщений по сети.
- GSM TAP (Процедуры перенесенного счета), NRTRDE Файлы (обмен данными в роуминге в режиме, близком к реальному времени) кодируются с использованием BER. [1]
Для сравнения, более определенное кодирование DER широко используется для передачи цифровых сертификатов, таких как X.509.
Смотрите также
- Kerberos
- Упакованные правила кодирования (PER, X.691)
- Формат обмена структурированными данными (SDXF)
- Сериализация
Рекомендации
Статья основана на материалах, взятых из Бесплатный онлайн-словарь по вычислительной технике до 1 ноября 2008 г. и зарегистрированы в соответствии с условиями «перелицензирования» GFDL, версия 1.3 или новее.
- ^ а б c d Информационные технологии - правила кодирования ASN.1: спецификация основных правил кодирования (BER), канонических правил кодирования (CER) и особых правил кодирования (DER), ITU-T X6.90, 07/2002
- ^ http://itu.int/ITU-T/X.680
- ^ Линь Хуай-Ань. «Оценка оптимальной производительности синтаксиса передачи ASN.1 / BER». Обзор компьютерных коммуникаций ACM. 93, 45 - 58 июля.
- ^ Рек. МСЭ-Т. X.892, ИСО / МЭК 24824-2
- ^ ITU-T X.694, ISO / IEC ISO / IEC 8825-5
внешняя ссылка
- RSA "Руководство для неспециалистов по подмножеству ASN.1, BER и DER"
- ITU-T X.690, ISO / IEC 8825-1
- ITU-T X.892, ISO / IEC 24824-2
- ITU-T X.694, ISO / IEC ISO / IEC 8825-5
- PKCS # 7
- jASN1 Библиотека кодирования BER / DER Java ASN.1 с открытым исходным кодом от beanit
- PHPASN1 Библиотека кодирования / декодирования PHP ASN.1 BER на github, под лицензией GPL
- ASN1js Библиотека кодирования / декодирования JavaScript ASN.1 BER на github, под лицензией GPL
- Руководство по стилю X.509 Питера Гутмана