Открыть сервис

ASN.1

ASN.1 (Abstract Syntax Notation One) — это формальный язык описания структур данных и правил их кодирования для передачи по каналам связи или хранения в компьютерных системах. Разработан Международной организацией по стандартизации (ISO) и Международной электротехнической комиссией (IEC) совместно с Международным союзом электросвязи (ITU-T). ASN.1 является стандартом, широко применяемым в телекоммуникациях, криптографии, сетевых протоколах и системах управления.

История

Разработка ASN.1 началась в конце 1970-х годов в рамках работ по созданию эталонной модели взаимодействия открытых систем (OSI). Первая версия стандарта была опубликована в 1984 году как часть рекомендаций ITU-T серии X.200 (X.208 и X.209). Впоследствии стандарт неоднократно пересматривался и дополнялся: в 1988, 1994, 1997, 2002 и 2015 годах. Современная версия определена в рекомендациях ITU-T X.680–X.695 и международных стандартах ISO/IEC 8824–8825.

Изначально ASN.1 предназначался для описания данных, передаваемых в протоколах OSI, таких как X.400 (электронная почта) и X.500 (каталоги). Однако с распространением Интернета он нашёл применение в протоколах, не связанных с OSI, в первую очередь в SNMP (Simple Network Management Protocol) и криптографических стандартах (PKIX, CMS).

Основные понятия

Типы данных

ASN.1 определяет два класса типов: простые (примитивные) и составные (конструктивные). К простым относятся:

  • BOOLEAN — логическое значение (TRUE / FALSE).
  • INTEGER — целое число произвольной точности.
  • BIT STRING — последовательность битов.
  • OCTET STRING — последовательность байтов.
  • NULL — отсутствие значения.
  • OBJECT IDENTIFIERуникальный идентификатор объекта (OID).
  • REAL — число с плавающей точкой.
  • ENUMERATED — перечисление именованных целочисленных значений.
  • UTF8String, PrintableString, IA5String и другие строковые типы.

Составные типы позволяют объединять простые в структуры:

  • SEQUENCE — упорядоченная последовательность элементов разных типов (аналог структуры в C или записи в Паскале).
  • SET — неупорядоченное множество элементов разных типов.
  • SEQUENCE OF — упорядоченный список элементов одного типа.
  • SET OF — неупорядоченное множество элементов одного типа.
  • CHOICE — выбор одного из нескольких альтернативных типов.
  • ANY — произвольный тип (устаревшая конструкция, заменена на информационные объекты).

Модули и импорт

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

``asn1 MyModule DEFINITIONS ::= BEGIN IMPORTS IntegerType FROM AnotherModule; MyType ::= SEQUENCE { id INTEGER, name UTF8String } END ``

Информационные объекты и классы

В версиях ASN.1 после 1994 года появились информационные объекты (Information Objects) и классы (Classes). Это механизм параметризации, позволяющий описывать шаблоны типов. Например, класс OPERATION может описывать общую структуру для всех операций протокола, а конкретные операции (например, login, logout) — как экземпляры этого класса.

Правила кодирования

ASN.1 отделяет описание структуры данных от способа её представления в виде последовательности байтов. Для этого используются правила кодирования (Encoding Rules). Наиболее распространённые:

BER (Basic Encoding Rules)

Базовые правила, определённые в стандарте X.690. Каждое значение кодируется по схеме TLV (Tag — Length — Value):

  • Tag — идентификатор типа (1–2 байта).
  • Length — длина значения в байтах (1 или более байтов).
  • Value — собственно данные.

BER допускает несколько вариантов кодирования длины (длинная и короткая форма) и поддерживает неограниченную длину (indefinite length). Это делает BER гибким, но неэффективным по размеру и скорости разбора.

DER (Distinguished Encoding Rules)

Подмножество BER, в котором каждое значение кодируется единственным образом. DER требует:

  • Использования только короткой формы длины, если длина меньше 128 байт.
  • Обязательной явной длины (indefinite length запрещена).
  • Строгого порядка элементов в SET и SET OF (по возрастанию тегов).

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

CER (Canonical Encoding Rules)

Также подмножество BER, но допускает indefinite length для строковых типов. Используется реже, чем DER.

PER (Packed Encoding Rules)

Ориентирован на минимизацию размера кодированных данных. PER использует информацию о диапазонах и ограничениях типов, заданных в описании ASN.1, чтобы упаковывать значения в минимальное количество битов. Различают aligned (выравнивание на границы байтов) и unaligned (без выравнивания) варианты. PER применяется в протоколах с ограниченной пропускной способностью, например в UMTS (3G) и LTE.

XER (XML Encoding Rules)

Кодирует данные ASN.1 в XML-формат. Позволяет легко интегрировать ASN.1 с XML-технологиями. Существует также CXER (Canonical XER) — каноническая версия для подписей.

OER (Octet Encoding Rules) и JER (JSON Encoding Rules)

Более новые правила: OER ориентирован на простоту и скорость разбора (каждый элемент выравнивается на границу октета), JER — на представление в JSON.

Применение

ASN.1 используется в широком спектре технологий и протоколов:

Телекоммуникации

  • SNMP (Simple Network Management Protocol) — протокол управления сетями. Все переменные и сообщения SNMP описываются с помощью ASN.1 и кодируются BER.
  • LDAP (Lightweight Directory Access Protocol) — протокол доступа к каталогам.
  • H.323 — протокол видеоконференцсвязи.
  • GSM, UMTS, LTE — описания сообщений сигнализации в сотовых сетях. Используется PER для экономии полосы.

Криптография и безопасность

  • X.509 — стандарт для инфраструктуры открытых ключей (PKI). Сертификаты, списки отзыва (CRL) и запросы на сертификат (PKCS#10) описываются на ASN.1 и кодируются DER.
  • CMS (Cryptographic Message Syntax) — формат криптографических сообщений (подписанные и зашифрованные данные).
  • PKCS#7, PKCS#12 — стандарты для обмена криптографическими данными и хранения ключей.
  • DSA, ECDSA, RSA — параметры и ключи этих алгоритмов часто представляются в виде структур ASN.1.

Сетевая инфраструктура

Автомобильная промышленность

  • AUTOSAR — стандарт для разработки электронных систем автомобилей. Использует ASN.1 для описания данных, передаваемых по CAN, FlexRay, Ethernet.

Авионика

  • ARINC 665 — стандарт обмена данными в авиационных системах.

Инструменты и реализация

Для работы с ASN.1 существуют компиляторы, которые преобразуют описания на ASN.1 в код на языках программирования (C, C++, Java, Python, Go и др.). Примеры:

  • asn1c (Lev Walkin) — компилятор для C, поддерживающий BER/DER/PER/XER.
  • ASN.1 Compiler (Objective Systems) — коммерческий продукт для C/C++/Java/C#.
  • pyasn1 — библиотека для Python.
  • Bouncy Castle — криптографическая библиотека для Java/C#, включает парсер ASN.1.
  • OpenSSL — содержит функции для работы с DER-кодированными сертификатами и ключами.

Критика и ограничения

  • Сложность — ASN.1 имеет крутой порог входа из-за большого числа типов, правил кодирования и механизмов (информационные объекты, макросы).
  • Избыточность BER/DER — для простых данных размер кодированного представления может значительно превышать полезные данные (например, INTEGER 0 кодируется как 0x02 0x01 0x00 — 3 байта).
  • Отсутствие прямой поддержки в языках — в отличие от JSON или XML, ASN.1 не является «родным» для большинства языков программирования, что требует использования компиляторов.
  • Конкуренция с более простыми форматами — для многих задач (веб-API, конфигурация) протокольные буферы (Protobuf), JSON или CBOR оказываются проще и удобнее.

Источники

  • ITU-T Recommendation X.680 (2015) — Information technology — Abstract Syntax Notation One (ASN.1): Specification of basic notation.
  • ITU-T Recommendation X.690 (2015) — ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER).
  • ISO/IEC 8824-1:2015 — Information technology — Abstract Syntax Notation One (ASN.1): Specification of basic notation.
  • Dubuisson, O. (2000). ASN.1 — Communication Between Heterogeneous Systems. Morgan Kaufmann.
  • Larmouth, J. (1999). ASN.1 Complete. Open Systems Solutions.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →