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

Стандарт ASN.1

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

История

Разработка ASN.1 началась в 1970-х годах в рамках работ по созданию эталонной модели взаимодействия открытых систем (OSI). Целью было создание универсального языка, который позволил бы описывать данные, передаваемые между разнородными компьютерными системами, без привязки к их внутреннему представлению. Первая версия стандарта была опубликована в 1984 году как часть рекомендаций ITU-T серии X.200 (X.208) и ISO 8824.

В 1990-х годах, с развитием Интернета и криптографических протоколов, ASN.1 получил широкое распространение в инфраструктуре открытых ключей (PKI) и протоколах, таких как X.509 для цифровых сертификатов и LDAP для каталогов. В 2002 году была выпущена обновлённая версия стандарта, объединившая рекомендации ITU-T X.680 и ISO/IEC 8824-1, которая действует и поныне с периодическими поправками.

Основные принципы

ASN.1 разделяет описание структуры данных (абстрактный синтаксис) и способ их кодирования (конкретный синтаксис). Это позволяет разработчикам определять формат сообщений на высоком уровне, не заботясь о деталях упаковки байтов, а затем выбирать подходящий метод кодирования для конкретной среды передачи.

Типы данных

ASN.1 поддерживает широкий набор встроенных типов данных, которые делятся на простые и составные.

Простые типы:

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

Составные типы:

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

Определение и импорт

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

Методы кодирования

ASN.1 определяет несколько стандартных правил кодирования (encoding rules), которые преобразуют абстрактные структуры данных в последовательность байтов для передачи по сети или хранения.

DER (Distinguished Encoding Rules)

DER — это подмножество правил BER, которое гарантирует однозначность кодирования. Для каждого значения существует только один способ его представления в DER. Это свойство критически важно для криптографических приложений, где требуется вычисление цифровых подписей по закодированным данным. DER широко используется в сертификатах X.509 и форматах PKCS.

CER (Canonical Encoding Rules)

CER — ещё одно подмножество BER, также обеспечивающее однозначность, но с другим подходом к кодированию длинных строк. CER используется реже, чем DER.

PER (Packed Encoding Rules)

PER предназначены для минимизации размера закодированных данных. Они используют битовую упаковку и компактное представление, что особенно важно в системах с ограниченной пропускной способностью каналов связи (например, в спутниковой или мобильной связи). PER может быть выравнивающим (aligned) или невыравнивающим (unaligned) по границам байтов.

XER (XML Encoding Rules)

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

OER (Octet Encoding Rules)

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

Применение

ASN.1 является фундаментом для многих критически важных протоколов и стандартов.

Криптография и инфраструктура открытых ключей

  • Сертификаты X.509: Структура цифровых сертификатов, используемых в TLS/SSL, S/MIME, электронной подписи и других системах, полностью определена с помощью ASN.1.
  • PKCS (Public-Key Cryptography Standards): Ряд стандартов RSA Laboratories, включая PKCS#1 (RSA), PKCS#7 (CMS), PKCS#10 (запрос на сертификат) и PKCS#12 (формат обмена личными ключами), базируются на ASN.1.
  • CMS (Cryptographic Message Syntax): Протокол для защищённой передачи сообщений, используемый в S/MIME и других приложениях.
  • LDAP (Lightweight Directory Access Protocol): Протокол доступа к каталогам, где структуры запросов и ответов кодируются с использованием ASN.1.

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

  • SNMP (Simple Network Management Protocol): Протокол управления сетью, использующий ASN.1 для определения управляющих переменных (MIB) и кодирования сообщений (BER).
  • GSM и 3GPP: В стандартах сотовой связи ASN.1 применяется для описания сообщений сигнализации и управления.
  • ISDN и SS7: Протоколы сигнализации в телефонных сетях.

Протоколы прикладного уровня

  • Kerberos: Протокол аутентификации, где структуры билетов и сообщений кодируются с помощью ASN.1.
  • ACSE (Association Control Service Element): Элемент службы управления ассоциацией в OSI.

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

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

  • asn1c (свободный, для C/C++).
  • ASN.1C (коммерческий, Objective Systems).
  • OSS ASN.1 Tools (коммерческий, OSS Nokalva).
  • pyasn1 (библиотека для Python).
  • JAC (Java ASN.1 Compiler).

Критика

Несмотря на широкое распространение, ASN.1 подвергается критике за сложность и избыточность. Основные замечания:

  • Громоздкость: Описания на ASN.1 могут быть трудны для чтения и понимания по сравнению с более современными языками описания данных, такими как JSON Schema или Protocol Buffers.
  • Сложность кодирования: Правила кодирования, особенно BER и DER, требуют значительных вычислительных ресурсов при кодировании и декодировании.
  • Отсутствие поддержки в веб-среде: ASN.1 не является родным для веб-технологий, что привело к появлению альтернатив, таких как JSON и XML, которые проще в использовании в веб-API.

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

Источники

  1. ITU-T Recommendation X.680 (07/2002) — Information technology — Abstract Syntax Notation One (ASN.1): Specification of basic notation.
  2. ISO/IEC 8824-1:2002 — Information technology — Abstract Syntax Notation One (ASN.1): Specification of basic notation.
  3. ITU-T Recommendation X.690 (07/2002) — Information technology — ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER).
  4. ISO/IEC 8825-1:2002 — Information technology — ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER).
  5. ITU-T Recommendation X.691 (07/2002) — Information technology — ASN.1 encoding rules: Specification of Packed Encoding Rules (PER).
  6. ISO/IEC 8825-2:2002 — Information technology — ASN.1 encoding rules: Specification of Packed Encoding Rules (PER).
  7. ITU-T Recommendation X.693 (12/2001) — Information technology — ASN.1 encoding rules: XML Encoding Rules (XER).
  8. ISO/IEC 8825-4:2002 — Information technology — ASN.1 encoding rules: XML Encoding Rules (XER).
  9. ITU-T Recommendation X.696 (08/2015) — Information technology — ASN.1 encoding rules: Specification of Octet Encoding Rules (OER).
  10. RFC 5280 — Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile.

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

На главную BFOmetr →