SM3是国密算法中唯一的密码杂凑算法,是一种密码散列函数标准,用于替代MD5/SHA-1/SHA-2等国际算法,今天我们就来了简单解一下。

什么是SM3算法?

SM3采用密码散列(hash)函数标准,是在SHA-256基础上改进实现的一种算法,其安全性及效率要高于MD5算法和 SHA-1 算法,与SHA-256相当。

SM3

SM3算法流程

SM3算法结果为256位,其大体上与SHA256相同,其算法过程如下:

  • 消息填充

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

1、先填充一个“1”,后面加上k个“0”。其中k是满足(n+1+k) mod 512 = 448的最小正整数。

2、追加64位的数据长度。

SM3

  • 消息扩展

SM3的迭代压缩步骤没有直接使用数据分组进行运算,而是使用这个步骤产生的132个消息字。概括来说,先将一个512位数据分组划分为16个消息字,并且作为生成的132个消息字的前16个。再用这16个消息字递推生成剩余的116个消息字。

  • 迭代压缩

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

初值IV被放在A、B、C、D、E、F、G、H八个32位变量中,整个算法中最核心、也最复杂的地方就在于压缩函数。压缩函数将这八个变量进行64轮相同的计算。

  • 压缩函数

将计算完成的A、B、C、D、E、F、G、H和原来的A、B、C、D、E、F、G、H分别进行异或,就是压缩函数的输出。这个输出再作为下一次调用压缩函数时的初值。依次类推,直到用完最后一组132个消息字为止。

  • 输出结果

将得到的A、B、C、D、E、F、G、H八个变量拼接输出,就是SM3算法的输出。

SM3算法的应用场景

在商用密码体系中,SM3主要用于数字签名及验证、消息认证码生成及验证、随机数生成等。

SM3

SM3算法的特点

SM3算法作为一款比较优秀的密码散列函数,具备一下几个特点:

  1. 对于任意给定的消息,SM3可以很简单的生成散列数值;
  2. 从任意给定的散列数值,无法反推出明文消息;
  3. 修改消息,散列数值必定会发生变化;
  4. 对于两个不同的消息,SM3不会给与相同的散列数值。

免责声明:素材源于网络,如有侵权,请联系删稿。