数字证书编码ASN.1
Posted 给我个名字
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数字证书编码ASN.1相关的知识,希望对你有一定的参考价值。
1.参考实验指导,完成DER编码
AttributeType编码
AttributeValue | 标识符 | 长度串 | 内容串 |
---|---|---|---|
20201332 | 13 | 08 | 32 30 32 30 31 33 33 32 |
yangsai | 13 | 07 | 79 61 6e 67 73 61 69 |
CN | 13 | 02 | 43 4e |
Attribute ValueAssertion编码
Attribute ValueAssertion | 标识符 | 长度串 | 内容串 |
---|---|---|---|
20201332 | 30 | 0F | 06 03 55 04 0A 13 08 32 30 32 30 31 33 33 32 |
yangsai | 30 | 0E | 06 03 55 04 03 13 07 79 61 6e 67 73 61 69 |
CN | 30 | 09 | 06 03 55 04 06 13 02 43 4E |
RelativeDistinguishedName
RelativeDistinguishedName | 标识符 | 长度串 | 内容串 |
---|---|---|---|
20201332 | 31 | 11 | 30 0F 06 03 55 04 0A 13 08 32 30 32 30 31 33 33 32 |
yangsai | 31 | 10 | 30 0E 06 03 55 04 03 13 07 79 61 6e 67 73 61 69 |
CN | 31 | 0B | 30 09 06 03 55 04 06 13 02 43 4E |
Virtual CA |
RDNSequence编码
RDNSequence | 标识符 | 长度串 | 内容串 |
---|---|---|---|
CN,20201332,yangsai | \\x30 | \\x32 | \\x31\\x0B\\x30\\x09\\x06\\x03\\x55\\x04\\x06\\x13\\x02\\x43\\x4E\\x31\\x11\\x30\\x0F\\x06\\x03 \\x55\\x04\\x0A\\x13\\x08\\x32\\x30\\x32\\x30\\x31\\x33\\x33\\x32\\x31\\x10\\x30\\x0E\\x06\\x03 \\x55\\x04\\x03\\x13\\x07\\x79\\x61\\x6e\\x67\\x73\\x61\\x69 |
标记符为0x17
ASN.1 | 标记符 | 长度串 | 内容串 | |
---|---|---|---|---|
20200222000000 | \\x17 | \\x0E | 32 30 32 30 30 32 32 32 30 30 30 30 30 30 | |
20220222000000 | 17 | 0E | 32 30 32 32 30 32 32 32 30 30 30 30 30 30 | |
Integer编码(对序列号编码)
ASN.1 | 标记符 | 长度串 | 内容串 |
---|---|---|---|
1174 | 0X02 | 02 | 04 96 |
序列号=1174(0x0496),证书签发者 DN="CN=Virtual CA,C=CN",证书持有者DN="CN=你的名字拼音, OU=Person,C=CN",证书有效期=20200222000000-20220222000000。
用echo -n -e "编码" > 你的学号.der中,用OpenSSL asn1parse 分析编码的正确性
密码学系列 - DER编码
DER(Distinguished Encoding Rules,可辨别编码规则)
DER 广泛用于X.509等数字证书。PEM文件 是Base64编码的DER证书
ASN.1编码格式:
- 基本编码规则(BER)
- 规范编码规则(CER)
- 可分辨编码规则(DER)
BER 编码
基本编码规则的格式指定了用于编码 ASN.1 数据结构的自描述和自定界格式。每个数据元素都被编码为类型标识符、长度描述、实际数据元素以及必要时的内容结束标记。这些类型的编码通常称为类型-长度-值(TLV) 编码。这种格式允许接收器从不完整的流中解码 ASN.1 信息,而无需预先了解数据的大小、内容或语义含义。
编码结构
数据的编码通常由按以下顺序出现的四个部分组成:
Identifier八位字节 类型 | Length八位字节 长度 | Contents八位字节 值 | End-of-contents八位字节 |
---|
End-of-contents
八位字节是可选的,仅在使用不定长形式时才使用。如果没有像 NULL 类型那样编码的内容,也可以省略 Contents
八位字节。
CER 编码
CER(规范编码规则)是BER的受限变体,用于为ASN.1描述的数据结构生成明确的传输语法。BER 可以选择如何编码数据值,而 CER(与DER一起)仅从基本编码规则允许的编码中选择一种编码,消除了其余选项。当必须保留编码时,CER 很有用;例如,在证券交易中。
DER 编码
DER(可分辨编码规则)是BER的受限变体,用于为ASN.1描述的数据结构生成明确的传输语法。与CER一样,DER 编码是有效的 BER 编码。DER 与 BER 相同,但删除了一个发送者的选项。
DER 是 BER 的一个子集,提供了一种编码 ASN.1 值的方法。DER 适用于需要唯一编码的情况,例如在密码学中,并确保需要数字签名的数据结构产生唯一的序列化表示。DER 可以被认为是BER的规范形式。例如,在 BER 中,布尔值 true 可以编码为 255 个非零字节值中的任何一个,而在 DER 中,有一种方法可以对布尔值 true 进行编码。
最重要的 DER 编码约束
- 长度编码必须使用定型
- 此外,必须使用尽可能短的长度编码
- 位串、八位组串和受限字符串必须使用原始编码
- Set 的元素根据它们的标签值按排序顺序编码
例子
下面是SSLDocument给出的对一个对象进行DER编码的例子。 例子使用的对象是ASN.1定义的BIT STRING类型的对象,其编码的步骤如下:
- 对位串使用"0"进行填补,使其长度为8的整数倍(如果已经是整数倍,则不需要进行填补);
- 计算填补的位数并写下来,成为数据内容的第一个字节;
- 写入填补后的位串,高位字节优先。这些数据跟前面的一个字节组成数据内容的全部字节;
- 在这些数据前面加上一个头字节
下面是一个实际的数据例子:
位串:‘01000100111011’
- 补齐两个0在后面,成为8的整数倍,得到’0100010011101100’;
- '02’作为第一个数据内容的字节;
- '44 ec’作为其余的数据内容的字节;
- '03’作为前面的对象标识字节;
- 因为BIT STRING的tag值3<=127,所以只有一个字节的长度域’03’;
那么得到的这个位串的DER编码就是03 03 02 44 ec
,其中,第一个字节是对象标识域,第二个字节是数据长度域,其他为数据域。
-
往期精彩回顾:
- 区块链知识系列
- 密码学系列
- 零知识证明系列
- 共识系列
- 公链调研系列
- 比特币系列
- 以太坊系列
- EOS系列
- Filecoin系列
- 联盟链系列
- Fabric系列
- 智能合约系列
- Token系列
以上是关于数字证书编码ASN.1的主要内容,如果未能解决你的问题,请参考以下文章