Перейти к содержимому
ecdsa.com

ASN.1 (абстрактная синтаксическая нотация версии один)

Язык ITU-T X.680 для описания структур данных независимо от их кодирования; на нём определены сертификаты X.509, CMS, ключи PKCS #8, OCSP, LDAP и телекоммуникационные протоколы.
Другие написанияASN.1Abstract Syntax Notation OneX.680

Модуль ASN.1 объявляет типы; например, RFC 5280 определяет Certificate как SEQUENCE из tbsCertificate, signatureAlgorithm (типа AlgorithmIdentifier) и signatureValue (типа BIT STRING). Строительные блоки — SEQUENCE, SET, CHOICE, поля OPTIONAL и DEFAULT, контекстно-зависимые теги ([0], [1]) с неявным (IMPLICIT) или явным (EXPLICIT) тегированием и примитивные типы, такие как INTEGER, BIT STRING, OCTET STRING, OBJECT IDENTIFIER, а также строковые типы и типы времени.

Правила кодирования превращают значение в байты: BER и его каноническое подмножество DER (X.690) — для PKI, PER — для компактных телекоммуникационных сообщений, XER и JER — для XML и JSON. Почти весь ASN.1, важный для безопасности, кодируется в DER.

У разбора ASN.1 долгая история ошибок (переполнения длины, путаница BER и DER, расхождения в обработке тегов), поэтому используйте активно сопровождаемый парсер и никогда не пишите собственный для недоверенных входных данных. Умение читать дамп — полезный навык отладки: openssl asn1parse -i или просмотр структуры ASN.1 показывают дерево со смещениями.

Стандарты и ссылки

Все термины