ГОСТ Р ИСО/МЭК 8825-1-2003
Группа П85
ГОСУДАРСТВЕННЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИ
Информационная технология
ПРАВИЛА КОДИРОВАНИЯ АСН.1.
Часть 1
Спецификация базовых (ВЕR), канонических (CER)
и отличительных (DER) правил кодирования
Information technology. ASN.1 encoding rules. Part 1.
Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER)
and Distinguished Encoding Rules (DER)
ОКС 35.100.60
ОКСТУ 4002
Дата введения 2004-07-01
Предисловие
1 РАЗРАБОТАН Государственным научно-исследовательским и конструкторско-технологическим институтом "ТЕСТ" Министерства Российской Федерации по связи и информатизации
ВНЕСЕН Министерством Российской Федерации по связи и информатизации
2 ПРИНЯТ И ВВЕДЕН В ДЕЙСТВИЕ Постановлением Госстандарта России от 13 мая 2003 г. N 140-ст
3 Настоящий стандарт содержит полный аутентичный текст международного стандарта ИСО/МЭК 8825-1-98 "Информационная технология. Правила кодирования АСН.1. Часть 1. Спецификация базовых (BER), канонических (CER) и отличительных (DER) правил кодирования" с учетом Поправки N 1 (1999 г.) и Дополнения N 1 (2000 г.)
4 ВВЕДЕН ВПЕРВЫЕ
1 Область применения
В настоящем стандарте определен набор базовых правил кодирования, который может использоваться для получения спецификации синтаксиса передачи для значений типов, определенных с использованием абстрактной синтаксической нотации версии 1 (АСН.1), которая установлена в ГОСТ Р ИСО/МЭК 8824-1, ГОСТ Р ИСО/МЭК 8824-2, ГОСТ Р ИСО/МЭК 8824-3 и ГОСТ Р ИСО/МЭК 8824-4. Базовые правила кодирования также применимы для декодирования указанного синтаксиса передачи с целью идентификации передаваемых значений данных. В настоящем стандарте также определен набор канонических и отличительных правил кодирования, которые ограничивают кодирование значений ровно одной из альтернатив, предоставляемых базовыми правилами кодирования.
Эти правила кодирования используются во время передачи (поставщиком услуг уровня представления, когда это требуется контекстом представления).
2 Нормативные ссылки
В настоящем стандарте использованы ссылки на следующие стандарты:
ГОСТ 34.301-91 (ИСО 6429) Информационная технология. 7- и 8-битные кодированные наборы символов. Управляющие функции
ГОСТ Р ИСО/МЭК 7498-1-97* Информационная технология. Взаимосвязь открытых систем. Базовая эталонная модель. Часть 1. Базовая модель (см. также Рекомендацию МСЭ-Т Х.200)
ГОСТ Р ИСО/МЭК 8824-1-2001 Информационная технология. Абстрактная синтаксическая нотация версии один (АСН.1). Часть 1. Спецификация основной нотации (см. также Рекомендацию МСЭ-Т Х.680)
ГОСТ Р ИСО/МЭК 8824-2-2001 Информационная технология. Абстрактная синтаксическая нотация версии один (АСН.1). Часть 2. Спецификация информационного объекта (см. также Рекомендацию МСЭ-Т Х.681)
ГОСТ Р ИСО/МЭК 8824-3-2002 Информационная технология. Абстрактная синтаксическая нотация версии один (АСН.1). Часть 3. Спецификация ограничения (см. также Рекомендацию МСЭ-Т Х.682)
ГОСТ Р ИСО/МЭК 8824-4-2003 Информационная технология. Абстрактная синтаксическая нотация версии один (АСН.1). Часть 4. Параметризация спецификаций АСН. 1 (см. также Рекомендацию МСЭ-Т Х.683)
ГОСТ Р ИСО/МЭК 9594-8-98 Информационная технология. Взаимосвязь открытых систем. Справочник. Часть 8. Основы аутентификации
ИСО/МЭК 2022-94* Информационная технология. Структура кода символов и методы расширения
ИСО 6093-85* Обработка информации. Представление числовых значений в символьных строках для информационного обмена
ИСО/МЭК 6429-92* Информационная технология. Управляющие функции для кодированных наборов символов
ИСО/МЭК 10646-1-93* Информационная технология. Универсальный, многооктетный кодовый набор символов (UCS). Часть 1. Архитектура и основная многоязычная плоскость
________________
* Международные стандарты - во ВНИИКИ Госстандарта России.
3 Определения
В настоящем стандарте используются определения по ГОСТ Р ИСО/МЭК 7498-1, ГОСТ Р ИСО/МЭК 8824-1, а также следующие определения:
3.1 динамическое соответствие: Установление требования к реализации придерживаться при передаче поведения, подписанного настоящим стандартом.
3.2 статическое соответствие: Установление требования к реализации обеспечивать допустимое множество возможностей из определенных настоящим стандартом.
3.3 значение данных: Информация, заданная как значение типа; тип и значение определены с использованием АСН.1.
3.4 кодирование (значение данных): Полная последовательность октетов, используемая для представления значения данных.
3.5 октеты идентификатора: Часть кодирования значения данных, которая используется для идентификации типа значения.
Примечание - В некоторых Рекомендациях МСЭ-Т для этой последовательности октетов применяют термин "элемент данных", но в настоящем стандарте его не используют, так как в других стандартах он применяется в смысле "значение данных".
3.6 октеты длины: Часть кодирования значения данных, следующая за октетами идентификатора, которая используется для определения конца кодирования.
3.7 октеты содержимого: Часть кодирования значения данных, которая представляет конкретное значение.
3.8 октеты конца содержимого: Часть кодирования значения данных, появляющаяся в его конце, которая используется для определения конца кодирования.
Примечание - Не для всех кодирований требуются октеты конца содержимого.
3.9 простое кодирование: Кодирование значения данных, в котором октеты содержимого непосредственно представляют это значение.
3.10 составное кодирование: Кодирование значения данных, в котором октеты содержимого являются полным кодированием одного или нескольких значений данных.
3.11 получатель: реализация декодирования октетов, созданных отправителем, для идентификации значения закодированных данных.
3.12 отправитель: Реализация кодирования значения данных для передачи.
3.13 завершающий 0 бит: 0 в последней позиции значения "битовая строка" (bitstring).
Примечание - 0 в значении битовой строки, состоящем из единственного бита 0, является завершающим 0 битом. Его удаление порождает пустую битовую строку.
4 Сокращения
В настоящем стандарте использованы следующие сокращения:
АСН.1 - абстрактная синтаксическая нотация версии 1
здп - значение данных (уровня) представления
BER - базовые правила кодирования (Basic Encoding Rules) АСН.1
CER - канонические правила кодирования (Canonical Encoding Rules) АСН.1
DER - отличительные правила кодирования (Distinguished Encoding Rules) АСН.1
5 Нотация
В настоящем стандарте использована нотация, определенная в ГОСТ Р ИСО/МЭК 8824-1.
6 Соглашения
6.1 В настоящем стандарте специфицировано значение каждого октета в кодировании с использованием терминов старший значащий бит и младший значащий бит.
Примечание - В спецификациях нижних уровней используются те же самые обозначения для определения порядка передачи битов в последовательной линии связи или для распределения битов в параллельных каналах.
6.2 В настоящем стандарте биты октета нумеруют от 8 до 1, где бит 8 - старший значащий бит, а бит 1 - младший значащий бит.
или
7 Соответствие
7.1 Динамическое соответствие устанавливается всеми разделами стандарта.
7.2 Статическое соответствие устанавливается теми стандартами, которые определяют применение одного или нескольких из этих правил кодирования.
7.3 Альтернативные кодирования допускаются базовыми правилами кодирования как факультативные возможности отправителя. Получатели, которые заявляют о соответствии базовым правилам кодирования, должны поддержать все альтернативы.
Примечание - Примеры таких альтернативных кодирований показаны в 8.1.3.2б и таблице 3.
7.4 Альтернативные кодирования запрещаются каноническими или отличительными правилами кодирования.
8 Базовые правила кодирования
8.1 Общие правила кодирования
8.1.1 Структура кодирования
8.1.1.1 Кодирование значения данных должно состоять из четырех компонентов, которые должны появляться в следующем порядке:
а) октеты идентификатора (см. 8.1.2);
б) октеты длины (см. 8.1.3);
в) октеты содержимого (см. 8.1.4);
г) октеты конца содержимого (см. 8.1.5).
8.1.1.2 Октеты конца содержимого должны присутствовать только в том случае, если их наличие требуется значением октетов длины (см. 8.1.3).
8.1.1.3 На рисунке 1 показана структура кодирования (простого или составного). На рисунке 2 показан один из вариантов составного кодирования.
Рисунок 1 - Структура кодирования
Рисунок 2 - Вариант составного кодирования
8.1.1.4 Структура кодирования не изменяется ни для нотации подтипа АСН.1, ни для нотации расширения типа АСН.1.
8.1.2 Октеты идентификатора
8.1.2.1 Октеты идентификатора должны кодировать тег АСН.1 (класс и номер) типа значения данных.
8.1.2.2 Для тегов с номером от 0 до 30 (включительно) октеты идентификатора должны содержать единственный октет, закодированный следующим образом:
а) биты 8 и 7 представляют класс тега и должны кодироваться так, как определено в таблице 1;
б) бит 6 должен быть нулем или единицей согласно правилам 8.1.2.5;
в) биты с 5 по 1 должны кодировать номер тега как двоичное целое число с битом 5 в качестве старшего значащего бита.
Таблица 1 - Кодирование класса тега
|
|
|
Класс | Бит 8 | Бит 7 |
Универсальный | 0 | 0 |
Прикладной | 0 | 1 |
Контекстно зависимый | 1 | 0 |
Пользовательский | 1 | 1 |
8.1.2.3 На рисунке 3 показан вид октета идентификатора для типа с номером тега от 0 до 30 (включительно).
Рисунок 3 - Октет идентификатора (небольшой номер тега)
8.1.2.4 Для тегов с номерами, большими или равными 31, идентификатор должен состоять из головного октета, за которым следуют один или несколько октетов продолжения.
8.1.2.4.1 Головной октет должен быть закодирован следующим образом:
а) биты 8 и 7 представляют класс тега и должны быть закодированы так, как определено в таблице 1;
б) бит 6 должен быть нулем или единицей согласно правилам 8.1.2.5;
8.1.2.4.2 Последующие октеты должны кодировать номер тега следующим образом:
а) бит 8 каждого октета должен иметь значение 1, если он не является последним октетом идентификатора;
б) биты с 7 по 1 первого октета продолжения, за которыми следуют биты с 7 по 1 второго октета продолжения, за которыми, в свою очередь, следуют биты с 7 по 1 каждого следующего октета продолжения, до последнего, включительно, должны быть кодированием двоичного целого числа без знака, равного номеру тега, с битом 7 первого октета продолжения в качестве старшего значащего бита;
в) биты с 7 по 1 первого октета продолжения не должны быть все равны нулю.
8.1.2.4.3 На рисунке 4 показана форма октетов идентификатора для типа с тегом, номер которого больше 30.
Рисунок 4 - Октет идентификатора (большой номер тега)
8.1.2.5 Бит 6 должен быть равен нулю, если кодирование простое, и единице, если кодирование составное.
Примечание - В последующих разделах для каждого типа определено, является его кодирование простым или составным.
8.1.2.6 В ГОСТ Р ИСО/МЭК 8824-1 установлено, что тег типа, определенного с использованием ключевого слова "CHOICE", принимает значение тега того типа, значение данных которого выбрано.
8.1.2.7 В ГОСТ Р ИСО/МЭК 8824-2, 14.2 и 14.4 установлено, что тег типа, определенного с использованием конструкции "ObjectClassFieldType", неопределен, если он является полем типа, полем значения переменного типа или полем множества значений переменного типа. Этот тип впоследствии определяется как тип АСН.1, и его полное кодирование идентично кодированию значения присвоенного типа (включая октеты идентификатора).
8.1.3 Октеты длины
8.1.3.1 Определены две формы октетов длины, а именно:
а) определенная форма (см. 8.1.3.3);
б) неопределенная форма (см. 8.1.3.6).
8.1.3.2 Отправитель должен использовать:
а) определенную форму (см. 8.1.3.3), если кодирование простое;
б) либо определенную (см. 8.1.3.3), либо неопределенные формы (см. 8.1.3.6), по своему выбору, если кодирование составное и непосредственно доступно целиком;
в) неопределенную форму (см. 8.1.3.6), если кодирование составное и непосредственно доступно не полностью.
8.1.3.3 Для определенной формы октеты длины должны состоять из одного или нескольких октетов и представлять число октетов содержимого, используя короткую (см. 8.1.3.4) или длинную форму (см. 8.1.3.5), по выбору отправителя.
Примечание - Короткая форма может быть использована только в том случае, если число октетов содержимого меньше или равно 127.
8.1.3.4 В короткой форме октеты длины должны состоять из одного октета, в котором бит 8 является нулевым, а биты с 7 по 1 кодируют число октетов содержимого (которое может быть нулевым) как двоичное целое число без знака с битом 7 в качестве старшего значащего бита.
Пример
8.1.3.5 В длинной форме октеты длины должны состоять из начального октета и одного или нескольких последующих октетов. Начальный октет должен быть закодирован следующим образом:
а) 8 бит должен быть равен единице;
б) биты с 7 по 1 должны кодировать число последующих октетов длины как двоичное целое число без знака с битом 7 в качестве старшего значащего бита;
Примечание 1 - Это ограничение введено для возможного последующего расширения.
Биты с 8 по 1 первого октета продолжения с последующими битами с 8 по 1 второго октета продолжения, с последующими битами с 8 по 1 каждого следующего октета, включая последний октет продолжения, должны быть кодированием двоичного целого числа без знака, равного числу октетов содержимого, с битом 8 первого октета продолжения в качестве старшего значащего бита.
Пример
L=201 может быть закодирована как:
Примечание 2 - В длинной форме отправитель может выбирать, использовать ли октетов длины больше, чем минимально необходимо.
8.1.3.6 Для неопределенной формы октеты длины указывают, что октеты содержимого заканчиваются октетами конец-содержимого (см. 8.1.5) и должны содержать единственный октет.
8.1.3.6.1 Единственный октет должен иметь 8 бит, равный единице, и биты с 7 по 1, равные нулю.
8.1.3.6.2 Если используется неопределенная форма длины, то октеты конец-содержимого (см. 8.1.5) должны присутствовать в кодировании после октетов содержимого.
8.1.4 Октеты содержимого
Октеты содержимого должны состоять из нуля, одного или нескольких октетов и кодировать значение данных так, как определено в последующих разделах.
Примечание - Октеты содержимого зависят от типа значения данных; последующие разделы расположены в том же порядке, что и определения типов в АСН.1.
8.1.5 Октеты конец-содержимого
Октеты конец-содержимого должны присутствовать, если длина закодирована так, как определено в 8.1.3.6, в противном случае они присутствовать не должны.
Октеты конец-содержимого должны состоять из двух нулевых октетов.
Примечание - Октеты конец-содержимого могут рассматриваться как кодирование значения с тегом универсального класса, форма которого является простой, номер тега - нулевой, а содержимое отсутствует. Таким образом:
|
|
|
Конец-содержимого | Длина | Содержимое |
00 | 0016 | Отсутствует |
8.2 Кодирование булевского значения
8.2.1 Кодирование булевского значения должно быть простым. Октеты содержимого должны состоять из одного октета.
8.2.2 Если булевское значение есть FALSE ("ложь"), то октет должен быть нулем. Если булевское значение TRUE ("истина"), то октет должен иметь любое ненулевое значение по выбору отправителя.
Пример - Если тип BOOLEAN, то значение TRUE может быть закодировано как:
|
|
|
Булевский тип | Длина | Содержимое |
01 | 01 | FF |
8.3 Кодирование целочисленного значения
8.3.1 Кодирование целочисленного значения должно быть простым. Октеты содержимого должны состоять из одного или нескольких октетов.
8.3.2 Если октеты содержимого кодирования целочисленного значения содержат более одного октета, то биты первого октета и 8 бит второго октета:
а) не должны все быть единицами;
б) не должны все быть нулевыми.
Примечание - Эти правила гарантируют, что целочисленное значение всегда кодируется в наименьшем возможном числе октетов.
8.3.3 Октеты содержимого должны быть дополнительным кодом двоичного числа, равного кодируемому целочисленному значению, образованным битами с 8 по 1 первого октета, с последующими битами с 8 по 1 второго октета, с последующими битами с 8 по 1 каждого очередного октета, включая последний октет содержимого.
8.4 Кодирование перечислимого значения
Кодирование перечислимого значения должно быть кодированием связанного с ним целочисленного значения.
Примечание - Кодирование является простым.
8.5 Кодирование действительного значения
8.5.1 Кодирование действительного значения должно быть простым.
8.5.2 Если действительное значение является нулевым, то в кодировании не должно быть никаких октетов содержимого.
Примечание - Форма хранения, создания или обработки отправителями и получателями и форма, используемая в нотации значения АСН.1, полностью не зависят от основания, используемого при передаче.
8.5.4 Бит 8 первого октета содержимого должен быть установлен следующим образом:
а) если бит 8=1, то применяется двоичное кодирование, определенное в 8.5.5;
б) если бит 8=0 и бит 7=0, то применяется десятичное кодирование, определенное в 8.5.6;
в) если бит 8=0, а бит 7=1, то "SpecialRealValue" (см. ГОСТ Р ИСО/МЭК 8824-1) кодируется так, как определено в 8.5.7.
|
|
|
Биты с 6 по 5 | Основание | |
| 00
| основание 2
|
| 01
| основание 8 |
| 10
| основание 16 |
| 11 | зарезервировано для последующих редакций настоящего стандарта. |
8.5.5.4 Биты со 2 по 1 первого октета содержимого должны кодировать формат экспоненты следующим образом: если биты со 2 по 1 равны:
а) 00, то второй октет содержимого кодирует значение экспоненты в виде дополнительного кода двоичного числа;
б) 01, то второй и третий октеты содержимого кодируют значение экспоненты в виде дополнительного кода двоичного числа;
в) 10, то второй, третий и четвертый октеты содержимого кодируют значение экспоненты в виде дополнительного кода двоичного числа;
Примечания
1 Для неканонических ВЕR не требуется нормализация мантиссы с "плавающей" точкой. Это позволяет реализатору передавать октеты, содержащие мантиссу, без выполнения функций сдвига мантиссы в памяти. В канонических и отличительных правилах кодирования нормализация определена, и мантисса (если она не 0) должна сдвигаться до тех пор, пока наименьший значащий бит не станет равным 1.
2 Это представление действительных чисел сильно отличается от форматов, обычно используемых в аппаратуре с "плавающей" точкой, но оно предназначено для легкого преобразования в такие форматы и из таких форматов (см. приложение С).
8.5.6 Когда используется десятичное кодирование (биты с 8 по 7 =00), все октеты содержимого после первого образуют поле, в смысле ИСО 6093, выбранной отправителем длины, закодированное в соответствии с ИСО 6093. Выбор представления числа по ИСО 6093 определяется битами с 6 по 1 первого октета содержимого следующим образом:
|
|
|
Биты с 6 по 1 | Представление числа | |
| 000001 | ИСО 6093, формат NR1 |
| 000010 | ИСО 6093, формат NR2 |
| 000011 | ИСО 6093, формат NR3 |
Остальные значения битов с 6 по 1 зарезервированы для настоящего стандарта.
Не должны использоваться масштабные коэффициенты, определенные в сопровождающей документации (см. ИСО 6093).
Примечания
1 Рекомендации ИСО 6093 относительно использования, по крайней мере, одной цифры слева от десятичного знака сохраняются и в настоящем стандарте, но не являются обязательными.
2 Использование нормированной формы (см. ИСО 6093) не существенно и остается на усмотрение отправителя.
8.5.7 Когда должны быть закодированы "SpecialRealValues" (биты с 8 по 7 =01), то должен быть только один октет содержимого со следующими значениями:
01000000 значение равно PLUS-INFINITY;
01000001 значение равно MINUS-INFINITY.
Все другие значения, имеющие биты 8 и 7, равные 0 и 1 соответственно, зарезервированы для дополнений к настоящему стандарту.
8.6 Кодирование значения "битовая строка"
8.6.1 Кодирование значения "битовая строка" должно быть простым или составным, по усмотрению отправителя.
Примечание - Если необходимо передать часть битовой строки до того, как она вся станет доступной, то используется составное кодирование.
8.6.2 Октеты содержимого для простого кодирования должны содержать начальный октет, с последующим нулем, одним или несколькими октетами продолжения.
8.6.2.1 Биты в битовой строке, с первого до последнего, должны размещаться в битах с 8 до 1 первого октета продолжения, далее - в битах с 8 до 1 второго октета продолжения, затем - в битах с 8 до 1 каждого следующего октета и завершаться тем количеством битов, которое необходимо в конечном октете продолжения, начиная с бита 8.
Примечание - Термины "первый бит" и "завершающий бит" определены в ГОСТ Р ИСО/МЭК 8824-1.
8.6.2.2 Начальный октет должен кодировать, в виде двоичного целого числа без знака с битом 1 в качестве наименьшего значащего бита, число неиспользованных битов в конечном октете продолжения. Число должно находиться в диапазоне от нуля до семи.
8.6.2.3 Если битовая строка пуста, то не должно быть никаких октетов продолжения, а начальный октет должен быть нулевым.
8.6.2.4 При применении подраздела 21.7 ГОСТ Р ИСО/МЭК 8824-1 кодировщики/декодировщики BER могут добавлять или убирать завершающие нулевые биты значения.
Примечание - Если значение битовой строки не имеет единичных битов, то кодировщик (по усмотрению отправителя) может кодировать значение с начальным октетом, равным 0, или может кодировать его как битовую строку с одним или несколькими нулевыми битами после начального октета.
8.6.3 Октеты содержимого для составного кодирования должны состоять из нуля, одного или нескольких вложенных кодирований.
Примечание - Каждое такое кодирование включает в себя октеты идентификатора, длины, содержимого и может включать октеты конец-содержимого, если оно является составным.
8.6.4 Для кодирования значения битовой строки таким способом это значение должно быть сегментировано. Каждый сегмент должен состоять из ряда последовательных битов значения и должен, возможно, за исключением последнего, содержать число битов, кратное восьми. Каждый бит в общем значении должен присутствовать ровно в одном сегменте, а размещение границ сегментов значения не имеет.
Примечание - Сегмент может иметь нулевой размер, то есть не содержать биты.
8.6.4.1 Каждое кодирование в октетах содержимого должно представлять сегмент общей битовой строки, кодовое представление которой является результатом рекурсивного применения настоящего раздела. При этом применении каждый сегмент рассматривается как значение битовой строки. Кодовые представления сегментов должны появляться в октетах содержимого в том порядке, в каком их биты появляются в общем значении.
Примечания
1 Как следствие этой рекурсии, каждое кодирование в октетах содержимого само может быть простым или составным. Однако обычно такие кодирования являются простыми.
2 В частности, теги в октетах содержимого всегда универсального класса номер 3.
8.6.4.2 Пример. Если тип BIT STRING, то его значение ’0A3B5F291CD’H может быть закодировано так, как показано ниже. В данном примере BitString представлена как примитив:
|
|
|
BitString | Длина | Содержимое |
03 | 07 | 040А3В5F291СD0 |
Это же значение может быть закодировано так, как показано ниже. В данном примере BitString представлена как конструкция:
|
|
|
|
|
BitString | Длина | Содержимое |
| |
23 | 80 | BitString | Длина | Содержимое |
|
| 03 | 03 | 000А3В |
Е0С | Длина | 03 | 05 | 045F291CD0 |
00 | 00 |
|
|
|
8.7 Кодирование значения "строка октетов"
8.7.1 Кодирование значения "строка октетов" должно быть простым или составным, по усмотрению отправителя.
Для получения доступа к полной версии без ограничений вы можете выбрать подходящий тариф или активировать демо-доступ.