Что такое кодировка der

DER-шифрованный файл X.509

Что такое кодировка der. Смотреть фото Что такое кодировка der. Смотреть картинку Что такое кодировка der. Картинка про Что такое кодировка der. Фото Что такое кодировка der Что такое кодировка der. Смотреть фото Что такое кодировка der. Смотреть картинку Что такое кодировка der. Картинка про Что такое кодировка der. Фото Что такое кодировка der Что такое кодировка der. Смотреть фото Что такое кодировка der. Смотреть картинку Что такое кодировка der. Картинка про Что такое кодировка der. Фото Что такое кодировка der Что такое кодировка der. Смотреть фото Что такое кодировка der. Смотреть картинку Что такое кодировка der. Картинка про Что такое кодировка der. Фото Что такое кодировка der

Что такое кодировка der. Смотреть фото Что такое кодировка der. Смотреть картинку Что такое кодировка der. Картинка про Что такое кодировка der. Фото Что такое кодировка der

Что такое кодировка der. Смотреть фото Что такое кодировка der. Смотреть картинку Что такое кодировка der. Картинка про Что такое кодировка der. Фото Что такое кодировка der

DER (Distinguished Encoding Rules) для ASN.1, как определено в рекомендации ITU-T Recommendation X.509, — более ограниченный стандарт кодирования, чем альтернативный BER (Basic Encoding Rules) для ASN.1, определенный в рекомендации ITU-T Recommendation X.209, на котором основан DER. И BER, и DER обеспечивают независимый от платформы метод кодирования объектов, таких как сертификаты и сообщения, для трансмиссии между устройствами и приложениями.

При кодировании сертификата большинство приложений используют стандарт DER, т. к. сертификат (сведения о запросе сертификата) должен быть закодирован с помощью DER и подписан.

Base64-шифрованный формат X.509

Этот метод кодирования создан для работы с протоколом S/MIME, который популярен при передаче двоичных файлов через Интернет. Base64 кодирует файлы в текстовый формат ASCII, при этом файлы повреждаются каждый раз при прохождении через шлюз, в то время как S/MIME обладает некоторыми криптографическими службами безопасности для элекронных приложений сообщений, включая целостность происходения и использование цифровых подписей, секретность и безопаспость данных при помощи кодирования, процесса проверки подлинности и невозможности отрицания авторства сообщений.

MIME (Multipurpose Internet Mail Extensions) спецификации (RFC 1341 and successors) определяет механизмы кодирования произвольных двоичных данных для передачи по электронной почте.

Источник

Стандарт X.690: BER, CER и DER

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

Правила кодирования, описанные в X.690 применяют в различных протоколах передачи данных и в криптографических протоколах, как-то: SMNP и LDAP, PKCS#7 (для кодирования сообщений), X.509 (для хранения сертификатов). В частности, в стандарте CMS (RFC #5652) говорится, что сообщение должно передаваться закодированным по правилам DER (описаны в X.690). Однако единой кроссплатформенной реализации правил кодирования на каждом из языков программирования, описанных в стандарте X.690, нет. Поэтому разработчикам ПО часто приходится реализовывать библиотеки для кодирования данных в соответствии с X.690. И тут возникает следующая проблема: очень сложно найти хорошее и понятное описание стандарта и правил кодирования на русском языке.

Собственно, задача этой статьи — дать именно такое описание.

Стандарт X.690 описывает следующие правила кодирования структур данных, созданных в соответствии с ASN.1: BER (Basic Encoding Rules), CER (Canonical Encoding Rules), DER (Distinguished Encoding Rules). Разберемся с этими правилами подробнее.

Basic Encoding Rules

Базовые правила кодирования или BER — правила для представления структуры, описанной с помощью ASN.1, в виде последовательности байт (или «октетов»). Такую последовательность удобнее передавать по линиям связи или сохранять в файл, чем делать те же операции с самими структурами.

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

Рассмотрим подробнее эти части:

Формат идентификатора строго фиксирован:

Биты 8 и 7 определяют класс данных (Universal (т.е. определенный в ASN.1), Application (Используемый в каком-то конкретном приложении), Context-specific (т.е. зависящий от контекста)* или Private (т.е. определенный в какой-то спецификации ASN.1));

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

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

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

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

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

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

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

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

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

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

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

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

Кодирование различных типов данных детально и доступно описано в стандарте X.690 и затруднений при использовании вызывать не должно. Куда больший интерес вызывают особенности при кодировании различных типов данных.

В зависимости от структуры и преследуемых при кодировании целей, кодирование одних и тех же данных может существенно различаться. Так, кодирование значения TRUE типа BOOLEAN может иметь как вид: 01 01 01, так и вид: 01 01 0F;

Результат кодирования типа SET может быть различным в зависимости от того, в каком порядке мы кодируем «вложенные» типы данных: если set ::= SET < int, float>; int ::= INTEGER; float ::= REAL, то для set <-128, 0.15625>результат кодирования может быть таким: 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.

Другие правила кодирования стандарта X.690:

Как видно из предыдущих примеров, результат кодирования по правилам BER может существенно различаться. Для того, чтобы результаты кодирования одних и тех же типов данных в разных системах были одинаковыми, были разработаны правила кодирования 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) для типа SET кодирование вложенных типов должно происходить в порядке следования их тегов (согласно ASN.1).

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

В чем же преимущество различных правил кодирования?

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

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

Автор: Красавин А. А.

Дата публикации: 01.01.2013

Библиографическая ссылка: Красавин А. А. Стандарт X.690: BER, CER и DER // Комплексная защита информации. Электроника инфо. Материалы XVIII Международной конференции 21–24 мая 2013 года, Брест (Республика Беларусь). 2013. С. 132–133.

Источник

Что такое кодировка der

Формат для базовых правил кодирования определяет самоописывающий и саморазграничивающий формат для кодирования структур данных ASN.1. Каждый элемент данных кодируется как идентификатор типа, описание длины, фактические элементы данных и, при необходимости, маркер конца содержимого. Эти типы кодирования обычно называются кодированием типа длина-значение или TLV-кодированием. Этот формат позволяет получателю декодировать информацию ASN.1 из неполного потока, не требуя каких-либо предварительных знаний о размере, содержании или семантическом значении данных. [1]

Структура кодирования

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

Октеты идентификатора
Тип
Длина октеты
Длина
Содержание октетов
Значение
Октеты конца содержимого

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

Октеты идентификатора

Данные (особенно элементы последовательностей, наборов и вариантов выбора) могут быть помечены уникальным номером тега (показанным в ASN.1 в квадратных скобках []), чтобы отличать эти данные от других элементов. Такие теги могут быть неявными (где они кодируются как тег TLV значения вместо использования базового типа в качестве тега TLV) или явными (когда тег используется в построенном TLV, который охватывает TLV базового типа). Стиль тегов по умолчанию является явным, если неявный не установлен на уровне модуля ASN.1. Такие теги имеют класс по умолчанию, зависящий от контекста, но его можно переопределить, используя имя класса перед тегом.

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

Следующие теги являются родными для ASN.1:

Виды, универсальный класс

ИмяРазрешенное строительствоНомер тега
ДесятичныйШестнадцатеричный
Конец содержания (EOC)Примитивный00
BOOLEANПримитивный11
ЦЕЛОЕПримитивный22
BIT STRINGОба33
ОКТЕТНАЯ СТРОКАОба44
НОЛЬПримитивный55
ИДЕНТИФИКАТОР ОБЪЕКТАПримитивный66
Дескриптор объектаОба77
ВНЕШНИЙПостроено88
НАСТОЯЩИЙ (плавающий)Примитивный99
ПЕРЕЧИСЛЕННЫЕПримитивный10А
ВСТРОЕННЫЙ PDVПостроено11B
UTF8StringОба12C
ОТНОСИТЕЛЬНЫЙ-OIDПримитивный13D
ВРЕМЯПримитивный14E
Зарезервированный15F
ПОСЛЕДОВАТЕЛЬНОСТЬ И ПОСЛЕДОВАТЕЛЬНОСТЬПостроено1610
НАБОР и НАБОРПостроено1711
NumericStringОба1812
PrintableStringОба1913
T61StringОба2014
VideotexStringОба21 год15
IA5StringОба2216
UTCTimeОба2317
GeneralizedTimeОба2418
GraphicStringОба2519
VisibleStringОба26 год
GeneralStringОба271B
UniversalStringОба28 год
СТРОКА ХАРАКТЕРАПостроено291D
BMPStringОба301E
ДАТАПримитивный31 год1F
ВРЕМЯ ДНЯПримитивный3220
ДАТА-ВРЕМЯПримитивный3321 год
ПРОДОЛЖИТЕЛЬНОСТЬПримитивный3422
OID-IRIПримитивный35 год23
ОТНОСИТЕЛЬНЫЙ-OID-IRIПримитивный3624

Список назначений тегов универсального класса можно найти в Рек. МСЭ-T X.680, пункт 8, таблица 1. [2]

Кодирование

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

Октет 1Октет 2 и далее
8765432187654321
Класс тегаПКНомер тега (0–30)N / A
31 годБолееНомер тега

В начальном октете бит 6 кодирует, является ли тип примитивным или составным, биты 7–8 кодируют класс типа, а биты 1–5 кодируют номер тега. Возможны следующие значения:

КлассЗначениеОписание
Универсальный0Тип является родным для ASN.1
Заявление1Тип действителен только для одного конкретного приложения.
Зависит от контекста2Значение этого типа зависит от контекста (например, в последовательности, наборе или выборе)
Частный3Определяется в частных спецификациях
ПКЗначениеОписание
Примитивный (P)0Октеты содержимого непосредственно кодируют значение элемента.
Построен (C)1Октеты содержимого содержат 0, 1 или более кодировок элементов.

Длинная форма

Если номер тега слишком велик для 5-битного поля тега, его необходимо закодировать в следующих октетах.

Начальный октет кодирует класс и примитив / построенный, как и раньше, а биты 1–5 равны 1. Номер тега кодируется в следующих октетах, где бит 8 каждого равен 1, если октетов больше, а биты 1–7 кодируют номер тега. Комбинированные биты номера тега с прямым порядком байтов кодируют номер тега. Должно быть закодировано наименьшее количество следующих октетов; то есть биты 1–7 не должны быть 0 в первом последующем октете.

Октеты длины

Есть две формы октетов длины: определенная форма и неопределенная форма.

Первый октет длины

ФормаБиты
87654321
Определенный, короткий0Длина (0–127)
Неопределенный10
Определенный, длинный1Количество следующих октетов (1–126)
Зарезервированный1127

Определенная форма

Он кодирует количество октетов содержимого и всегда используется, если тип является примитивным или сконструированным и данные доступны немедленно. Есть краткая форма и полная форма, которые могут кодировать различные диапазоны длин. Числовые данные кодируются как целые числа без знака, причем младший бит всегда идет первым (справа).

Пример длинной формы, длина 435

Октет 1Октет 2Октет 3
100000100000000110110011
Длинная форма2 октета длины435 октетов содержимого

Неопределенная форма

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

Он состоит из одного октета, в котором бит 8 равен 1, а биты 1–7 равны 0. Затем 2 октета конца содержимого должны завершать октеты содержимого.

Октеты содержания

Октеты содержимого кодируют значение данных элемента. [1]

Обратите внимание, что октетов содержимого может не быть (следовательно, длина элемента равна 0), если необходимо отметить только существование объекта ASN.1 или его пустоту. Например, это случай значения NULL ASN.1.

Наиболее существенными ограничениями кодирования DER являются:

Ключевое различие между форматом BER и форматами CER или DER заключается в гибкости, обеспечиваемой базовыми правилами кодирования. BER, как объяснено выше, является базовым набором правил кодирования, заданным ITU-T X.690 для передачи структур данных ASN.1. Это дает отправителям четкие правила кодирования структур данных, которые они хотят отправить, но также оставляет отправителям некоторые варианты кодирования. Как указано в стандарте X.690, «Альтернативные кодировки разрешены основными правилами кодирования в качестве опции отправителя. Получатели, заявляющие о соответствии основным правилам кодирования, должны поддерживать все альтернативы». [1]

Получатель должен быть готов принять все законные кодировки, чтобы законно заявить о соответствии BER. Напротив, и CER, и DER ограничивают доступные спецификации длины одним параметром. Таким образом, CER и DER являются ограниченными формами BER и служат для устранения неоднозначности стандарта BER.

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

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

Критика кодирования BER

Несмотря на кажущиеся проблемы, BER является популярным форматом для передачи данных, особенно в системах с различными собственными кодировками данных.

Эта статья основана на материалах, взятых из Free On-line Dictionary of Computing до 1 ноября 2008 г. и включенных в соответствии с условиями «перелицензирования» GFDL версии 1.3 или новее.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *