跳到主要内容
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 定义为由 tbsCertificate、signatureAlgorithm(AlgorithmIdentifier 类型)和 signatureValue(BIT STRING 类型)组成的 SEQUENCE。基本构件包括 SEQUENCE、SET、CHOICE、OPTIONAL 和 DEFAULT 字段,采用 IMPLICIT 或 EXPLICIT 标记方式的上下文特定标签([0]、[1]),以及 INTEGER、BIT STRING、OCTET STRING、OBJECT IDENTIFIER 等基元类型和各种字符串类型、时间类型。

编码规则把值转换为字节:PKI 使用 BER 及其规范子集 DER(X.690),紧凑的电信消息使用 PER,XML 和 JSON 分别对应 XER 和 JER。与安全相关的 ASN.1 大多采用 DER。

ASN.1 解析历来是缺陷高发区(长度溢出、BER/DER 混淆、标签处理不一致),因此应使用仍在维护的解析器,切勿为不可信输入自己手写解析器。读懂结构转储是一项实用的调试技能:openssl asn1parse -i 或 ASN.1 查看器可以显示带偏移量的结构树。

标准与参考资料

全部术语