1. OID 解析
OID(对象标识符)是一种分层结构的唯一标识符。我们来分解 1.2.156.10197.1.501
:
-
1.2.156: 这是ISO分配给中国的顶级OID arc。
-
1.2.156.10197: 这个节点由中国国家密码管理局(OSCCA)管理,专门用于标识中国的密码算法标准(GM/T系列标准)。
-
1.2.156.10197.1: 这个节点通常用于标识GM/T标准中的算法。
-
1.2.156.10197.1.501: 这个具体的OID指向
sm2sign-with-sm3
,即使用SM3进行哈希,然后使用SM2进行数字签名。
简单总结:这个OID明确告诉解析者,生成此证书签名所使用的算法是 SM2 + SM3。
2. 算法格式详解
在X.509证书中,这个OID会出现在两个关键位置:
-
tbsCertificate.signature
(证书主体部分的签名算法标识) -
signatureAlgorithm
(整个证书的签名算法标识)
通常情况下,这两个字段的值是相同的,都使用这个OID。
在ASN.1结构中的表示
在证书的ASN.1编码中,算法标识是一个序列(SEQUENCE),包含算法OID和参数。对于 1.2.156.10197.1.501
,其结构如下:
asn.1
SEQUENCE { algorithm OBJECT IDENTIFIER = { 1.2.156.10197.1.501 }, -- sm2sign-with-sm3 parameters ANY DEFINED BY algorithm OPTIONAL }
关键点在于 parameters
字段:
-
对于传统的算法如RSA,参数可能是NULL。
-
对于ECDSA(以及SM2,其签名算法部分与ECDSA相似),参数通常用于指定使用的椭圆曲线。
-
但是,对于 OID
1.2.156.10197.1.501
,parameters
字段在绝大多数实际应用中是被省略或设置为NULL
的。 这是因为SM2算法所使用的默认椭圆曲线已经被隐含地定义在标准中。
默认曲线: SM2算法标准(GM/T 0003-2012)定义了一条特定的256位椭圆曲线,称为 sm2p256v1。它的曲线参数也是通过一个标准的OID 1.2.156.10197.1.301
来标识的。在证书的公钥信息字段 (SubjectPublicKeyInfo
) 中,你会找到这个曲线OID,明确指出了公钥是基于哪条曲线生成的。
3. 签名生成与验证流程
当CA使用这个算法对证书进行签名时,流程如下:
-
哈希计算:使用 SM3 哈希算法对需要签名的证书部分(即
tbsCertificate
结构)计算哈希值,得到一个256位(32字节)的摘要。 -
签名计算:使用CA的 SM2 私钥对上一步得到的SM3摘要进行数字签名。SM2签名算法本身会输出两个大整数,通常记为
(r, s)
。 -
编码:将签名结果
(r, s)
按照ASN.1 DER规则进行编码,形成一个签名字节串,并放入证书的signature
字段。
编码格式:
签名值 (r, s)
本身也是一个ASN.1 SEQUENCE:
asn.1
SEQUENCE { r INTEGER, s INTEGER }
当验证者(如浏览器或服务器)验证证书时,会:
-
读取
signatureAlgorithm
字段,发现OID是1.2.156.10197.1.501
,从而知道需要使用SM3和SM2进行验证。 -
从CA证书中获取CA的SM2公钥。
-
使用SM3重新计算
tbsCertificate
的哈希。 -
从待验证证书的
signature
字段中解码出(r, s)
。 -
使用SM2验证算法,用CA的公钥、计算出的SM3哈希值以及解码出的
(r, s)
来验证签名的有效性。
4. 与标准ECDSA的区别和联系
-
相似性:SM2的签名算法在数学形式上与ECDSA非常相似,都是基于椭圆曲线离散对数问题。
-
差异性:SM2在细节上做了增强,最主要的一点是它在签名和验证过程中包含了用户ID和公钥的哈希值,这提供了更强的安全性,可以抵抗某些类型的攻击(如密钥替换攻击)。这也是为什么它需要一个独立的、与普通ECDSA不同的OID。
-
对应关系:
-
国际标准:
ecdsa-with-SHA256
(OID: 1.2.840.10045.4.3.2) -
中国国密:
sm2sign-with-sm3
(OID: 1.2.156.10197.1.501)
-
总结
项目 | 解析结果 |
---|---|
OID | 1.2.156.10197.1.501 |
算法名称 | sm2sign-with-sm3 |
含义 | 使用SM3哈希算法和SM2椭圆曲线签名算法 |
标准来源 | 中国国家密码管理局(OSCCA)GM/T 系列标准 |
参数 | 通常为 NULL 或省略,默认使用SM2曲线 sm2p256v1 (OID: 1.2.156.10197.1.301) |
主要应用 | 中国国密SSL/TLS证书、文档签名、身份认证等 |
当你在一张X.509证书中看到这个OID时,你就可以确信这是一张遵循中国国密标准的 SM2 证书。