密码学的基础:X.690和对应的BER CER DER编码

科技资讯 投稿 16200 0 评论

密码学的基础:X.690和对应的BER CER DER编码

ASN.1支持一系列的编码规则,比如BER,DER,CER等。而X.690就是一个ITU-T的标准,它里面包含了一些对ASN.1进行编码的规则。

ITU-T的全称是International Telecommunication Union Telecommunication Standardization Sector,也就是国际电联电信标准化部门,主要用来协调电信和信息通信技术标准。

接下来,我们来看下这些编码规则的实现细节。

BER编码

在BER中,每个数据元素都被编码为类型标识符、长度描述、实际数据元素,以及可选的内容结束标记,如下所示:

---|---|---|---|---
Type|Length|Value|只用在不确定长度的情况

类型标识符

ASN.1的类型有下面几种,下表列出了ASN.1中类型和对应的十进制的关系:

type名称 基础类型还是组合类型 Number(十进制
End-of-Content (EOC 基础类型 0
BOOLEAN 基础类型 1
INTEGER 基础类型 2
BIT STRING 两者皆可 3
OCTET STRING 两者皆可 4
NULL 基础类型 5
OBJECT IDENTIFIER 基础类型 6
Object Descriptor 两者皆可 7
EXTERNAL 组合类型 8
REAL (float 基础类型 9
ENUMERATED 基础类型 10
EMBEDDED PDV 组合类型 11
UTF8String 两者皆可 12
RELATIVE-OID 基础类型 13
TIME 基础类型 14
Reserved
15
SEQUENCE and SEQUENCE OF 组合类型 16
SET and SET OF 组合类型 17
NumericString 两者皆可 18
PrintableString 两者皆可 19
T61String 两者皆可 20
VideotexString 两者皆可 21
IA5String 两者皆可 22
UTCTime 两者皆可 23
GeneralizedTime 两者皆可 24
GraphicString 两者皆可 25
VisibleString 两者皆可 26
GeneralString 两者皆可 27
UniversalString 两者皆可 28
CHARACTER STRING 组合类型 29
BMPString 组合类型 30
DATE 基础类型 31
TIME-OF-DAY 基础类型 32
DATE-TIME 基础类型 33
DURATION 基础类型 34
OID-IRI 基础类型 35
RELATIVE-OID-IRI 基础类型 36

ASN.1都是以字节为单位的,一个字节是8bits,其中7-8bits表示的是Tag class。2个bits可以表示4种class,如下:

class value 描述
Universal 0 ASN.1的native类型
Application 1 该类型仅对一种特定应用程序有效
Context-specific 2 这种类型依赖于context
Private 3

还剩下5个bits,可以表示32个不同的值,但是对于ASN.1来说,它的类型是超出32范围的,所以这5个bits只用来表示0-30的值的范围。如下所示:

长度

type编码之后就是length编码,length编码有两种格式,一种是确定长度的length,一种是不确定长度的length。

我们看下不同类型的长度编码形式:

如果长度超过了127,那么可以在8bit设置为1,并且剩下的7个bits表示的是后面存储长度的byte个数,byte个数的范围是(1-126。

所有bits都设置为1的是保留值。

内容

Contents是跟在长度后面的byte字段,Contents的长度可以为0,表示没有Contents内容。

CER编码和DER编码

CER的全称是Canonical Encoding Rules, DER的全称是Distinguished Encoding Rules,这两个编码都是从BER衍生过来的,他们都是BER的变体。

那么对应的,如果一个实现者声明自己是支持BER编码协议的,那么就意味着这个实现者需要支持所有BER可能的变体编码规则。

CER和DER编码都是BER的扩展,他们和BER相比,只规定了一种具体的编码规则,所以他们的确定性更强。

另外,在DER中,Bit string, octet string 和受限的字符串必须使用基础类型,不能使用组合类型。

编程笔记 » 密码学的基础:X.690和对应的BER CER DER编码

赞同 (31) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽