首页/安全/加密与证书速查/SM4 分组密码(国密)
加密算法基础95 条

SM4 分组密码(国密)

中国商用密码标准中的分组算法(GB/T 32907-2016):128 位分组与 128 位密钥、32 轮迭代结构,应用于 TLCP、WAPI 与国产密码产品。

加密与证书速查安全更新于 2026-10-13

SM4 是什么

SM4 是中国商用密码标准中的对称分组算法,标准号 GB/T 32907-2016(早期密码行业标准 GM/T 0002-2012):分组 128 位、密钥 128 位、32 轮迭代,采用与 AES 类似的 SPN 结构但参数、S 盒与轮函数完全不同,两者不可互相替代。它主要出现在 TLCP 传输加密、WAPI 无线认证与国产密码设备里。

基本信息

标准GB/T 32907-2016 / GM/T 0002-2012
分组长度128 位(16 字节)
密钥长度128 位(仅一种)
轮数32 轮
结构SPN,轮函数含非线性变换与线性变换
工作模式ECB/CBC/CTR/GCM 等,国密协议多用 GCM 或 CBC
常见载体OpenSSL(1.1.1 起)、国密网关、密码机、国产中间件

典型使用场景

  • TLCP 传输加密:国密站点与网关之间以 SM4-GCM 或 SM4-CBC 保护数据面
  • 国密改造项目:金融、政务系统按合规要求替换 AES/SHA 系列算法
  • WAPI 无线认证:终端与接入点之间的数据加密
  • 国产密码设备:密码机与加密卡对外提供 SM4 加解密接口
  • 数据静态加密:部分国产数据库与存储产品以 SM4 做透明加密
  • 协议与设备互通测试:验证对端实现是否符合标准测试向量

OpenSSL 使用示例

OpenSSL 使用示例
# 口令派生密钥后加密文件,salt 与迭代次数随文件保存
openssl enc -sm4-cbc -pbkdf2 -salt -in data.txt -out data.sm4
# 解密(参数需与加密一致)
openssl enc -d -sm4-cbc -pbkdf2 -in data.sm4 -out data.txt
# 显式指定 16 字节密钥与 IV,便于与国密设备对接
openssl enc -sm4-cbc -K 0123456789abcdeffedcba9876543210 -iv 000102030405060708090a0b0c0d0e0f -in data.txt -out data2.sm4
# 测量本机 SM4 吞吐,判断是否需要硬件密码模块
openssl speed -elapsed -evp sm4-cbc
# 确认当前 OpenSSL 是否提供 SM4(老版本可能缺失)
openssl list -cipher-algorithms | grep -i sm4

SM4 与 AES 对照

维度SM4AES
标准来源GB/T 32907(中国商用密码)FIPS 197(美国 NIST)
分组 / 密钥128 位 / 仅 128 位128 位 / 128、192、256 位
轮数32 轮10、12、14 轮
典型协议TLCP、WAPITLS、IPsec、WPA2/3
合规场景国内等保与国密改造项目国际通用与出口场景
硬件加速依赖国产密码模块或软件优化x86 AES-NI、ARM 密码扩展广泛可用
TLCP(GB/T 38636)中 SM4 与 GCM 组成认证加密套件(如 ECC_SM4_GCM_SM3),一次完成加密与完整性校验;单独使用 SM4-CBC 仍要面对填充与完整性风险,做法与 AES-CBC 相同:随机 IV、加密后追加 MAC、统一错误响应。
部分老版本 OpenSSL 与第三方库对 SM4 的支持只覆盖 ECB/CBC,缺少 GCM 或缺少 HMAC-SM3 优化。集成前先确认库版本与 provider 配置,不要假设「有 SM4 就有全套国密能力」。
国密项目落地不只是换算法:证书体系(SM2 双证书)、协议栈(TLCP 版本)、随机数源与密码模块认证都要同步评估。跨厂商互通问题多数出在这些外围环节,而不是 SM4 本身。

TLCP 常见套件

套件组成说明
ECC_SM4_GCM_SM3SM2 签名证书 + SM4-GCM + SM3无前向保密,兼容性较好
ECDHE_SM4_GCM_SM3临时密钥交换 + SM4-GCM + SM3具备前向保密,新系统优先选用
ECC_SM4_CBC_SM3SM4-CBC + SM3 校验兼容老设备,需注意 CBC 相关风险
ECDHE_SM4_CBC_SM3临时密钥交换 + SM4-CBC + SM3兼容与安全折中,条件允许时仍优先 GCM
国密站点通常使用双证书体系:一张签名证书用于握手认证,一张加密证书用于密钥交换。部署时要确认两套证书都在有效期内、都由对端信任的 CA 签发,否则会出现在普通浏览器正常、国密通道却握手失败的割裂现象。
SM4 在缺少专用指令的通用 CPU 上通常慢于有 AES-NI 加速的 AES。高吞吐场景应评估密码卡或国密网关卸载,或选择带 SM4 硬件扩展的国产处理器;不要直接套用 AES 的吞吐数据做容量规划。

易错点

  • 把 SM4 与 SM3 混为一谈:SM4 是分组加密算法,SM3 才是哈希算法,两者角色不同,接口与密钥长度也完全不同
  • 在协议对接时假设双方默认套件一致:TLCP 的具体套件与版本需显式约定,单方向配置变更会导致握手失败
  • 用 SM4-ECB 处理结构化数据:与 AES-ECB 一样会泄漏重复块结构,应使用 GCM 或 CBC+HMAC
  • 忽视库与设备的能力差异:某些实现只支持 CBC,贸然启用 GCM 会报未知算法或静默降级
  • 认为换成国密算法就自动满足合规:等保与商用密码应用安全性评估还要求密钥管理、设备认证与审计链路齐全

数据来源与参考

  • GB/T 32907-2016(SM4 分组密码算法)
  • GB/T 38636-2020(传输层密码协议 TLCP)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌