一、ASN.1是什么
在电信和计算机网络领域,ASN.1(Abstract Syntax Notation One) 是一套抽象语法标准,是描述数据的表示、编码、传输、解码的灵活的记法。它提供了一套正式、无歧义和精确的规则以描述独立于特定计算机硬件的对象结构。 ASN.1是ISO和ITU-T的联合标准,最初是1984年的CCITT X.409:1984的一部分。由于其广泛应用,1988年ASN.1移到独立标准X.208,1995年进行全面修订后变成X.680系列标准。
ASN.1广泛应用于电信和计算机网络领域,尤其是密码学领域。大量的RFC文档使用ASN.1定义协议、数据格式,比如HTTPS所使用的X.509证书结构等。
ASN.1描述对象的示例:
FooQuestion ::= SEQUENCE {
id INTEGER,
question IA5String
}
ASN.1本身只定义了表示信息的抽象句法,但是没有限定其编码的方法。
二、标准的ASN.1编码规则
编码规则的作用就是把ASN.1定义的数据对象转换成便于传输的比特流,通过计算机网络进行远程数据传输。
下面是根据第一部分的示例,用几种不同的编码规则进行编码:
#XER(XML Encoding Rules)
<FooQuestion>
<id>5</id>
<question>Anybody there?</question>
</FooQuestion>
#BER(Basic Encoding Rules)
30 13 02 01 05 16 0e 41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f
#DER(Distinguished Encoding Rules)
30 13 02 01 05 16 0e 41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f
三、BER编码规则
Basic Encoding Rules (BER)是一种自描述的ASN.1数据结构的二进制编码格式。BER编码可以通过一种或多种方式把任意ASN.1值表示成字节字符串(这就增加了一定的不确定性)。每一个编码后的BER数据依次由数据类型标识(Type identifier),长度描述(Length description), 实际数据(actual Value)排列而成,即BER是一种二进制TLV编码。TLV编码的一个好处,是数据的解析者不需要读取完整的数据,仅从一个不完整的数据流就可以开始解析。
四、DER编码规则
Distinguished Encoding Rules (DER)是BER的子集,主要是消除了BER的一些不确定性的编码规则。DER 用于需要使用唯一的octet string编码的应用程序,例如根据一个ASN.1编码来计算数字签名。
DER在BER规则基础上增加了如下限制:
五、BER & DER
如在BER中Boolean类型true的value字节,可以为任何小于255大于0的整数,而在DER中,value字节只能为255。DER的这种确定性,保证了一个ASN.1数据结构,在编码为DER后,只会有一种正确的结果。这使得DER更适合用在数字签名领域,比如X.509中广泛使用了DER。
参考资料
[1] ASN.1
[2] X.680
全部评论