X.690

X.690

X.690 – один из стандартов ASN.1, разработанных совместно организациями ISO, IEC и ITU-T для удобства представления данных при их передаче в телекоммуникационных сетях. Правила кодирования, описанные в X.690, служат для представления структур данных, описанных по правилам ASN.1, в виде последовательностей байт. Такие последовательности удобнее передавать по линиям связи или сохранять в файлы, чем делать те же операции с самими структурами[1].

Стандарт X.690 описывает следующие правила кодирования структур данных, созданных в соответствии с ASN.1:

  • BER (Basic Encoding Rules);
  • CER (Canonical Encoding Rules);
  • DER (Distinguished Encoding Rules);

Содержание

История

В 1984 году организация ITU-T создала серию стандартов X.400, в числе которых был и стандарт X.409, который, ввиду активного использования, в 1988 году ITU-T совместно с ISO и IEC выделили в два отдельных стандарта: X.208, описывающий ASN.1, и X.209, в котором описывались правила BER. В 1994 году ASN.1 был переработан и серия стандартов X.208 перешла в серию X.680, а стандарту X.209 на смену пришел стандарт X.690[2].

Basic Encoding Rules

Базовые правила кодирования или BER – набор правил, объясняющий как представить любую структуру данных, описанную согласно ASN.1, в виде последовательности восьмибитных октетов[3].

Для того, чтобы различные типы данных можно было описывать схожим образом, в X.690 была определена общая структура блока закодированной информации, состоящая из следующих 3 частей:

  • Идентификатор – один или несколько октетов, в которых содержится информация о типе закодированных данных;
  • Часть, содержащая информацию о длине блока – один или несколько октетов, в которых содержится информация о длине закодированных данных;
  • Часть, содержащая закодированную информацию.

Идентификатор

Формат идентификатора строго фиксирован[4].

8 7 6 5 4 3 2 1
Класс Тип Тэг

Биты 8 и 7 определяют тип данных

Класс бит 8 бит 7 Описание класса
Универсальный 0 0 типы, которые определены только в X.690 и имеют одинаковый смысл во всех приложениях
Прикладной 0 1 типы, смысл которых меняется в зависимости от приложения [примечание 1]
Контекстно-зависимый 1 0 типы, смысл которых зависит от данного составного типа[примечание 2]
Частный 1 1 типы, смысл которых зависит от конкретной организации

Бит 6 определяет, являются ли данные простыми (как-то INTEGER), или могут содержать в себе другие различные наборы данных (как-то SET). При этом при кодировании в первом случае говорят о примитивном кодировании, а во втором - о конструктивном;

Тип данных бит 6
Простой 0
Составной 1

Биты 5 - 1 определяют тэг данных.

Теги, описанные в ASN.1
Тип данных Тэг (десятичный) Тэг (шестнадцатеричный)
EOC (End-of-Content) 0 0
BOOLEAN 1 1
INTEGER 2 2
BIT STRING 3 3
OCTET STRING 4 4
NULL 5 5
OBJECT IDENTIFIER 6 6
Object Descriptor 7 7
EXTERNAL 8 8
REAL 9 9
ENUMERATED 10 A
EMBEDDED PDV 11 B
UTF8String 12 C
RELATIVE-OID 13 D
(reserved) 14 E
(reserved) 15 F
SEQUENCE и SEQUENCE OF 16 10
SET и SET OF 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 1A
GeneralString 27 1B
UniversalString 28 1C
CHARACTER STRING 29 1D
BMPString 30 1E
(длинная форма) 31 1F

В случае если класс данных не определен в ASN.1, то тэг может быть больше 30. В таком случае используют несколько октетов для представления идентификатора. При этом биты 5-1 первого октета имеют значение 111112, а следующие октеты, кодируются следующим образом:

  • Бит 8 во всех октетах, кроме последнего равен 1; в последнем октете бит 8 равен 0;
  • Биты с 1 по 7 этих октетов содержат биты тэга в его двоичном представлении.

Октеты длины закодированных данных

В случае, если длина блока закодированных данных заранее известна, октеты длины кодируются следующим образом:

Если эта длина не превышает 31 байта, то она просто записывается в соответствующий октет длины. Такая форма представления октетов длины называется примитивной (primitive).

Пример:  длина блока данных L:
         L = 34 будет закодирована в виде 0010 0010

Если длина блока закодированных данных больше 31 байта, то:

  • в биты второго и последующих октетов записывается значение длины блока закодированной информации в ее (длины) двоичном представлении
  • в первый октет записывается количество дополнительных блоков длины, считая со второго (не более 30); бит 8 первого октета устанавливается в 1.

Такая форма представления октетов длины называется длинной (long)

Пример:  длина блока данных L:
         L = 2614 (0000 1010 0011 0110 в двоичном формате)
         будет закодирована в виде:
         82 14 34 (10000010 00010100 00110110 в двоичном формате)

Если же длина блока закодированных данных на момент кодирования длины неизвестна, то в октет длины записывается значение 0х80, что указывает на кодирование с неопределенной длиной. В этом случае в конце блока закодированных данных должны стоять октеты 00 00, явно указывающие на его завершение.

Кодирование структур различных типов

Кодирование различных типов данных детально описано в тексте стандарта (англ.).

Неоднозначность кодирования

В зависимости от структуры и преследуемых при кодировании целей, кодирование одних и тех же данных может существенно различаться[5][6].

Так, BER-кодирование значения TRUE типа BOOLEAN может иметь как вид:

01 01 01 

так и вид:

01 01 0F

Результат кодирования типа SET может быть различным в зависимости от того, в каком порядке мы кодируем "вложенные" типы данных:

если

set ::= SET { int, float}
int ::= INTEGER
float ::= REAL

то для

set{-128, 0.15625}

результат кодирования по правилам BER может быть таким:

31 08 02 01 80 09 03 80 FB 05;

и таким:

31 08 09 03 80 FB 05 02 01 80.

В зависимости от того, примитивное или конструктивное кодирование используется, его результат может также различаться. Так для значения " Test User 1" типа STRING при примитивном кодировании результат будет иметь вид:

13 0B 54 65 73 74 20 55 73 65 72 20 31

при конструктивном:

33 0F 13 05 54 65 73 74 20 13 06 55 73 65 72 20 31

DER и CER

Для однозначного кодирования данных используются правила кодирования DER и CER.

Distinguished Encoding Rules

Особые правила кодирования или DER совпадают с BER с учетом выполнения следующих ограничений:

  1. Для кодирования данных с известной длиной количество октетов длины должно быть наименьшим;
  2. Кодирование простых типов данных (в том числе STRING, OCTET STRING и BIT ARRAY) всегда примитивное;
  3. Для типа SET кодирование вложенных типов должно происходить в порядке следования их тегов (согласно ASN.1).

Canonical Encoding Rules

Канонические правила кодирования или CER совпадают с BER с учетом выполнения следующих ограничений:

  1. Для составных типов данных должно применяться кодирование с неизвестной длиной;
  2. Для примитивного кодирования количество октетов длины должно быть наименьшим;
  3. Для типа SET кодирование вложенных типов должно происходить в порядке следования их тегов (согласно ASN.1).

Сравнение BER, DER и CER

BER предлагает пользователю различные пути для кодирования одних и тех же данных, причем предполагается, что система, которая поддерживает стандарты ASN.1, может корректно их декодировать вне зависимости от представления, в то время как DER и CER поддерживают только конкретный вариант кодирования для каждого типа[6]. Это отличие проявляется в быстродействии кодирования данных: согласно исследованиям, если при кодировании используется строго определенный формат данных, то системе требуется для этого намного меньше операций. Проще говоря, DER и CER обеспечивают много большее быстродействие, чем BER[7].

Основное же отличие DER от CER заключается в том, что в DER используется кодирование данных с известной длиной, а в CER в некоторых случаях (например, при кодировании данных типа STRING длиной более 1000 символов) используется кодирование с неизвестной заранее длиной. Это отличие выражается в количестве блоков, необходимых для кодирования длины зашифрованных данных. Так, для определения длины блока закодированных данных при кодировании с неизвестной длиной требуется всего 3 октета, в то время как для больших сообщений при DER кодировании их количество может достигать 32 октетов. То есть целесообразно использовать DER при кодировании небольших по размеру данных, а CER - для больших[8].

Сравнение X.690 и X.209

Общее

Переход от стандартов X.208 и X.209 к X.680 - X.683 и X.690 был обусловлен необходимостью исправления ошибок, выявленных в процессе использования протоколов, работающих с ASN.1[9]. В связи с этим, при переходе от одних стандартов к другим была обеспечена их полная совместимость. В частности, при получении одним пользователем от другого структуры, закодированной по правилам BER, зачастую невозможно с определенностью сказать, какой из стандартов тот использовал при кодировании[10].

Отличия

  • Для новых типов данных (как-то RELATIVE-OID) добавлены правила кодирования;
  • Для типов данных, правила описания которых изменились, изменились и правила кодирования (но результат кодирования одной и той же структуры данных одинаков как при использовании X.209, так и при использовании X.690)[10].

Применение

BER, DER и CER активно применяют в различных протоколах передачи данных и в криптографических протоколах, как-то:

  • SMNP и LDAP[11];
  • PKCS#7 (для кодирования сообщений)[12];
  • X.509 (для хранения сертификатов)[13];
  • EMV (для кодирования данных хранимых на карте).

Другие стандарты кодирования

Несмотря на простоту в кодировании данных[14], многие считают BER, DER и CER неэффективными по сравнению с другими правилами кодирования, так как, во-первых, размер результата кодирования данных при помощи BER зачастую получается больше, чем при использовании его альтернатив, а во-вторых, само кодирование занимает несколько больше времени[7].

Такими схемами кодирования данных, разработанными для улучшения BER[6], являются Packed Encoding Rules (PER), XML Encoding Rules (XER) и ASN.1 SOAP, описанные соответственно в ITU-T X.691, X.693 и в X.892.

См. также

ASN.1

Примечания

  1. Например, для служб каталогов X.500 типы в двух разных приложениях могут иметь одинаковые тэги, но разный смысл
  2. Такие тэги используются для того, чтобы провести различие между типами компонентов с одинаковыми базовыми тэгами в контексте данного составного типа

Литература

  1. Douglas Steedman, E4. Encoding Rules
  2. Introduction to ASN.1  (англ.). ASN.1 Project. ITU-T. Проверено 12 декабря 2012.
  3. Семенов Ю.А. 4.4.13.2 Нотация ASN.1.
  4. Юрий Строжевский, 2012, Глава 1
  5. Bernett et al, 2001, Appendix B
  6. 1 2 3 Douglas Steedman, E.1 What is ASN.1?
  7. 1 2 Lin Huai-An Estimation of the Optimal Performance of ASN.1/BER Transfer Syntax. — ACM Computer Communication Review, July 93, С. 45 - 58.
  8. ITU-T Rec. X.690, ISO/IEC 8825-1, Introduction
  9. Tony Bradley Microsoft ASN.1 Vulnerability - What's The Big Deal?  (англ.). About.com Guide (February 12, 2004). Проверено 11 декабря 2012.
  10. 1 2 Changing from ASN.1:1988/1990 to ASN.1:2008  (англ.). ASN.1 Project. ITU-T (February 12, 2004). Проверено 11 декабря 2012.
  11. Vijay Mukhi, Sonal Kotecha, Arsalan Zaidi, Vinesh Kurup Basic Encoding Rules  (англ.). Проверено 11 декабря 2012.
  12. B. Kaliski PKCS #7: Cryptographic Message Syntax - Version 1.5  (англ.) (March 1998). — General overview. Проверено 11 декабря 2012.
  13. Peter Gutmann X.509 Style Guide  (англ.) (October 2000). — Introduction. Проверено 11 декабря 2012.
  14. Douglas Steedman, E.4 Encoding Rules

Источники

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать курсовую

Полезное


Смотреть что такое "X.690" в других словарях:

  • (690) Вратиславия — Астероид (690) Вратиславия 12,9m рядом с галактикой NGC 6941 …   Википедия

  • (690) wratislavia — L astéroïde (690) Wratislavia a été ainsi baptisé (en latin) en référence à la ville polonaise de Wrocław. Il appartient à la Ceinture principale ; son périhélie est de 2,5595 UA et son aphélie de 3,7222 UA ; son diamètre est de 134,65… …   Wikipédia en Français

  • 690 Wratislavia — is a minor planet orbiting the Sun.External links* [http://cfa www.harvard.edu/iau/lists/NumberedMPs.txt Discovery Circumstances: Numbered Minor Planets] …   Wikipedia

  • (690) Wratislavia — Descubrimiento Descubridor J. H. Metcalf Fecha 16 de octubre de 1909 Nombre Provisional 1909 HZ …   Wikipedia Español

  • 690 AM — is a radio frequency. It may refer to:Current StationsIn Canada * CBDM in Beaver Creek, YT * CBKF 1 in Gravelbourg, SK * CBOI in Ear Falls, ON * CBES in Ignace, ON * CBQM in Fort McPherson, NT * CBU in Vancouver, BC * CFYK 2 in Fort Simpson, NT * …   Wikipedia

  • 690 — Années : 687 688 689  690  691 692 693 Décennies : 660 670 680  690  700 710 720 Siècles : VIe siècle  VIIe siècle …   Wikipédia en Français

  • 690 год — Годы 686 · 687 · 688 · 689 690 691 · 692 · 693 · 694 Десятилетия 670 е · 680 е 690 е 700 е · …   Википедия

  • 690 — Portal Geschichte | Portal Biografien | Aktuelle Ereignisse | Jahreskalender ◄ | 6. Jahrhundert | 7. Jahrhundert | 8. Jahrhundert | ► ◄ | 660er | 670er | 680er | 690er | 700er | 710er | 720er | ► ◄◄ | ◄ | 686 | 687 | 688 | …   Deutsch Wikipedia

  • 690 (nombre) — Nombres 600 à 699 Cet article recense les nombres qui ont des propriétés remarquables allant de 600 à 699. Sommaire 1 Entiers de 600 à 609 2 Entiers de 610 à 619 3 Entiers de 620 à 629 4 Enti …   Wikipédia en Français

  • -690 — Cette page concerne l année 690 du calendrier julien proleptique. Années : 693 692 691   690  689 688 687 Décennies : 720 710 700   690  680 670 660 Siècles : VIII …   Wikipédia en Français

  • 690-е — VII век: 690 699 годы 670 е · 680 е 690 е 700 е · 710 е 690 · 691 · 692 · 693 · 694 · 695 · 696 · 697 · 698 · …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»