ASN.1抽象语法标记1

发布时间 2023-08-28 16:40:21作者: PKICA

ASN.1编码ber

ASN.1(抽象语法表示法一)

ASN.1(抽象语法表示法一)是一种正式但灵活的表示法,允许您指定高级电信协议中使用的抽象对象。您可以使用整数和位字符串等简单类型以及集合和序列等结构化类型来构建复杂类型的定义。

基本编码规则 (BER)

BER 描述了如何将每种 ASN.1 类型的值表示或编码为八位八位组的字符串。通常有不止一种方法对给定值进行 BER 编码。

可辨别编码规则 (DER)

杰出编码规则 (DER) 是 BER 的子集,它为每个 ASN.1 值提供唯一的编码。

DER 和 BER 编码的文件是二进制文件。

对于此处的大多数用途,您可以将“BER 编码“DER 编码视为同一事物。

 

基本编码规则 (BER)

  基本编码规则 (BER) 是一组规则,用于将 ASN.1 定义的数据编码为特定的表示形式,以便传输到另一个系统。我们将抽象语法符号与 等高级语言的声明部分进行了比较。继续类比,我们将传输语法 BER 与汇编/机器语言进行了比较。抽象符号 ASN.1 的实例或值通过一组编码规则或传输语法 BER 进行编码,以便在两个应用实体之间传输。正如在应用程序编程中高级语言比汇编语言更常用一样,网络用户和程序员在网络应用中也比 BER 更容易熟悉 ASN.1。因此,我们详细讨论了 ASN.1,并以更简短的方式讨论了 BER

我们给出了 BER 的结构和示例,足以了解用于传输 ASN.1 定义的数据类型和值的编码/解码规则。ISO 8825(或 ISO 8825-第 部分:基本编码规则)和 CCITT 的 X.209 包含 BER 的详细规范。ISO 8825 PDAM 2 的后续修订与 ISO 8825 合并形成 ISO 8825 第 部分:基本编码规则。

抽象语法

内置类型:

简单类型:

BOOLEAN

INTEGER

BIT STRING

OCTET STRING

NULL

OBJECT IDENTIFIER

REAL

ENUMERATED

CHARACTER STRING

结构体类型:

SEQUENCE (think array)

SEQUENCE OF (think record)

SET (think set)

SET OF (think set, all elements same type)

CHOICE

SELECTION

ANY

类和标签(Classes and Tags)

UNIVERSAL

APPLICATION

PRIVATE

CONTEXT SPECIFIC

有用类型(Useful Types,可以认为上述以外其他常用的类型)

GeneralizedTime (three forms)

UTCTime (like GeneralizedTime but only to a minute or second)

数据元素的结构

数据元素是 BER 的基本单位。编码包括将信息表达为数据元素;解码是相反的过程。每个数据元素都是由三个组成部分组成的有序列表:标识符、长度和 内容。原始数据元素的特征在于不包含附加数据元素的内容组件。在结构化数据元素中,内容组件包含一个或多个数据元素,如图 所示 。每个组件都以八位位组编码;编码数据元素是八位位组的完整序列。

Type

Length

Value

 

 

 

 

 

标识符

标识符或标签被编码为一个或多个八位位组,如图 所示。它给出了内容组件中指定的数据类型。在单八位字节标识符中,位 和位 表示类别(UNIVERSAL 为 00APPLICATION 为 01CONTEXT-SPECIFIC 为 10PRIVATE 为 11),位 指定数据元素为原始 (0) 或结构化 (1) ),位 到 给出标签号。例如,00000011 表示标签类别为 UNIVERSAL00),数据元素为原始(0),标签编号为 300011),即 BIT STRING 标签编号。

 
图:标识符(Tag)编码  

当标签编号大于 31 时,需要多于 个位,因此需要额外的八位位组。在这种情况下,第一个八位位组的位 到 为 1,其余每个八位位组在位 中具有 或 0,具体取决于是否标签号分别以至少一个八位位组连续或没有八位位组连续。例如,标签 APPLICATION 293 编码为 01111111 10000010 00100101

 

长度

  数据元素的长度分量用以下三种形式之一指示内容分量的长度(八位位组数):

  • 1) 短格式 长度以一个八位位组给出,表示从 到 127 的数字范围,因为第一位必须为 0。例如,长度字段 01010110 表示内容字段有 = 86 个八位位组
  • 2) 长格式 长度以 到 127 个八位位组给出,允许使用从 128 到 21016-1 的数字。实际上,数字处于该范围的下限。每个八位位组的第 位中的 或 与标识符字段中的含义相同。例如,10011001 00011010 表示内容字段有 3226 个八位位组。
  • 3) 不定形式 结构化数据元素的内容(此形式允许的唯一类型)具有特定的内容结尾数据元素,由两个全零的连续八位字节给出。长度字段包含一个八位位组,10000000,它表示存在内容结束八位位组。

内容

  在内容组件中,零个或多个八位位组对原始数据元素进行编码,而零个或多个数据项对结构化数据元素进行编码。ASN.1 数据类型的编码在图 中指定 。对于类型 BIT STRING 和 OCTET STRING,内容组件可以被编码为原始的或结构化的。所有字符串类型也可以被编码为原始或结构化,在这种情况下,每个组成数据项代表一个子字符串。
图: ASN.1 数据类型的内容组件编码。

Basic Encoding Rules (BER)

asn1