GB/T 35275-2026 与 GM/T 0010-2023 对比

GB/T 35275-2026 并不是形式上"代替 GM/T 0010-2023"。GB/T 35275-2026 的前言明确写的是"代替 GB/T 35275-2017";而 GM/T 0010-2023 是另一条密码行业标准编号体系。

但从内容上看,两者高度重合,都是在规定 SM2 加密、签名、数字信封等消息的 ASN.1 封装 。所以从工程实现角度,完全可以把GB/T 35275-2026 看成一套更新、更偏通用 PKI/CMS 风格的消息格式方案来和 0010-2023 对比。

我逐项比下来,变化还挺大。最核心的可以概括成:

GB/T 35275-2026 弱化/取消了 GM/T 0010-2023 中的"隐式证书专用体系",同时新增摘要消息、鉴别数字信封,修改 SignedData/SignerInfo 结构,补充明确的签名计算规则,并把 EnvelopedData、EncryptedData、SignerInfo 等关键结构升级到 version 2。


1. 最大变化:取消了"隐式证书专用消息格式"

这个是两份标准最明显的架构差异。

GM/T 0010-2023 一共定义了普通消息类型和隐式证书专用类型

它的 OID 体系包括:

复制代码
data
signedData
envelopedData
signedAndEnvelopedData
encryptedData
keyAgreementInfo

imcSignedData
imcEnvelopedData
imcSignedAndEnvelopedData

其中 .7.8.9 专门留给:

复制代码
1.2.156.10197.6.1.4.2.7  imcSignedData
1.2.156.10197.6.1.4.2.8  imcEnvelopedData
1.2.156.10197.6.1.4.2.9  imcSignedAndEnvelopedData

而且 GM/T 0010-2023 整整有一个规范性附录 B《SM2 隐式证书的加密签名消息语法》,里面单独定义:

复制代码
ImcSignedData
ImcSignerInfo
ImcEnvelopedData
ImcRecipientInfo
ImcSignedAndEnvelopedData

例如 ImcSignedData 使用:

复制代码
certificates  ImcCertificates
crls          ImcCertificateRevocationLists
signerInfos   ImcSignerInfos

其中隐式证书的 signer 不是普通:

复制代码
issuerAndSerialNumber

而是:

复制代码
sid CertificateId

也就是通过隐式证书 Hash 来识别签名者。


到了 GB/T 35275-2026,这套体系没了。

35275 只定义 8 类:

复制代码
Data
SignedData
EnvelopedData
SignedAndEnvelopedData
EncryptedData
KeyAgreementInfo
DigestedData
AuthEnvelopedData

新的 OID 分配变成:

复制代码
.1   Data
.2   SignedData
.3   EnvelopedData
.4   SignedAndEnvelopedData
.5   EncryptedData
.6   KeyAgreementInfo

.10  DigestedData
.11  AuthEnvelopedData

也就是说:

复制代码
.7  imcSignedData
.8  imcEnvelopedData
.9  imcSignedAndEnvelopedData

在 35275-2026 中不再作为消息类型出现。

这个变化很值得注意

可以画成:

复制代码
GM/T 0010-2023

普通证书体系
├─ signedData
├─ envelopedData
└─ signedAndEnvelopedData

隐式证书体系
├─ imcSignedData        .7
├─ imcEnvelopedData     .8
└─ imcSignedAndEnvelopedData .9

变成:

复制代码
GB/T 35275-2026

统一消息体系
├─ SignedData
├─ EnvelopedData
├─ SignedAndEnvelopedData
├─ DigestedData         .10    ← 新
└─ AuthEnvelopedData    .11    ← 新

所以如果你在做格式识别:

看到 OID 尾号 .7/.8/.9,应该考虑 GM/T 0010-2023 隐式证书消息,而不能按 GB/T 35275-2026 解析。


2. 新增 DigestedData------终于正式把"摘要消息"定义进来了

这是 35275 一个非常明显的补全。

GM/T 0010-2023 中虽然出现了 digestedData 这个名字,例如说:

复制代码
EnvelopedData 可以封装:
data
digestedData
signedData

但是 0010 本身没有独立章节定义 DigestedData 数据结构,也没有给它分配自己的消息类型 OID。

而 35275-2026 正式增加:

复制代码
DigestedData ::= SEQUENCE {
    version             Version,
    digestAlgorithm     DigestAlgorithmIdentifier,
    encapContentInfo    EncapsulatedContentInfo,
    digest              Digest
}

Digest ::= OCTET STRING

并分配:

复制代码
1.2.156.10197.6.1.4.2.10

所以这是一个很实质性的完善:

复制代码
GM/T 0010
    提到了 digestedData
    ↓
    但没有完整定义

GB/T 35275
    ↓
正式定义 DigestedData
    ↓
version
digestAlgorithm
encapContentInfo
digest

3. 新增 AuthEnvelopedData------引入"带鉴别的数字信封"

这个是 35275-2026 在安全能力上的大升级。

GM/T 0010-2023 没有 AuthEnvelopedData

35275 新增:

复制代码
AuthEnvelopedData ::= SEQUENCE {
    version,
    recipientInfos,
    authEncryptedContentInfo,
    authAttrs,
    mac,
    unauthAttrs
}

也就是不仅有:

复制代码
机密性 Confidentiality

还有:

复制代码
完整性 / 鉴别 Integrity + Authentication

35275 对它的描述就是同时提供机密性和完整性

并且明确支持:

复制代码
SM4-CCM
SM4-GCM

同时规定:

复制代码
CCMParameters {
    sm4-nonce
    sm4-ICVlen
}

GCMParameters {
    sm4-nonce
    sm4-ICVlen
}

其中 ICVlen 就是 Tag 长度。

这一点从工程上很重要:

0010 的数字信封

主要是:

复制代码
SM2
 ↓
保护会话密钥

SM4等
 ↓
加密业务数据

35275 新增的 AuthEnvelopedData

则可以:

复制代码
SM2
 ↓
保护会话密钥

SM4-GCM / SM4-CCM
 ↓
密文 + Tag
 ↓
同时保证机密性 + 完整性

所以 35275 明显把现代 AEAD 机制纳入消息格式体系了。


4. SignedData 的内容封装方式发生了明显变化

这是实现时非常容易不兼容的地方。

GM/T 0010-2023

SignedData:

复制代码
SignedData ::= SEQUENCE {
    version,
    digestAlgorithms,
    contentInfo,
    certificates,
    crls,
    signerInfos
}

其中:

复制代码
contentInfo ContentInfo

ContentInfo 是:

复制代码
ContentInfo ::= SEQUENCE {
    contentType ContentType,
    content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL
}

GB/T 35275-2026

改成:

复制代码
SignedData ::= SEQUENCE {
    version,
    digestAlgorithms,
    encapContentInfo,
    certificates,
    crls,
    signerInfos
}

其中:

复制代码
EncapsulatedContentInfo ::= SEQUENCE {
    eContentType ContentType,
    eContent [0] EXPLICIT OCTET STRING OPTIONAL
}

所以这是:

复制代码
GM/T 0010

contentInfo
└─ content ANY

变成:

复制代码
GB/T 35275

encapContentInfo
├─ eContentType
└─ eContent OCTET STRING

这是一个挺重要的规范化。

0010 的:

复制代码
ANY DEFINED BY contentType

类型比较开放;

35275 收敛为:

复制代码
OCTET STRING

格式更明确,也更方便统一做 DER/CMS 类消息解析。


5. SignerInfo 字段名称和语义全面规范化

两边的结构其实"长得很像",但名称发生了明显变化。

GM/T 0010

复制代码
SignerInfo ::= SEQUENCE {
    version,
    issuerAndSerialNumber,
    digestAlgorithm,

    authenticatedAttributes [0] OPTIONAL,

    digestEncryptionAlgorithm,
    encryptedDigest,

    unauthenticatedAttributes [1] OPTIONAL
}

GB/T 35275

改成:

复制代码
SignerInfo ::= SEQUENCE {
    version,
    issuerAndSerialNumber,
    digestAlgorithm,

    signedAttrs [0] OPTIONAL,

    signatureAlgorithm,
    signature,

    unsignedAttrs [1] OPTIONAL
}

对应关系特别清楚:

GM/T 0010-2023 GB/T 35275-2026
authenticatedAttributes signedAttrs
digestEncryptionAlgorithm signatureAlgorithm
encryptedDigest signature
unauthenticatedAttributes unsignedAttrs

我认为这里属于 "术语纠正 + 数据模型现代化"

比如:

复制代码
encryptedDigest

这个名字容易让人误以为:

对摘要值做了一次"加密"。

而 SM2 实际进行的是:

复制代码
数字签名

所以 35275 直接改成:

复制代码
signature
signatureAlgorithm

语义明显更准确。


6. SignerInfo 的 version 从 1 升到了 2

这个是字节级格式兼容时必须关注的变化。

GM/T 0010-2023 的 SignerInfo

复制代码
version = 1

从其表 3 可以看到。

GB/T 35275-2026:

复制代码
SignerInfo.version = 2

所以解析器不能写死:

复制代码
if (version != 1)
    error;

如果要同时支持两套标准,建议:

复制代码
SignerInfo

version == 1
    → 倾向 GM/T 0010 格式

version == 2
    → 倾向 GB/T 35275-2026 格式

当然实际识别还应该结合整体 ASN.1 和 OID,不能单凭 version。


7. 35275 新增了非常关键的"签名计算规则"

这个我认为是 2026 版里对实际开发最有价值的更新之一。

GM/T 0010 对 authenticatedAttributes 的描述比较概括:

如果存在,该域中摘要的计算方法是对原文进行摘要计算结果。

但是很多实现中会碰到一个经典问题:

到底签 eContent,还是签 signedAttrs

签 signedAttrs 的什么编码?

35275 把这件事写得非常明确。

signedAttrs 存在

签名数据为:

复制代码
signedAttrs 的 DER 编码结果

并要求里面包含:

复制代码
messageDigestAttribute

其值:

复制代码
MessageDigest = SM3(eContent)

signedAttrs 不存在

签名数据:

复制代码
eContent 的内容本身

并明确:

不包括 DER 编码中的标签和长度。

这个区别非常关键。

也就是说:

复制代码
signedAttrs 存在:

eContent
   ↓ SM3
messageDigest
   ↓
放入 signedAttrs
   ↓ DER
DER(signedAttrs)
   ↓ SM2
signature

而:

复制代码
signedAttrs 不存在:

eContent
   ↓
SM2签名

这直接消除了很多厂商互操作时的歧义。


8. 新增 Attribute 基本类型

这也是为了配合 signedAttrsunsignedAttrsauthAttrs

35275 明确定义:

复制代码
Attribute ::= SEQUENCE {
    attrType OBJECT IDENTIFIER,
    attrValues SET OF AttributeValue
}

AttributeValue ::= ANY

GM/T 0010 虽然使用了:

复制代码
Attributes
authenticatedAttributes
unauthenticatedAttributes

但其基本消息结构定义没有像新版这样把 Attribute 本身完整纳入基本类型体系。

所以 35275 的数据模型更自洽了:

复制代码
Attribute
├─ signedAttrs
├─ unsignedAttrs
├─ authAttrs
└─ unauthAttrs

9. EnvelopedData:version 1 → version 2,并新增 unprotectedAttrs

这个也是结构级变化。

GM/T 0010

复制代码
EnvelopedData ::= SEQUENCE {
    version,
    recipientInfos,
    encryptedContentInfo
}

并且:

复制代码
version = 1

GB/T 35275

变为:

复制代码
EnvelopedData ::= SEQUENCE {
    version,
    recipientInfos,
    encryptedContentInfo,
    unprotectedAttrs [1] OPTIONAL
}

而:

复制代码
version = 2

也就是增加:

复制代码
unprotectedAttrs

允许附带:

不受加密保护的属性。

所以结构上已经不能把新版直接当旧版解析:

复制代码
0010:

SEQUENCE
├─ version 1
├─ recipientInfos
└─ encryptedContentInfo

变成:

复制代码
35275:

SEQUENCE
├─ version 2
├─ recipientInfos
├─ encryptedContentInfo
└─ unprotectedAttrs OPTIONAL

10. EncryptedData 同样 version 1 → 2,并增加 unprotectedAttrs

GM/T 0010:

复制代码
EncryptedData ::= SEQUENCE {
    version,
    encryptedContentInfo
}

且:

复制代码
version = 1

GB/T 35275:

复制代码
EncryptedData ::= SEQUENCE {
    version,
    encryptedContentInfo,
    unprotectedAttrs [1] OPTIONAL
}

且:

复制代码
version = 2

这个变化与 EnvelopedData 是一致的。


11. RecipientInfo 去掉了"SM2隐式证书公钥加密机制"

GM/T 0010 的普通 RecipientInfo 其实允许两类算法:

复制代码
SM2椭圆曲线加密算法

或

SM2隐式证书公钥加密机制

而 35275 明确写:

复制代码
keyEncryptionAlgorithm

用接收者公钥加密数据加密密钥的算法,
为 SM2 椭圆曲线加密算法

没有再写隐式证书机制。

这和前面"取消独立隐式证书消息体系"是一致的。


12. KeyAgreementInfo:userCertificate 从 OPTIONAL 变成必选

这个变化不大,但非常实质。

GM/T 0010

复制代码
KeyAgreementInfo ::= SEQUENCE {
    version,
    tempPublicKeyR,
    userCertificate Certificate OPTIONAL,
    userID
}

标准明确:

复制代码
用户证书,可选

GB/T 35275

变成:

复制代码
KeyAgreementInfo ::= SEQUENCE {
    version,
    tempPublicKeyR,
    userCertificate Certificate,
    userID
}

这里:

复制代码
userCertificate

不再 OPTIONAL

所以:

复制代码
0010:
userCertificate 可没有

35275:
userCertificate 必须存在

做 ASN.1 校验器时这条要单独改。


13. 密钥格式总体没变,但去掉了隐式证书相关内容

这一块反而变化不大。

GM/T 0010 附录 C:

复制代码
Parameters
SubjectPublicKeyInfo
ECPrivateKey

35275 附录 B:

复制代码
Parameters
SubjectPublicKeyInfo
ECPrivateKey

核心结构几乎一致。

公钥

两者都是:

复制代码
SubjectPublicKeyInfo ::= SEQUENCE {
    algorithm AlgorithmIdentifier,
    subjectPublicKey SM2PublicKey
}

私钥

都是:

复制代码
ECPrivateKey ::= SEQUENCE {
    version,
    privateKey,
    parameters OPTIONAL,
    publicKey
}

真正变化主要在算法标识引用。

GM/T 0010:

复制代码
OID → GM/T 0006

并且明确:

复制代码
SM2密码算法
SM2隐式证书公钥机制

都可以使用。

35275:

复制代码
OID → GB/T 33560

只说:

复制代码
SM2密码算法

14. 引用的基础标准整体升级到国家标准体系

GM/T 0010 主要引用:

复制代码
GM/T 0006
GM/T 0009
GM/T 0015

GMT 0010-2023 SM2密码算法加密签名消息语法规范.pdfPDF

而 35275 换成大量 GB/T:

复制代码
GB/T 20518   数字证书格式
GB/T 32905   SM3
GB/T 32918   SM2
GB/T 33560   密码应用标识
GB/T 35276   SM2密码算法使用规范
GB/T 36624   可鉴别加密机制

GBT 35275-2026 网络安全技术 SM2密码算法加密签名消息格式.pdfPDF

对应关系可以理解成:

GM/T 0010-2023 依赖 GB/T 35275-2026 依赖
GM/T 0006 密码应用标识 GB/T 33560
GM/T 0009 SM2使用规范 GB/T 35276
GM/T 0015 数字证书格式 GB/T 20518-2018
--- GB/T 36624 可鉴别加密机制

所以 35275 不只是改几个 ASN.1 字段,整个规范引用体系也在向现行国家标准体系靠拢


15. 两个标准最重要的变化汇总

我把实际开发最需要关心的整理成这张表:

项目 GM/T 0010-2023 GB/T 35275-2026 影响
普通 SignedData 修改
隐式证书 imcSignedData 删除体系
imcEnvelopedData 删除体系
imcSignedAndEnvelopedData 删除体系
DigestedData 未完整定义 新增 新增
AuthEnvelopedData 新增 重大新增
SM4-GCM/CCM 无专门格式 新增 AEAD
SignedData.contentInfo ContentInfo EncapsulatedContentInfo 结构变化
authenticatedAttributes 改为 signedAttrs 重命名/规范化
digestEncryptionAlgorithm 改为 signatureAlgorithm 语义规范
encryptedDigest 改为 signature 语义规范
unauthenticatedAttributes 改为 unsignedAttrs 规范化
SignerInfo.version 1 2 编码变化
签名计算规则 较简略 明确 DER signedAttrs/eContent 重要
EnvelopedData.version 1 2 编码变化
EnvelopedData.unprotectedAttrs 新增 结构变化
EncryptedData.version 1 2 编码变化
EncryptedData.unprotectedAttrs 新增 结构变化
KeyAgreement.userCertificate OPTIONAL 必选 兼容性变化
公钥格式 SubjectPublicKeyInfo 基本相同 小变化
私钥格式 ECPrivateKey 基本相同 小变化
密码应用OID GM/T 0006 GB/T 33560 引用升级
SM2使用规范 GM/T 0009 GB/T 35276 引用升级
证书格式 GM/T 0015 GB/T 20518 引用升级