OpenSSL ASN.1编码规则分析及证书密钥编码方式
什么是ASN.1编码规则?
ASN.1(Abstract Syntax Notation One)是一种数据交换格式标准,支持在网络上的不同计算机平台之间互操作。ASN.1编码规则定义了ASN.1数据结构如何以二进制形式进行编码和解码,以实现在网络上的传输和接收。
ASN.1编码规则主要包括以下几种:
- Basic Encoding Rules(BER):最基本的编码规则,通常用于编码传统的ASN.1数据类型。
- Canonical Encoding Rules(CER):通过特定的编码规则来减少多余的空格、换行符等无关信息的编码规则。
- Distinguished Encoding Rules(DER):与CER类似,但是对于对于数据类型和标签的表示方式有更严格的规定。
- XML Encoding Rules(XER):将ASN.1数据结构转化为XML格式进行编码。
- JSON Encoding Rules(JER):将ASN.1数据结构转化为JSON格式进行编码。
OpenSSL证书密钥编码方式
在OpenSSL中,ASN.1编码规则主要用于对证书和密钥的编码。而在证书和密钥的编码中,OpenSSL使用的主要是DER编码规则。
在DER编码中,每个ASN.1元素都可以用多个标记进行表达:Tag、Length、Value。Tag用于标识数据类型,Length用于标识数据的长度,Value用于存储实际的数据。
例如,对于RSA私钥的编码,其DER编码形式如下:
30 82 02 76 ; SEQUENCE, length 630
02 01 00 ; INTEGER 0
02 82 02 01 00 ; INTEGER, length 513
8c c1 09 97 d6 49 20 1e 79 7c 5c c8 c6 97 6e 18
...
ee 5f 7f 11 5a 7a 19 8e b7 d0 d0 b4 7d 44 b8 e6
56 53 1d 71 de 2f f0 83 f1 78 94 fb 89 fb
02 03 01 00 01 ; INTEGER 65537
02 82 01 01 00 ; INTEGER, length 257
df 2b 21 0f a8 55 16 96 29 95 98 3f d1 79 9f 2f
...
2c ea ec a2 fb 01 20 72 52 86 89 b0 d9 d9 b7 f9
e8 10 20 fe e6 a5 6b 59 ea bc 7b 51 9d 1e
02 41 00 ; INTEGER, length 65
cd 5d 7c 5f 9d 95 91 8b e7 fe b6 ad f0 75 7b 8e
...
62 ee b9 11 03 c0 e6 97 41 4b 3e d4 39 5e 7c
02 40 6c bc c0 25 06 e1 1d 95 69 63 31 32 f2 9b
...
c8 2a 31 41 69 38 be e1 47 e1 ab 66 83 a9 62 12
其中,前面的30 82 02 76表示一个SEQUENCE,其长度为630。接下来的几个02标记分别表示INTEGER类型,最后两个标记分别表示一个65字节的INTEGER类型和一个256字节的INTEGER类型。
需要注意的是,在DER编码规则中,每个元素都有固定的长度,这也就意味着对于一个ASN.1类型的数据,其长度是可以通过编码后的数据快速确定的。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:openssl ans.1编码规则分析及证书密钥编码方式 - Python技术站