数字证书编码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 编码约束

  1. 长度编码必须使用定型
    • 此外,必须使用尽可能短的长度编码
  2. 位串、八位组串和受限字符串必须使用原始编码
  3. Set 的元素根据它们的标签值按排序顺序编码

例子

下面是SSLDocument给出的对一个对象进行DER编码的例子。 例子使用的对象是ASN.1定义的BIT STRING类型的对象,其编码的步骤如下:

  1. 对位串使用"0"进行填补,使其长度为8的整数倍(如果已经是整数倍,则不需要进行填补);
  2. 计算填补的位数并写下来,成为数据内容的第一个字节;
  3. 写入填补后的位串,高位字节优先。这些数据跟前面的一个字节组成数据内容的全部字节;
  4. 在这些数据前面加上一个头字节

下面是一个实际的数据例子:
位串:‘01000100111011’

  1. 补齐两个0在后面,成为8的整数倍,得到’0100010011101100’;
  2. '02’作为第一个数据内容的字节;
  3. '44 ec’作为其余的数据内容的字节;
  4. '03’作为前面的对象标识字节;
  5. 因为BIT STRING的tag值3<=127,所以只有一个字节的长度域’03’;
    那么得到的这个位串的DER编码就是03 03 02 44 ec,其中,第一个字节是对象标识域,第二个字节是数据长度域,其他为数据域。

往期精彩回顾:
区块链知识系列
密码学系列
零知识证明系列
共识系列
公链调研系列
比特币系列
以太坊系列
EOS系列
Filecoin系列
联盟链系列
Fabric系列
智能合约系列
Token系列

以上是关于数字证书编码ASN.1的主要内容,如果未能解决你的问题,请参考以下文章

ASN.1分析Alipay证书

使用 asn.1 编码大整数时的奇怪之处

密码学系列 - DER编码

密码学系列 - DER编码

ASN.1语法以及在python中如何编码解码

ASN.1 SEQUENCE 标签号编码