课题研究 PKI与证书信任安全 子课题05 · 第02页 / 共8页
05子课题 · 国密SM2证书体系与信任生态

SM2/SM3/SM4算法体系与密码学基础第02页:算法体系与密码学基础

国密证书体系的密码学基座是SM算法家族:SM2(椭圆曲线公钥算法,GB/T 32918系列)提供数字签名、密钥交换与公钥加密三大功能;SM3(杂凑算法,GB/T 32905-2016)提供256比特消息摘要;SM4(分组密码,GB/T 32907-2016)提供128比特分组加密。三者组合形成TLCP/RFC 8998密码套件。本页逐层解析三大算法的机制、参数、安全性边界与实现要点,并梳理SM算法族的国际标准化进程——这是理解国密证书"签名+加密"双证书架构(第3页)与TLCP协议设计(第4页)的密码学前提。

SM2SM3SM4GB/T 32918系列椭圆曲线离散对数Z值C1C3C2ISO/IEC 14888-3研究状态:研究中
所属专题互联网基础设施安全 › PKI与证书信任安全
目标受众密码应用开发人员、安全架构师、密评从业人员、安全研究人员
全文结构8页:总览 → 算法体系 → 证书架构 → TLCP协议 → 认证治理 → 改造实践 → 密评合规 → 防护展望

01 · SM2椭圆曲线公钥算法详解

1.1 算法定位与标准族

SM2是基于椭圆曲线离散对数问题(ECDLP)的公钥密码算法,其推荐参数定义在256比特素域(GF(p))上,整体安全强度约128比特。SM2于2010年底由国家密码管理局发布,2012年成为密码行业标准GM/T 0003-2012,2016—2017年转化为国家标准系列GB/T 32918(五个部分):第1部分总则(GB/T 32918.1-2016,2016-08-29发布、2017-03-01实施)、第2部分数字签名算法、第3部分密钥交换协议、第4部分公钥加密算法、第5部分参数定义(GB/T 32918.5-2017)。同一套曲线参数支撑签名、密钥交换、加密三大功能,这是SM2区别于"签名一套参数、加密一套参数"传统做法的工程优势。

1.2 SM2数字签名算法(GB/T 32918.2)

SM2签名采用ECDSA类似的随机数参与结构,但引入了两个显著设计特征:

  • Z值预处理(用户标识绑定):签名前先计算 Z = SM3(ENTL‖ID‖a‖b‖xG‖yG‖xA‖yA),即把签名者身份标识(默认ID为1234567812345678的ASCII码)、椭圆曲线参数与签名者公钥一次性杂凑进消息预处理值——天然实现"签名绑定特定主体与特定参数集",可抵抗跨参数集/跨主体的签名移植攻击。待签名消息实际参与运算的是 SM3(Z‖M)。
  • 签名方程与验证方程:签名产生 (r, s) 两个256比特整数;验证时通过椭圆曲线多倍点运算恢复点并校验 r 的一致性。签名值为64字节(r‖s拼接),显著小于RSA-2048签名的256字节。
SM2签名消息预处理(Z值计算)结构示意
Z = SM3( ENTL ‖ ID ‖ a ‖ b ‖ xG ‖ yG ‖ xA ‖ yA )
    │      │     │    │   │    │    │    └─ 签名者公钥y坐标
    │      │     │    │   │    │    └────── 签名者公钥x坐标
    │      │     │    │   │    └─────────── 基点G的y坐标
    │      │     │    │   └──────────────── 基点G的x坐标
    │      │     │    └──────────────────── 曲线方程系数b
    │      │     └────────────────────────── 曲线方程系数a
    │      └──────────────────────────────── 用户标识(默认1234567812345678)
    └─────────────────────────────────────── ID比特长度的2字节表示
e = SM3(Z ‖ M)   ← 实际参与签名的消息摘要

1.3 SM2密钥交换协议(GB/T 32918.3)

SM2密钥交换是1轮(两次消息传递)的双方密钥协商协议,结合静态密钥对(长期身份密钥)与临时密钥对(会话密钥),协商结果同时包含会话密钥与对双方身份的隐式认证。临时密钥对的引入使协议在双方诚实执行时具备前向安全性:长期私钥泄露不直接暴露已协商的会话密钥。该协议用于TLCP握手(第4页)中的密钥协商过程,是国密传输加密的密钥来源。

1.4 SM2公钥加密算法(GB/T 32918.4)

SM2加密是ElGamal型椭圆曲线公钥加密:密文结构为 C1‖C3‖C2——C1为随机产生的椭圆曲线点(65字节未压缩),C3为校验值 SM3(x2‖M‖y2)(32字节,用于完整性校验),C2为与明文等长的异或密文。注意GB/T 32918.4-2016规定的标准顺序为C1C3C2,而早期部分实现曾采用C1C2C3顺序,互操作时须严格对齐标准,否则校验失败——这是国密互联互通中著名的"坑点"之一。加密能力主要用于密钥封装与数字信封场景,大数据量加密仍以"SM2封装会话密钥 + SM4加密数据"的混合模式为主。

工程提示:SM2公钥有两种编码格式——未压缩(0x04‖x‖y,65字节)与压缩(0x02/0x03‖x,33字节);X.509国密证书中的SubjectPublicKeyInfo采用BIT STRING封装,互操作时应确认双方对点编码、C1C3C2顺序、Z值ID默认值的约定一致,这三项是国密联调失败的高频根因。

02 · SM3杂凑算法

2.1 算法结构

SM3(GB/T 32905-2016,行标GM/T 0004-2012)是输出256比特的密码杂凑算法,采用Merkle–Damgård迭代结构:消息按512比特分组,经消息扩展(每分组扩展为132个32比特字)后执行64轮压缩函数。压缩函数为非对称Feistel-like结构,使用P0/P1置换、布尔函数FF/GG与循环移位组合,设计上吸收了SHA-2家族的经验并对消息扩展与压缩路径作了差异化设计。

2.2 功能定位与用量

用途典型调用方式所在标准场景
签名预处理Z值计算、e=SM3(Z‖M)GB/T 32918.2 数字签名
密钥派生握手密钥块派生、HMAC-SM3派生GB/T 38636-2020 TLCP密钥计算
消息认证HMAC-SM3、PRF-Master-SecretTLCP记录层完整性
完整性校验SM2加密C3校验值GB/T 32918.4 公钥加密
通用摘要指纹、Merkle树、数据归档校验各类密码应用

SM3与SHA-256同为256比特输出、相近安全量级(约128比特抗碰撞),但压缩函数与消息扩展设计不同,二者输出不兼容。互操作注意:部分协议场景(如早期TLCP实现)存在SHA-256与SM3混用的过渡形态,改造审计时应确认摘要算法的全链路一致性。

2.3 国际标准化

SM3已作为ISO/IEC 10118-3:2018《信息安全技术 杂凑函数 第3部分:专用杂凑函数》的一部分发布,成为国际标准杂凑函数之一。

03 · SM4分组密码算法

3.1 算法结构

SM4(GB/T 32907-2016,行标GM/T 0002-2012)是分组长度为128比特、密钥长度128比特的分组密码,采用32轮非平衡Feistel结构:轮函数由S盒代换、线性变换L与轮密钥异或构成,加解密使用同一结构(轮密钥逆序即可解密,属对合性设计)。S盒为8进8出固定置换,其设计具有抗差分/线性分析的公开分析基础。

3.2 工作模式

模式特性适用场景
ECB无IV、可并行、泄露明文统计模式仅用于单分组(如密钥加密密钥场景),大数据禁用
CBC需IV、串行、需填充;可鉴别加密变体结合MACTLCP早期套件ECC_SM4_SM3的默认模式
CTR/GCM/CCMCTR可并行无填充;GCM/CCM提供AEAD可鉴别加密TLCP新版套件与RFC 8998(TLS_SM4_GCM_SM3等)

SM4的算法性能在通用CPU上经SIMD优化后可达较高吞吐,亦有多项硬件实现(密码卡、服务器密码机内置SM4引擎)。实现合规注意:商用密码产品中的SM4实现须通过国家密码管理部门的检测认证,自研实现用于生产系统前应评估合规路径(详见第7页密评)。

04 · 算法组合与密码套件

4.1 国密套件命名规则

国密传输套件沿用国际惯例以"密钥交换_加密_杂凑"三段命名。TLCP(GB/T 38636-2020)定义的套件族包括基于ECC(SM2证书)与IBC(SM9标识)两类认证模式;IETF RFC 8998则在TLS 1.3框架下定义了两个国密套件:

套件名称组成所在协议
ECC_SM4_SM3SM2密钥交换 + SM4-CBC加密 + SM3/HMAC-SM3完整性(TLCP中可作CBC-SM3套件)GB/T 38636-2020 TLCP
ECDHE_SM4_SM3SM2临时密钥交换(前向安全)+ SM4 + SM3GB/T 38636-2020 TLCP
IBC_SM4_SM3SM9标识密钥交换 + SM4 + SM3GB/T 38636-2020 TLCP(IBC模式)
TLS_SM4_GCM_SM30x00,0xC6SM2密钥交换 + SM4-GCM可鉴别加密 + SM3 PRFRFC 8998(TLS 1.3)
TLS_SM4_CCM_SM30x00,0xC7SM2密钥交换 + SM4-CCM可鉴别加密 + SM3 PRFRFC 8998(TLS 1.3)

在RFC 8998中,SM2曲线作为命名曲线curveSM2(0x0029)注册,签名方案sm2sig_sm3(0x0708)表示"SM3的SM2签名"。这与GB/T 33560-2017《密码应用标识规范》定义的OID体系并行:SM2算法OID为1.2.156.10197.1.301,SM3为1.2.156.10197.1.401,sm2-with-sm3签名算法为1.2.156.10197.1.501。

4.2 典型混合加密流程

SM2+SM4混合加密(数字信封)流程
会话密钥由SM2封装、批量数据由SM4加密——国密应用的主流数据保护模式
说明:本流程为方法示意;SM2加密私钥的托管关系(KM中心)是双证书架构在应用层的投射(详见第3页)。

05 · 安全性分析与实现要点

5.1 安全强度对标

256位
SM2密钥/曲线尺度
256比特素域,约128比特安全强度,与ECC P-256、AES-128同量级
64B
SM2签名长度
r‖s各32字节;对比RSA-2048签名为256字节,带宽与存储优势显著
128位
SM4密钥/分组
32轮非平衡Feistel;与AES-128同为128比特安全量级
64轮
SM3压缩轮数
512比特分组、256比特输出,与SHA-256安全目标相近

5.2 实现层风险清单

风险点机理防护要点
随机数重用SM2签名随机数k重用(与ECDSA nonce重用同理)可通过两组签名方程解出私钥——2010年代多起区块链钱包与固件事件已在国际算法上实证该模式的灾难性使用经检测的密码模块生成k;禁止软件伪随机直接参与签名;关键系统使用硬件随机源
侧信道泄露标量乘法的时间/功耗/缓存差异可泄漏标量比特,逐步还原私钥常数时间实现、随机化投影坐标、密码卡/服务器密码机托管运算
实现互操作偏差C1C2C3/C1C3C2顺序混淆、Z值ID约定不一致、点压缩格式不一致导致校验失败或更严重的降级处理以GB/T 32918.4-2016(C1C3C2)为准冻结实现基线;建立联调用例集
算法降级混用过渡期系统同时存在RSA证书与SM2证书,配置错误可能使敏感通道静默退回国际算法或非合规套件配置基线审计+密评核查(详见第7页);网关层强制策略白名单
弱随机密钥生成低熵种子生成的SM2私钥可被暴力搜索(如固件默认种子)密钥生成须经合规密码模块;禁止跨环境复用同一密钥对

核心论断:SM算法族的公开密码分析至今未发现实用化结构性破译路径,其安全争议主要集中在"椭圆曲线参数的生成可验证性"与"实现质量"两个维度——这与国际ECC面临的审视完全同构。对使用者而言,真正的安全水位由密钥生成环境、随机数质量、实现合规性、密钥管理制度决定,而非算法名录本身。任何"用了国密就安全"或"国密算法已被破解"的两极说法都不符合事实。

5.3 开源与商用实现生态

  • OpenSSL:自1.1.1版本起内置SM2/SM3/SM4算法支持,为国际生态提供国密算法底座(但协议层国密套件需Tongsuo等分支)。
  • Tongsuo(铜锁):蚂蚁集团开源的OpenSSL衍生项目,提供NTLS/TLCP双证书协议栈与RFC 8998套件支持,是当前国密TLS服务端改造的主流开源选项之一。
  • GmSSL:北京大学牵头的国密开源实现,支持GB/T 38636-2020套件与多种国密协议;另有TASSL(腾讯)、gmgo(Go语言国密栈)等。
  • Bouncy Castle:Java生态广泛使用的密码库,提供SM2/SM3/SM4与国密X.509扩展支持,常用于电子签章与PKI工具开发。
  • 商用密码产品:SSL VPN安全网关、服务器密码机、签名验签服务器等须经国家密码管理部门检测认证(商用密码产品认证),选型应以合规目录为准(第5、7页)。

06 · SM算法族国际标准化进程

SM算法族的国际标准化是"算法层互认"的重要里程碑,但其边界须准确理解(算法标准化≠信任互认,详见第1页误区辨析):

算法国际标准说明
ZUC祖冲之3GPP 128-EEA3/EIA3;ISO/IEC 18033-4/AMD1:2020首个进入国际主流通信标准的国产密码算法,用于4G/5G空口
SM2ISO/IEC 14888-3:2018(数字签名机制)2017年11月ISO/IEC SC27会议通过,与SM9签名机制一并纳入;SM9密钥交换另入ISO/IEC 11770-3
SM3ISO/IEC 10118-3:2018作为专用杂凑函数成为国际标准杂凑算法之一
SM4ISO/IEC 18033-3/AMD1:2021作为分组密码算法补篇纳入国际加密算法标准
SM套件IETF RFC 8998(2021年3月)TLS 1.3框架下的国密密码套件,实现协议层国际对接

研究视角:算法机制的国际标准化使SM算法可以出现在任何遵循国际标准的协议实现中(如支持curveSM2的TLS 1.3栈);但证书信任链的跨境互认涉及监管制度、法律责任与审计体系衔接,远慢于算法层——香港与内地自2009年起已开展粤港电子签名证书互认试点(《粤港两地电子签名证书互认办法》),是观察制度层互认路径的窗口(详见第5、8页)。

07 · SM2推荐参数与安全量级速览

7.1 推荐曲线参数要点(GB/T 32918.5-2017)

SM2推荐参数定义在256比特素域Fp上:大素数p、曲线方程y²=x³+ax+b的系数a与b、基点G=(xG,yG)、G的阶n(约256比特素数)以及余因子h=1,均以十六进制在标准正文中给出。余因子h=1是重要工程性质:基点阶为素数且与曲线阶相等,不存在有效小子群,可免疫小子群攻击类缺陷。工程实现应直接引用GB/T 32918.5-2017标准附录中的参数常量,禁止自行构造或修改参数。

7.2 与主流公钥算法安全量级对标

算法/参数集约安全量级签名尺寸公钥尺寸(未压缩)说明
SM2-256约128比特64字节(r‖s)65字节(0x04‖x‖y)国密推荐曲线;Z值机制绑定主体身份
ECDSA P-256约128比特约64~72字节(DER编码)65字节国际Web PKI主流;随机数nonce重用同样致命
Ed25519约128比特64字节32字节确定性签名,免疫nonce重用
RSA-2048约112比特256字节256字节NIST估算已低于128比特目标量级
RSA-3072约128比特384字节384字节与SM2-256同量级但带宽/验签成本显著更高

注:安全量级为密码学界通行的近似估算(NIST SP 800-57等公开资料口径);尺寸为典型编码值。

选型视角:SM2-256与ECDSA P-256在纯密码学强度上同量级,SM2的工程差异点在Z值身份绑定(利于多证书体系防混用)与双证书架构配套;签名短、验签快的特性使其在高频验签场景(网关、API)相对RSA有明确性能优势。任何"算法碾压"或"算法已破"的表述都不符合公开密码分析现状。

本节参考来源(本页)

以下均为真实可查的权威来源,用于支撑本页算法机制与标准化事实。

[1]

GB/T 32918.1-2016~GB/T 32918.5-2017《信息安全技术 SM2椭圆曲线公钥密码算法》系列:国家标准全文公开系统 openstd.samr.gov.cn。

[2]

GB/T 32905-2016《信息安全技术 SM3密码杂凑算法》;GB/T 32907-2016《信息安全技术 SM4分组密码算法》:国家标准全文公开系统 openstd.samr.gov.cn。

[3]

IETF RFC 8998《ShangMi (SM) Cipher Suites for TLS 1.3》(2021年3月):rfc-editor.org/rfc/rfc8998(含curveSM2命名曲线0x0029与套件定义)。

[4]

ISO/IEC 14888-3:2018、ISO/IEC 10118-3:2018、ISO/IEC 18033-3/AMD1:2021 标准目录信息:iso.org。

[5]

GB/T 33560-2017《信息安全技术 密码应用标识规范》(算法OID与32位标识体系):国家标准全文公开系统。

[6]

Tongsuo(铜锁)开源项目文档:github.com/Tongsuo-Project/Tongsuo;GmSSL项目:github.com/guanzhi/GmSSL;OpenSSL国密算法支持(1.1.1起):openssl.org。

[7]

中国密码学会密评联委会《信息系统密码应用高风险判定指引》(证书与密钥管理相关判定项)。