首页/安全/等保与合规速查/SM3 密码杂凑算法:摘要与完整性
密码与认证合规50 条

SM3 密码杂凑算法:摘要与完整性

SM3 是我国密码杂凑算法(GB/T 32905-2016):输出 256 位摘要,用于数字签名、消息认证与完整性校验,可与 HMAC 组合用于口令与数据保护。

等保与合规速查安全更新于 2026-10-13

SM3 是什么

SM3 是我国自主设计的密码杂凑(哈希)算法,标准编号 GB/T 32905-2016,输出 256 位(32 字节)摘要。它把任意长度数据压缩成固定长度指纹,具备雪崩效应与抗碰撞设计目标,用于数字签名中的摘要计算、消息认证码、口令加盐哈希与文件完整性校验。杂凑不可逆,不能当加密算法用。

基本信息

标准GB/T 32905-2016 信息安全技术 SM3 密码杂凑算法
输出长度256 位(32 字节)摘要
特性雪崩效应、抗碰撞设计目标,与主流杂凑算法同类定位
常见用法签名摘要、口令加盐哈希、数据完整性校验、HMAC 构造
常用实现OpenSSL 的 sm3 摘要、GmSSL 工具、国产密码库与密码机
合规场景密评与等保中涉及完整性保护的实现方式之一

典型使用场景

  • 验签前对报文计算摘要,作为签名与验签流程的输入
  • 文件与固件发布时提供摘要值,接收方校验下载完整性
  • 与 HMAC 组合做接口鉴权,防止报文被篡改
  • 口令存储中作为哈希算法之一,需配合随机盐与迭代放大计算成本
  • 等保与密评中说明完整性保护机制的实现依据

命令行计算 SM3

命令行计算 SM3
echo -n "hello" | openssl dgst -sm3          # OpenSSL 支持 sm3 时可用
# 或用 GmSSL:echo -n hello | gmssl sm3
gmssl sm3 -in firmware.bin -out firmware.sm3  # 对文件求摘要并留存
openssl dgst -sm3 -hmac "secret-key" msg.txt  # HMAC-SM3:报文认证

使用位置与注意点

使用位置正确做法常见错误
签名摘要对报文求 SM3 后再签名,验签侧同样先求摘要签名与验签所用摘要不一致导致验签失败
完整性校验摘要值与发布物分开存放并告警比对摘要与文件放在同一下载目录,可被同步替换
口令哈希加随机盐、使用可迭代的慢哈希构造裸 SM3 迭代次数过少,可被暴力枚举
接口鉴权HMAC-SM3 带密钥,服务端校验时间戳与随机数只对部分字段计算摘要,字段可被追加篡改
摘要值一般用十六进制表示,长度固定 64 个字符;比对时建议做长度与格式校验,避免因截断比较引入绕过。
SM3 与 SM2、SM4 分工不同:SM2 用于签名与非对称加密,SM4 用于对称加密,SM3 只做摘要与完整性,实现时不要互相替代。

易错点

  • 口令直接裸 SM3:应加盐并使用可迭代的慢哈希构造,否则拖库后离线破解速度极快
  • 把哈希当加密:摘要不可逆,不能用于需要还原的数据保护
  • 摘要与原始文件同目录存放:校验值可被一并替换,完整性校验失去意义
  • 验签前未校验摘要与签名的一致性要求:时间戳、序列号等字段缺失会导致重放攻击可行

数据来源与参考

  • GB/T 32905-2016《信息安全技术 SM3 密码杂凑算法》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌