Протоколы безопасного сетевого взаимодействия

       

В этой лекции мы кратко


В этой лекции мы кратко рассмотрим стандартную нотацию для определения типов и значений данных – Abstract Syntax Notation One (ASN.1). Значение данных является экземпляром определенного типа. Стандарт ASN.1 определяет несколько базовых типов и синтаксис соответствующих им значений, а также правила для получения составных типов и значений.
При описании протоколов взаимодействия или систем, которые совместно используют определенные структуры данных, требуется определить типы данных, передаваемые этими протоколами или совместно используемые различными системами. Для того чтобы определить эти типы данных, требуется специальная нотация. Такой нотацией является ASN.1.
Данная нотация, с одной стороны, интуитивно понятна, а с другой стороны, может использоваться как протоколами, так и программными системами. Неотъемлемой частью ASN.1 являются базовые правила представления BER (Basic Encoding Rules). BER описывает принцип представления любой величины в рамках стандарта ASN.1. Практически все величины представляются в виде последовательности 8-битных октетов. Восьмой бит октета считается самым старшим. BER позволяет представить величину в виде последовательности 8-битных октетов несколькими способами. Имеется также поднабор правил представления DER (Distinguished Encoding Rules), который определяют однозначные способы представления величин в ASN.1.
Ниже приведены базовые правила обозначений в ASN.1. Все нотации ASN.1 будут печататься шрифтом Courier New.
В ASN.1 типы и значения выражаются в нотации, близкой к используемой в языках программирования. Множественные пробелы и разрывы строк рассматриваются как один пробел. Комментарий может располагаться как на одной строке (в этом случае он начинается с пары символов -- и заканчивается концом строки), так и на нескольких строках (в этом случае он начинается с /* и заканчивается */). Идентификаторы (имена значений и полей) и имена типов состоят из букв, цифр и пробелов. Идентификаторы начинаются со строчной буквы, а имена типов – с прописной.


В ASN.1 используются следующие обозначения:
[] – квадратные скобки указывают на то, что терм является необязательным;
{} – фигурные скобки группируют родственные термы;
| – вертикальная черта выделяет альтернативные значения;
... – многоточие обозначает повторения;
= – знак равенства описывает терм как подтерм.
ASN.1 определяет следующие разновидности типов: простые типы, не имеющие компонентов, структурные типы, имеющие компоненты, помеченные (тегированные – tagged) типы, которые получаются из других типов добавлением метки (тега), а также такие типы, как CHOICE, ANY и некоторые другие. Типам и значениям могут присваиваться имена с помощью оператора присваивания "::=". Эти имена в дальнейшем могут использоваться для определения других типов и значений.
Определены следующие простые типы:
INTEGER – любое целое число;
BIT STRING – произвольная строка бит;
OCTET STRING – произвольная последовательность октетов;
NULL – 0;
OBJECT IDENTIFIER – последовательность компонентов, однозначно идентифицирующих объект;
PrintableString – последовательность печатных символов;
IA5String – произвольная строка символов IA5 (ASCII);
UTCTime – универсальное время (по Гринвичу; GMT).
Для строчных типов может быть введено ограничение на максимальный размер.
В ASN.1 определено четыре структурных типа:
SEQUENCE – упорядоченный набор из одного или более типов, некоторые из которых могут быть объявлены как необязательные.
SEQUENCE OF – упорядоченный набор из нуля или более значений данного типа.
SET – неупорядоченный набор из одного или более типов, некоторые из которых могут быть объявлены как необязательные.
SET OF – неупорядоченный набор из нуля или более значений данного типа.
Структурные типы могут иметь необязательные компоненты, в том числе со значениями по умолчанию.
Типы могут быть помечены явно или неявно. Неявно помеченные типы получаются из других типов путем изменения метки. Для неявной пометки используется ключевое слово IMPLICIT. Явно помеченные типы получаются из других типов путем добавления внешней метки.Для явной пометки используется ключевое слово EXPLICIT. Помеченный явно тип – это структурный тип, состоящий из одного существующего типа и тега. Пометка (тегирование) весьма удобна, чтобы различать типы в пределах одного приложения.
Тегированный тип является новым типом, который изоморфен старому, но имеет отличный от него тег.
TaggedType ::= Tag Type | Tag IMPLICIT Type | Tag EXPLICIT Type Tag ::= [ Class ClassNumber ] ClassNumber ::= Number | DefinedValue Class ::= UNIVERSAL | APPLICATION | PRIVATE | empty
DefinedValue должно быть типом целого и иметь неотрицательное значение.

Содержание раздела