GB/T 32905 (SM3) 规范详解
GB/T 32905《信息安全技术 SM3 密码杂凑算法》由国家密码管理局发布,是中国商用密码哈希函数标准。SM3 输出 256 位(32 字节)摘要,设计上参考了 SHA-256 但在消息扩展和压缩函数中做了改进,适合国密合规场景使用。
算法流程
SM3 的处理流程:消息填充——将原始消息填充至长度为 512 位的整数倍(与 SHA-256 类似的填充方案,但长度域编码为 64 位大端序);消息扩展——将每 512 位分组扩展为 132 个字 W0-W67 和 W'0-W'63;压缩函数——64 轮迭代,每轮使用消息字、中间变量和布尔函数(FFj, GGj)更新寄存器 A-H;最终拼接 A-H 为 256 位摘要。
与 SHA-256 对比
SM3 和 SHA-256 的输出长度相同(256 位),分组长度相同(512 位),轮数相同(64 轮),但结构不同:SM3 的消息扩展使用不同的移位和异或组合;SM3 的布尔函数 FFj 和 GGj 与 SHA-256 的 Ch/Maj/BigSigma 不同;SM3 的常量表与 SHA-256 不同。这些差异导致 SM3 和 SHA-256 的输出完全不同,互不兼容。
应用场景
SM3 在国密体系中广泛使用:SM2 签名中用于消息摘要预处理;SM4 的 KDF(密钥派生函数)基于 SM3;国密 TLS(GM/T 0024)中替代 SHA-256 做握手摘要和记录 MAC;国密数字证书中用于证书签名。本站 Hash 摘要算法工具 支持在线计算 SM3 摘要值。