证书签名算法OID格式解析

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会出现在两个关键位置:

  1. tbsCertificate.signature (证书主体部分的签名算法标识)

  2. 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.501parameters 字段在绝大多数实际应用中是被省略或设置为 NULL 的。 这是因为SM2算法所使用的默认椭圆曲线已经被隐含地定义在标准中。

默认曲线: SM2算法标准(GM/T 0003-2012)定义了一条特定的256位椭圆曲线,称为 sm2p256v1。它的曲线参数也是通过一个标准的OID 1.2.156.10197.1.301 来标识的。在证书的公钥信息字段 (SubjectPublicKeyInfo) 中,你会找到这个曲线OID,明确指出了公钥是基于哪条曲线生成的。


3. 签名生成与验证流程

当CA使用这个算法对证书进行签名时,流程如下:

  1. 哈希计算:使用 SM3 哈希算法对需要签名的证书部分(即 tbsCertificate 结构)计算哈希值,得到一个256位(32字节)的摘要。

  2. 签名计算:使用CA的 SM2 私钥对上一步得到的SM3摘要进行数字签名。SM2签名算法本身会输出两个大整数,通常记为 (r, s)

  3. 编码:将签名结果 (r, s) 按照ASN.1 DER规则进行编码,形成一个签名字节串,并放入证书的 signature 字段。

编码格式
签名值 (r, s) 本身也是一个ASN.1 SEQUENCE:

asn.1

SEQUENCE {
    r INTEGER,
    s INTEGER
}

当验证者(如浏览器或服务器)验证证书时,会:

  1. 读取 signatureAlgorithm 字段,发现OID是 1.2.156.10197.1.501,从而知道需要使用SM3和SM2进行验证。

  2. 从CA证书中获取CA的SM2公钥。

  3. 使用SM3重新计算 tbsCertificate 的哈希。

  4. 从待验证证书的 signature 字段中解码出 (r, s)

  5. 使用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)

总结

项目解析结果
OID1.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 证书

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

courniche

鼓励就是动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值