CRLDistributionPoints.ReasonFlags的ASN.1 BitString编码

问题描述 投票:0回答:1

@@ Crypt32说:for keyCompromise and caCompromise reasons, it should be 81 02 05 60-(在问题CDP extension ASN.1 tag后加评论)。

05 60 is: 00000101 01100000

ReasonFlags ::= BIT STRING {
    unused                  (0),
    keyCompromise           (1),
    cACompromise            (2),
    affiliationChanged      (3),
    superseded              (4),
    cessationOfOperation    (5),
    certificateHold         (6),
    privilegeWithdrawn      (7),
    aACompromise            (8) }

为什么keyCompromise + cACompromise编码为05 60?谢谢。

更新:在Windows中,05 60被解码为cessationOfOperation(5)

enter image description here

asn.1
1个回答
0
投票

05是未使用的位数。它是BIT_STRING的一部分。 60(所有八位位组均以十六进制表示)是位字符串值。 BIT_STRING是一长串的位。位在LTR方向上索引。最小传输单位是字节,因此每个位串的长度都是8位的倍数。如果将实际位串的长度除以8除以余数,则余数表示未使用的位。未使用的位是最后一个1之后到字节末尾的零位数目。如果右侧的所有8位都未使用,则不会对零字节进行编码。

位索引将1:1映射到ASN.1模块中括号中的位号。 ASN.1模块定义了9位,需要2个字节进行编码:

enter image description here

由于第二个字节中的所有位均为零,所以该字节未编码:

enter image description here

您看到位(1)和(2)设置为1,这映射到启用的keyCompromisecACompromise标志的按位或组合。其余位为零,直到字节末尾,因此不使用。如果我们对它们进行计数,则会得到5个未使用的位,编码后的值将如下所示:

03 02 05 60

其中:

  • 03-标签标识符
  • 02-标签长度
  • 05-未使用的比特数
  • 60-编码值

如果包含aACompromise位怎么办?该位需要第二个字节:

enter image description here

所有其余位(第9位之后)均为零,因此未使用(恰好是7位)。因此,此设置的编码为:

03 03 07 60 80

其中:

  • 03-标签标识符
  • 03-标签长度
  • 07-未使用的位数
  • 60 80-编码值

IDK,如果我已经解释得足够好,我会尽力而为。

© www.soinside.com 2019 - 2024. All rights reserved.