前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SM 3 加密算法:安全、高效、广泛应用的密码学利器

SM 3 加密算法:安全、高效、广泛应用的密码学利器

作者头像
鳄鱼儿
发布2024-05-21 16:45:05
3410
发布2024-05-21 16:45:05
举报

简介

SM3 密码杂凑算法是一种密码学哈希函数,被广泛应用于网络安全和数据完整性验证等领域。SM 3是中国国家密码管理局 2010 年公布的中国商用密码杂凑算法标准。适用于商用密码应用中的数字签名和验证。

SM3 是在 SHA-256 基础上改进实现的一种算法,其安全性和 SHA-256 相当。SM3 和 MD5 的迭代过程类似,也采用 MD(Merkle-Damgard)结构。消息分组长度为 512 位,摘要值长度为 256 位。

SM 3 算法的原理

哈希函数的基本原理:哈希函数是将输入的任意长度的消息转换为固定长度的输出,且输出值的变化应该因输入值的微小变化而发生剧烈变化。

SM 3 算法的设计思想:SM 3 算法采用分组密码结构设计,采用置换、非线性函数和模运算来实现数据的混淆和扩散,以确保数据的安全性。

SM 3 算法的加密流程:包括消息填充、初始向量设定、消息分组、迭代加密等步骤,最终生成哈希值作为数据的加密结果。SM 3 计算流程如下图所示:

SM3计算过程.png
SM3计算过程.png

消息填充

SM3 的消息扩展步骤是以512 位的数据分组作为输入的。因此,我们需要在一开始就把数据长度填充至 512 位的倍数。数据填充规则和 MD5 一样,具体步骤如下:

  1. 假设消息 mmm 的长度为 lll 比特,先填充一个"1",后面加上 kkk 个“0”。其中 kkk 满足 (l+1+k)≡448mod 512(l+1+k)\equiv 448\mod512(l+1+k)≡448mod512 的最小的非负数整数。
  2. 追加表示数据长度的 64 位比特串,即 lll 的二进制表示。(bit 为单位,大端序列存放 1)
  3. 填充后的消息 m′m'm′ 的二进制长度为 512 的整数倍。

消息填充后的数据表示如下图所示:

sm3消息填充.png
sm3消息填充.png

消息分组

消息填充后需要按 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​。

之后会迭代计算,迭代方式如下:

代码语言:javascript
复制
// 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′​,那么如何处理一个消息分组呢?

  1. 先将一个 512 位数据分组划分为 16 个消息字 W0,W1,,,W15W_0, W_1,,, W_{15}W0​,W1​,,,W15​,并且作为生成的 132 个消息字的前 16 个。
  2. 用这 16 个消息字迭代生成后续 52 个消息字。 for j=16 to 67 W(j) = P(W(j-16) ^ W(j-9) ^ (W(j-3) <<< 15) ^ (W(j-13)<<<7) ^ W(j-6))
  3. 通过异或得到后续的 64 个字。 for j=0 to 63 W'(j)=W(j)^W(j+4)

在最终得到的 132 个消息字中,前 68 个消息字构成数列 WjW_jWj​,后 64 个消息字构成数列 Wj′W'_jWj′​ ,其中下标 jjj 从0开始计数。

迭代压缩

SM3 的迭代过程和 MD5 类似,也是 MD(Merkle-Damgard)结构。但 SM3与 MD5 不同的是,SM3 使用消息扩展得到的消息字进行运算。

SM3计算过程.png
SM3计算过程.png

迭代压缩是如何计算的呢?

  1. 初始值 IVIVIV 被分配到字寄存器 A,B,C,D,E,F,G,H{A,B,C,D,E,F,G,H}A,B,C,D,E,F,G,H 中。字的存储采用的大端模式
  2. 之后就是通过迭代去计算最终值,并寄存在 A,B,C,D,E,F,G,H{A,B,C,D,E,F,G,H}A,B,C,D,E,F,G,H 中。 for j=0 to 63 SS1 = ((A <<< 12) + E + (Ti <<< (j % 32))) <<< 7 SS2 = SS1 ^ (A <<< 12) TT1 = FFi(A,B,C) + D + SS2 + W' TT2 = GGi(E,F,G) + H + SS1 + W(i) D = C B = A A = TT1 H = G G = F <<< 19 F = E E = P0(TT2) V(i+1) = ABCDEFG ^ V(i)

整个算法中最核心、也最复杂的地方就在于压缩函数,压缩函数将这八个变量进行 64 轮相同的计算,其中一轮的计算过程如下图所示:

sm3迭代压缩.png
sm3迭代压缩.png

将最后迭代的 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 算法的应用

在网络安全中的应用:SM 3 算法被广泛应用于网络数据传输的完整性验证和身份认证,保障了网络通信的安全性。

在密码学中的应用:SM 3 算法可用于密码学协议、数字证书、密钥交换等场景,提供了可靠的数据安全保障。

在数字签名中的应用:SM 3 算法能够生成数字签名的哈希值,用于验证文档的完整性和真实性,为电子商务和电子合同提供了安全的基础支持。

结论

SM 3 算法作为一种安全、高效的哈希函数,在密码学和网络安全领域具有重要的地位和应用前景。 随着技术的不断发展,SM 3 算法将不断完善,为数据安全和隐私保护做出更大的贡献。

参考文献

国家密码管理局关于发布《SM3密码杂凑算法》公告(国密局公告第22号)_国家密码管理局

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • SM 3 算法的原理
    • 消息填充
      • 消息分组
        • 消息扩展
          • 迭代压缩
          • SM 3 算法的特点
          • SM 3 算法的应用
          • 结论
          • 参考文献
          相关产品与服务
          腾讯电子签
          弹指间,放心签。腾讯电子签(E-Sign Service)致力为企业及个人提供极简且高效的电子合同管理工具。您只需要一部手机即可完成合同签约及常见的合同管理操作;电子签将对签约全程进行区块链记录,为您的业务与生活保驾护航。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档