Формат DER
DER (Distinguished Encoding Rules) — это бинарный формат кодирования данных, определённый стандартами ASN.1 (Abstract Syntax Notation One). Он предназначен для представления абстрактных типов данных (целые числа, строки, последовательности, объектные идентификаторы и др.) в виде последовательности байтов, пригодной для хранения или передачи по сети. DER является подмножеством более общего формата BER (Basic Encoding Rules) и отличается от него строгими правилами кодирования, что гарантирует единственный способ представления любого заданного значения.
История и стандартизация
Формат DER был разработан в рамках семейства стандартов ASN.1, которые создавались для обеспечения совместимости между различными системами связи, особенно в телекоммуникациях и компьютерных сетях. Первая версия ASN.1 была опубликована в 1984 году, а DER был введён как часть стандарта X.209 (позже — X.690) Международного союза электросвязи (ITU-T) и Международной организации по стандартизации (ISO).
Основной причиной создания DER стала необходимость в однозначном кодировании для криптографических приложений. В отличие от BER, который допускает несколько вариантов кодирования одного и того же значения (например, разную длину поля длины), DER требует единственного, канонического представления. Это критически важно для цифровых подписей, где любые изменения в байтовом представлении данных (даже незначительные) приводят к недействительности подписи.
Принципы кодирования
DER, как и BER, использует структуру TLV (Tag-Length-Value). Каждый элемент данных кодируется тремя последовательными полями:
- Tag (Тег) — идентификатор типа данных (например, INTEGER, OCTET STRING). Кодируется одним или несколькими байтами.
- Length (Длина) — количество байтов в поле Value. В DER длина всегда кодируется в минимально возможной форме.
- Value (Значение) — непосредственно данные, соответствующие типу.
Строгие правила DER
Отличия DER от BER сводятся к следующим ограничениям:
- Форма длины (Length form): BER допускает две формы длины: короткую (до 127 байт) и длинную (с указанием количества байтов, занимаемых длиной). DER требует использования короткой формы, если значение длины меньше 128 байт. Если длина равна или больше 128 байт, используется длинная форма, но количество байтов, отведённых под длину, должно быть минимально возможным.
- Примитивная или составная форма: Для типов, которые могут быть закодированы как в примитивной (непосредственно данные), так и в составной (вложенные TLV-конструкции) форме, DER предписывает использовать только примитивную форму, если это возможно. Например, строка OCTET STRING должна быть закодирована как единый блок, а не как последовательность фрагментов.
- Кодирование булевых значений: Значение TRUE должно кодироваться как один байт
0xFF, а FALSE — как0x00. BER допускает любые ненулевые байты для TRUE. - Кодирование целых чисел: Целое число кодируется в дополнительном коде, при этом старший байт не должен быть нулевым (если число положительное) или
0xFF(если число отрицательное), если только число не равно нулю. Это исключает избыточные ведущие байты. - Кодирование строк: Для строковых типов (например, PrintableString, UTF8String) DER требует явного указания кодировки, определённой стандартом.
Структура и типы данных
ASN.1 определяет множество типов, которые кодируются в DER. К основным относятся:
- Простые типы: INTEGER (целое), BOOLEAN (логическое), NULL (пустое значение), OBJECT IDENTIFIER (идентификатор объекта — последовательность целых чисел, например, 2.16.840.1.113733.1.7.23 для алгоритма RSA), OCTET STRING (последовательность байт), BIT STRING (последовательность бит).
- Структурные типы: SEQUENCE (упорядоченная последовательность элементов разных типов), SET (неупорядоченный набор элементов), CHOICE (выбор одного из нескольких типов).
- Строковые типы: VisibleString, UTF8String, NumericString, PrintableString, IA5String и др.
Каждый тип имеет свой уникальный тег. Например, тег BOOLEAN — 0x01, INTEGER — 0x02, BIT STRING — 0x03, OCTET STRING — 0x04, NULL — 0x05, OBJECT IDENTIFIER — 0x06, SEQUENCE — 0x10 (в контекстном кодировании — 0x30).
Пример кодирования
Рассмотрим кодирование целого числа 42 в DER:
- Tag: INTEGER имеет тег
0x02. - Length: Значение занимает 1 байт. Длина кодируется как
0x01. - Value: Число 42 в шестнадцатеричной системе —
0x2A.
Итоговая последовательность байтов: 02 01 2A.
Для последовательности SEQUENCE, содержащей два целых числа (42 и 13):
- Кодируем каждое число:
02 01 2Aи02 01 0D. - SEQUENCE имеет тег
0x30. Длина двух предыдущих полей — 6 байт. Длина кодируется как0x06. - Итоговая последовательность:
30 06 02 01 2A 02 01 0D.
Применение
Формат DER получил широкое распространение в областях, где требуется строгая однозначность и криптографическая безопасность.
Криптография и сертификаты
Наиболее известное применение DER — в инфраструктуре открытых ключей (PKI). Цифровые сертификаты X.509, используемые в протоколах HTTPS, TLS, SSL, электронной подписи, обычно хранятся и передаются в формате DER (или в его текстовом аналоге PEM, который представляет собой Base64-кодированный DER). Сертификат содержит открытый ключ, информацию о владельце и удостоверяющем центре, а также цифровую подпись. Для проверки подписи необходимо иметь точное байтовое представление данных, что и обеспечивает DER.
Электронная подпись
Форматы подписей (например, PKCS#7/CMS, CAdES) также используют DER для кодирования подписанных данных и атрибутов. Подпись вычисляется над DER-кодированным содержимым, что гарантирует её целостность.
Защищённые протоколы
Многие протоколы аутентификации и обмена ключами (например, Kerberos, LDAP, SNMPv3) используют ASN.1 и DER для кодирования своих сообщений.
Смарт-карты и аппаратные модули безопасности (HSM)
Встроенные системы и криптографические токены часто оперируют DER-кодированными данными для хранения ключей, сертификатов и выполнения криптографических операций.
Отличия от других форматов
- BER (Basic Encoding Rules): DER является подмножеством BER. BER более гибок (допускает несколько вариантов кодирования), но не гарантирует однозначности. DER жёстче, но безопаснее для криптографии.
- CER (Canonical Encoding Rules): Ещё одно подмножество BER, ориентированное на потоки. CER использует составную форму для строк произвольной длины, в то время как DER — примитивную. DER более компактен для небольших данных.
- PEM (Privacy-Enhanced Mail): PEM — это не отдельный формат кодирования, а способ представления DER-данных в текстовом виде. DER-файл (бинарный) преобразуется в Base64 и обрамляется заголовками
-----BEGIN CERTIFICATE-----и-----END CERTIFICATE-----. PEM широко используется в Unix-системах и веб-серверах. - JSON/XML: В отличие от DER, JSON и XML являются текстовыми форматами, более читаемыми для человека, но менее компактными и менее эффективными для машинной обработки. DER, будучи бинарным, требует меньше места и быстрее парсится.
Интересные факты
- Формат DER является обязательным для всех сертификатов X.509 версии 3, используемых в современном интернете.
- В операционных системах семейства Windows сертификаты обычно хранятся в бинарном формате DER с расширением
.cer. - Размер DER-кодированного сертификата RSA с ключом длиной 2048 бит обычно составляет от 800 до 1200 байт.
- Существуют утилиты (например,
openssl asn1parse), позволяющие декодировать DER-файлы и просматривать их структуру в человекочитаемом виде.
Критика
Основной недостаток DER — его бинарная природа, что затрудняет отладку и ручной анализ данных. Кроме того, синтаксис ASN.1, лежащий в основе DER, считается сложным и громоздким по сравнению с современными форматами, такими как JSON или Protocol Buffers. Однако для задач криптографии, где критичны однозначность и компактность, DER остаётся стандартом де-факто.
Источники
- ITU-T Recommendation X.690 (2015) — Information technology — ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER).
- RFC 5280 — Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile.
- RFC 7468 — Textual Encodings of PKIX, PKCS, and CMS Structures (PEM).
- Стандарт ISO/IEC 8825-1:2015 — Information technology — ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →