SM3(密码杂凑算法)

SM3 密码杂凑算法
设计者
中国国家密码管理局
首次发布
2010年
类别
密码学哈希函数
输出长度
256 bit (32 字节)
分组大小
512 bit
结构
Merkle-Damgård
轮数
64
速度
~1.5 GB/s
标准
GM/T 0004-2012
GB/T 32905-2016
ISO/IEC 10118-3:2018
安全状态
安全

SM3是中国国家密码管理局于2010年发布的密码杂凑算法标准(GM/T 0004-2012),2016年升为国家标准 GB/T 32905-2016,2018年被纳入 ISO/IEC 国际标准。SM3 输出 256 位摘要,设计对标 SHA-256,在中国金融、政府和关键信息基础设施中被广泛强制使用。

算法描述

SM3 使用 Merkle-Damgård 结构,与 SHA-256 类似但有以下关键差异:

  • 消息扩展为 132 个字(SHA-256 为 64 个),使用更复杂的扩展算法
  • 压缩函数包含两个并行计算的路径(类似 RIPEMD 的双路径设计)
  • 使用布尔函数 FF 和 GG,在第 0-15 轮和第 16-63 轮分别使用不同的函数
  • 引入常量 T,在前 16 轗使用 0x79CC4519,后 48 轗使用 0x7A879D8A
SM3 压缩函数伪代码(简化): for i = 0 to 63: if i < 16: FF = (X ∧ Y) ⊕ (X ∧ Z) ⊕ (Y ∧ Z) GG = (X ∧ Y) ⊕ (¬X ∧ Z) else: FF = (X ∧ Y) ∨ (X ∧ Z) ∨ (Y ∧ Z) GG = (X ∧ Y) ∨ (¬X ∧ Z) SS1 = ROTL(7, A) + ROTL(9, i) + (E + T[i]) SS2 = SS1 ⊕ ROTL(12, A) # 注意:这里用到了 ROTL(12, A) TT1 = FF + D + SS2 + W'[i] TT2 = GG + H + SS1 + W[i] D = C; C = ROTL(9, B); B = A; A = TT1 H = G; G = ROTL(19, F); F = E; E = P0(TT2)
与 SHA-256 对比
特性SM3SHA-256
输出长度256 bit256 bit
分组大小512 bit512 bit
轮数6464
字长32 bit32 bit
消息扩展字数13264
压缩路径双路径单路径
速度~1.5 GB/s~1.8 GB/s
标准组织SCA / ISONIST
碰撞安全128 bit128 bit
应用场景
  • 金融支付:中国银联芯片卡、移动支付(支付宝/微信底层安全)
  • 电子政务:电子证书、电子签章、身份认证
  • 区块链:中国合规区块链平台(如长安链)
  • 物联网:国密认证协议
  • TLS:国密 TLS(GM/T 0024)使用 SM3 替代 SHA-256
参考文献
  1. 国家密码管理局 (2010). "SM3 密码杂凑算法". GM/T 0004-2012.
  2. 国家标准委 (2016). "信息安全技术 SM3密码杂凑算法". GB/T 32905-2016.
  3. ISO/IEC 10118-3:2018. "IT Security techniques — Hash-functions — Part 3: Dedicated hash-functions".
  4. Shen, E., et al. (2013). "Security Analysis of SM3". Chinese Journal of Computers.