ASN.1 DER 标签值 0xA0 是什么?

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

这是一个以 ASN.1 DER 编码的证书示例

30 82 01 8F 30 81 F9 **A0** 03 02 01 02 02 01 01 30
0D 06 09 2A 86 48 86 F7 0D 01 01 05 05 00 30 0D
31 0B 30 09 06 03 55 04 03 0C 02 43 41 30 20 17
0D 31 33 30 39 31 35 31 35 33 35 30 32 5A 18 0F
32 31 31 33 30 39 32 32 31 35 33 35 30 32 5A 30
0D 31 0B 30 09 06 03 55 04 03 0C 02 43 41 30 81
9F 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00
03 81 8D 00 30 81 89 02 81 81 00 8D 80 B5 8E 80
8E 94 D1 04 03 6A 45 1A 54 5E 7E EE 6D 0C CB 0B
82 03 F1 7D C9 6F ED 52 02 B2 08 C3 48 D1 24 70
C3 50 C2 1C 40 BC B5 9D F8 E8 A8 41 16 7B 0B 34
1F 27 8D 32 2D 38 BA 18 A5 31 A9 E3 15 20 3D E4
0A DC D8 CD 42 B0 E3 66 53 85 21 7C 90 13 E9 F9
C9 26 5A F3 FF 8C A8 92 25 CD 23 08 69 F4 A2 F8
7B BF CD 45 E8 19 33 F1 AA E0 2B 92 31 22 34 60
27 2E D7 56 04 8B 1B 59 64 77 5F 02 03 01 00 01
30 0D 06 09 2A 86 48 86 F7 0D 01 01 05 05 00 03
81 81 00 0A 1C ED 77 F4 79 D5 EC 73 51 32 25 09
61 F7 00 C4 64 74 29 86 5B 67 F2 3D A9 39 34 6B
3C A9 92 B8 BF 07 13 0B A0 9B DF 41 E2 8A F6 D3
17 53 E1 BA 7F C0 D0 BC 10 B7 9B 63 4F 06 D0 7B
AC C6 FB CE 95 F7 8A 72 AA 10 EA B0 D1 6D 74 69
5E 20 68 5D 1A 66 28 C5 59 33 43 DB EE DA 00 80
99 5E DD 17 AC 43 36 1E D0 5B 06 0F 8C 6C 82 D3
BB 3E 2B A5 F1 94 FB 53 7B B0 54 22 6F F6 4C 18
1B 72 1C

突出显示的标签

0xA0
是什么意思?它编码什么类型?

下一个值是

0x03
,它是
0xA0
标签的长度。 但长度之后的下一个字节实际上是
INTEGER
类型 -
0x02

谁能解释一下?

asn.1 der
2个回答
8
投票

0xA0
是一个
Context Specific
标签。在您的示例中,它包含您正确推导的整数。在 ASN.1 中,您可以对 1 字节标签的类别进行 4 种编码(更多信息请参见 ITU-T X.690 的第 8.1.2.2 节):

  • 通用(
    00xxxxxx
    )
  • 申请(
    01xxxxxx
    )
  • 具体情况(
    10xxxxxx
    )
  • 私人(
    11xxxxxx
    )

就我个人而言,我从未见过除了通用(即序列、整数、八位字节字符串)和上下文特定之外的任何东西。

您可以使用ASN.1 Editor探索证书的结构。我在这里选择了上下文特定标签:


0
投票

具体答案

回到原来的问题: 0xA0 是一个 1 字节的 ASN.1 标记,表示构造的特定于上下文的项 #0。 “构造”意味着它将包含其他条目。 但除此之外,它的含义取决于它的使用环境。

一般答案

ASN.1 标签有四个类别,编码在第一个标签字节的两个最高位中。

UNIVERSAL 适用于预定义的标签类型。这意味着包含实际数据(INTEGER、OID、OCTET STRING 等)的树叶以及标准“构造”容器类型 SEQUENCE 和 SET。 SEQUENCE (0x30) 是你经常遇到的。

APPLICATION、CONTEXT 和 PRIVATE 标签类是不同的野兽。位 5 = 0x20 处的构造/原始标志仍然适用,但除此之外,没有“通用”预定义标记值含义。所以在大多数情况下,标签的低位将从 0 开始,向上计数。

我不知道何时需要使用这三个类中的哪一个。但想法是这样的:

  • 在应用程序上下文中广泛使用的应用程序,
  • PRIVATE 用于组织的数据专有和内部结构,
  • 上下文用于特定的、定义的上下文。

X.509 和 PKCS 系列等加密标准使用 CONTEXT。

对 CONTEXT 的偏见也是 ASN.1 规范所固有的;定义 ASN.1 模块时,可以省略 CONTEXT 关键字 -

[0]
表示
CONTEXT[0]
。相反,APPLICATION 和 PRIVATE 关键字是强制性的。

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