GM/T0015-2012学习笔记
文章目录
吐槽一下:既然是标准,就应该是广而告知,被一些信息查的网站,高价出售。
我从“密码行业标准化技术委员会”下载到官方版本。http://www.gmbz.org.cn/main/bzlb.html
如果还找不到的,可以联系我索要,微信yjkhtddx。
还有大神整理在线版:https://github.com/metanorma/gmt-0015-2012/blob/master/gmt-0015-2012-zh.adoc
数字证书
数字证书特性
- 任何能够获得和使用认证机构公钥的用户都可以恢复认证机构所认证的公钥。
- 除了认证机构,没有其他机构能够更改证书,证书是不可伪造的。
用户证书形式
V 为证书版本;
SN 为证书序列号;
A 为用来签署证书的算法标识符;
UCA 为CA的可选的唯一性标识符;
UA 为用户A的可选的唯一性标识符;
Ap 为用户A的公钥;
TA 表示证书的有效期,由两个日期组成,两者之间的时间段即是证书的有效期。
CA<<A>> = CA{V,SN,AI,CA,UCA,A,UA,Ap,TA}
数字证书格式
本标准采用GB/T16262系列标准的特定编码规则(DER)对下列证书项中的各项信息进行编码, 组成特定的证书数据结构。ASN.1 DER编码是关于每个元素的标记、长度和值的编码系统。
数字证书的基本数据结构如下:
Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate,
signatureAlgorithm AlgorithmIdentifier,
signatureValue BIT STRING }
TBSCertificate ::= SEQUENCE {
version [0] EXPLICIT Version DEFAUT v1,
serialNumber CertificateSerialNumber,
signature AlgorithmIdentifier,
issuer Name,
validity Validity,
subject Name,
subjectPublicKeyInfo SubjectPublicKeyInfo,
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,
--如果出现,version必须是v2或者v3
subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,
--如果出现,version必须是v2或者v3
extensions [3] EXPLICIT Extensions OPTIONAL 扩展项
--如果出现,version必须是v3
}
Version ::= INTEGER { v1(0) ,y2(1) ,v3(2) }
CertificateSerialNumber ::= INTEGER
Validity ::= SEQUENCE {
notBefore Time,
notAfter Time }
Time ::= CHOICE {
utcTime UTCTime,
generalTime GeneralizedTime }
UniqueIdentifier ::= BIT STRING
SubjectPublicKeyInfo ::= SEQUENCE {
algorithm AlgorithmIdentifier,
subjectPublicKey BIT STRING }
Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension
Extension ::= SEQUENCE {
extnID OBJECT IDENTIFIER,
critical BOOLEAN DEFAULT FALSE,
extnValue OCTET STRING }
TLV(Tag-Length-Value)结构
在X.509证书的DER编码中,每个数据元素都由三部分组成:标签(Tag)、长度(Length)和值(Value)。这是通常的TLV(Tag-Length-Value)结构。
Tag 数据类型标签
在DER编码中,用于标识数据类型的标记通常称为"标签"(Tag)。每个标签都用一个字节表示,并指示编码中的数据类型。以下是一些常见的DER标签及其对应的数据类型:
0x01 - BOOLEAN: 表示布尔值,可以是TRUE或FALSE。
0x02 - INTEGER: 表示整数值。
0x03 - BIT STRING: 表示比特字符串,通常用于存储位序列。
0x04 - OCTET STRING: 表示八位字节字符串,通常用于存储二进制数据。
0x05 - NULL: 表示空值。
0x06 - OBJECT IDENTIFIER (OID): 表示对象标识符,用于唯一标识算法、属性或其他信息。
0x0C - UTF8String: 表示UTF-8编码的字符串。
0x13 - PrintableString: 表示可打印的ASCII字符串。
0x17 - UTCTime: 表示协调世界时(UTC)的时间。
0x30 - SEQUENCE: 表示序列,用于将多个元素组合在一起。
Length 长度
在 DER 编码中,长度字段的表示规则如下:
-
如果长度小于 128,直接用一个字节表示长度,该字节的最高位为 0,其余 7 位表示长度值。
-
如果长度大于等于 128,那么第一个字节的最高位为 1,表示后面的字节用于表示长度值的字节数。低 7 位指示后续字节数的数量。
- 如果第一个字节的低 7 位是 n,那么后续 n 个字节表示长度的值。
这种动态长度编码的方式可以适应不同范围的长度值,因为长度字段的大小会根据实际长度的大小进行调整。这是 DER 编码的一种灵活性设计,可以适应各种场景的数据长度。
Value 值
数据长度的二进制数据。
DER
资料1
DER(Distinguished Encoding Rules)是一种ASN.1(Abstract Syntax Notation One,抽象语法符号一)规范定义的数据编码规则。ASN.1是一种用于描述数据结构和数据格式的标记语言。
DER编码规则定义了将数据结构以二进制形式进行编码的规则,它是一种通用的、确定性的编码规则。DER编码规则在一些常见的应用中得到广泛使用,特别是在X.509数字证书、PKCS标准(如PKCS#5、PKCS#7和PKCS#12)以及其他各种加密算法中。
对于每种类型的数据,DER规定了它的特定编码方式,例如,整数、布尔值、字符串、时间等。数据以TLV(Type-Length-Value)三元组的形式编码,即类型、长度和值,其中类型表示数据的类型标识,长度表示数据的长度,值表示具体的数据内容。
DER编码规则具有以下特点:
- 确定性:对于给定的数据,DER编码规则定义了唯一的编码方式,因此可以确保编码和解码的结果始终一致。
- 紧凑性:DER编码是非常紧凑的,可以有效地利用存储空间。
- 无歧义性:DER编码规则是严格的,不允许任何歧义的情况出现。
总之,通过遵循DER编码规则,可以实现不同系统之间的数据交换和互操作性。
资料2
DER是Distinguished Encoding Rules的缩写,是ASN.1编码规则的一种扩展,它为每个ASN.1类型定义了一种唯一的编码方案。
DER编码规则的特点如下:
长度小于等于127,必须使用短型长度表示法,即一个字节的长度。
长度大于127,必须使用长型长度表示法,即一个或多个字节的长度,并且要尽可能的短。
对于简单的string类型以及在其基础上隐性标签生成的类型,使用简单定长表示法。
DER编码由四个部分组成,分别是类型字段、长度字段、值字段和结束标识字段。