SM3 密码杂凑算法是一种密码学哈希函数,被广泛应用于网络安全和数据完整性验证等领域。SM 3是中国国家密码管理局 2010 年公布的中国商用密码杂凑算法标准。适用于商用密码应用中的数字签名和验证。
SM3 是在 SHA-256 基础上改进实现的一种算法,其安全性和 SHA-256 相当。SM3 和 MD5 的迭代过程类似,也采用 MD(Merkle-Damgard)结构。消息分组长度为 512 位,摘要值长度为 256 位。
哈希函数的基本原理:哈希函数是将输入的任意长度的消息转换为固定长度的输出,且输出值的变化应该因输入值的微小变化而发生剧烈变化。
SM 3 算法的设计思想:SM 3 算法采用分组密码结构设计,采用置换、非线性函数和模运算来实现数据的混淆和扩散,以确保数据的安全性。
SM 3 算法的加密流程:包括消息填充、初始向量设定、消息分组、迭代加密等步骤,最终生成哈希值作为数据的加密结果。SM 3 计算流程如下图所示:
SM3 的消息扩展步骤是以512 位的数据分组作为输入的。因此,我们需要在一开始就把数据长度填充至 512 位的倍数。数据填充规则和 MD5 一样,具体步骤如下:
消息填充后的数据表示如下图所示:
消息填充后需要按 512 bit 进行分组,即 m′=B0B1⋅⋅⋅Bn−1m'=B^{0}B^1···B^{n-1}m′=B0B1⋅⋅⋅Bn−1 ,其中 n=l+k+65512n=\frac{l+k+65}{512}n=512l+k+65。
之后会迭代计算,迭代方式如下:
// CF()为压缩函数,V(0)为256bit初始值IV,B(i)为填充后的消息分组
for i=0 to n-1
V(i+1)=CF(V(i), B(i)))
若分组后只有一组,长度为512bit,即 n=1n=1n=1,m´=B0m´=B_0m´=B0,V1=CF(V0,B0)V_1=CF(V_0,B_0)V1=CF(V0,B0),得到的 V0V_0V0 即为最终的杂凑值。
若存在 nnn 个分组,则进行 nnn 次迭代,最终结果 VnV_nVn 为最终的杂凑值。
SM 3 的迭代压缩步骤没有直接使用数据分组进行运算,而是由消息分组 BiB^iBi 产生的 132 个消息字。
消息扩展需要将一个消息分组扩展成 132 个字 W0,W1,,,W67,W0′,W1′,,,W63′W_0,W_1,,,W_{67},W'_0,W'_1,,,W'_{63}W0,W1,,,W67,W0′,W1′,,,W63′,那么如何处理一个消息分组呢?
在最终得到的 132 个消息字中,前 68 个消息字构成数列 WjW_jWj,后 64 个消息字构成数列 Wj′W'_jWj′ ,其中下标 jjj 从0开始计数。
SM3 的迭代过程和 MD5 类似,也是 MD(Merkle-Damgard)结构。但 SM3与 MD5 不同的是,SM3 使用消息扩展得到的消息字进行运算。
迭代压缩是如何计算的呢?
整个算法中最核心、也最复杂的地方就在于压缩函数,压缩函数将这八个变量进行 64 轮相同的计算,其中一轮的计算过程如下图所示:
将最后迭代的 A、B、C、D、E、F、G、HA、B、C、D、E、F、G、HA、B、C、D、E、F、G、H 拼接起来,即 ABCDEFGH=VnABCDEFGH=V_nABCDEFGH=Vn 为最后的杂凑值。
在网络安全中的应用:SM 3 算法被广泛应用于网络数据传输的完整性验证和身份认证,保障了网络通信的安全性。
在密码学中的应用:SM 3 算法可用于密码学协议、数字证书、密钥交换等场景,提供了可靠的数据安全保障。
在数字签名中的应用:SM 3 算法能够生成数字签名的哈希值,用于验证文档的完整性和真实性,为电子商务和电子合同提供了安全的基础支持。
SM 3 算法作为一种安全、高效的哈希函数,在密码学和网络安全领域具有重要的地位和应用前景。 随着技术的不断发展,SM 3 算法将不断完善,为数据安全和隐私保护做出更大的贡献。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有