【专题课堂】SM3加密算法详解
发布时间:2023-04-17
为了保障商用密码的安全性,国家密码局制定了一系列密码标准,包括:SM1、SM2、SM3、SM4、SM7、SM9、祖冲之密码算法(ZUC) 等。

一、SM3概述
SM3密码杂凑算法是中国国家密码管理局2010年公布的中国商用密码杂凑算法标准。该算法于2012年发布为密码行业标准(GM/T 0004-2012),2016年发布为国家密码杂凑算法标准(GB/T 32905-2016)。
SM3适用于商用密码应用中的数字签名和验证,是在SHA-256基础上改进实现的一种算法,其安全性和SHA-256相当。SM3和MD5的迭代过程类似,也采用Merkle-Damgard结构。消息分组长度为512位,摘要值长度为256位。
在信息安全中,有许多重要的应用,都使用了密码散列函数来实现,例如数字签名,消息认证码。
二、SM3特性
一个理想的密码散列函数应该有四个主要的特性:
三、算法过程
整个算法的执行过程可以概括成四个步骤:消息填充、消息扩展、迭代压缩、输出结果。
1、先填充一个“1”,后面加上k个“0”。其中k是满足(n+1+k) mod 512 = 448的最小正整数。
2、追加64位的数据长度(bit为单位,大端序存放)。
在最终得到的132个消息字中,前68个消息字构成数列 {Wj},后64个消息字构成数列 {Wj’},其中下标j从0开始计数。
将消息分组B(i)按以下方法扩展生成132个字W0,W1,…,W67,W0’ ,W1’,…,W63’,用于压缩函数CF:
这个迭代过程可以用这幅图表示:

SM3算法的迭代压缩流程示意图

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

一、SM3概述
SM3密码杂凑算法是中国国家密码管理局2010年公布的中国商用密码杂凑算法标准。该算法于2012年发布为密码行业标准(GM/T 0004-2012),2016年发布为国家密码杂凑算法标准(GB/T 32905-2016)。
SM3适用于商用密码应用中的数字签名和验证,是在SHA-256基础上改进实现的一种算法,其安全性和SHA-256相当。SM3和MD5的迭代过程类似,也采用Merkle-Damgard结构。消息分组长度为512位,摘要值长度为256位。
在信息安全中,有许多重要的应用,都使用了密码散列函数来实现,例如数字签名,消息认证码。
二、SM3特性
一个理想的密码散列函数应该有四个主要的特性:
- 对于任何一个给定的消息,它都很容易就能运算出散列数值。
- 难以由一个已知的散列数值,去推算出原始的消息。
- 在不更动散列数值的前提下,修改消息内容是不可行的。
- 对于两个不同的消息,它不能给与相同的散列数值。
三、算法过程
整个算法的执行过程可以概括成四个步骤:消息填充、消息扩展、迭代压缩、输出结果。
消息填充
SM3的消息扩展步骤是以512位的数据分组作为输入的。因此,我们需要在一开始就把数据长度填充至512位的倍数。数据填充规则和MD5一样,具体步骤如下:1、先填充一个“1”,后面加上k个“0”。其中k是满足(n+1+k) mod 512 = 448的最小正整数。
2、追加64位的数据长度(bit为单位,大端序存放)。
消息扩展
SM3的迭代压缩步骤没有直接使用数据分组进行运算,而是使用这个步骤产生的132个消息字。(一个消息字的长度为32位/4个字节/8个16进制数字)概括来说,先将一个512位数据分组划分为16个消息字,并且作为生成的132个消息字的前16个。再用这16个消息字递推生成剩余的116个消息字。在最终得到的132个消息字中,前68个消息字构成数列 {Wj},后64个消息字构成数列 {Wj’},其中下标j从0开始计数。
将消息分组B(i)按以下方法扩展生成132个字W0,W1,…,W67,W0’ ,W1’,…,W63’,用于压缩函数CF:

迭代压缩
在上文已经提过,SM3的迭代过程和MD5类似,也是Merkle-Damgard结构。但和MD5不同的是,SM3使用消息扩展得到的消息字进行运算。这个迭代过程可以用这幅图表示:

SM3算法的迭代压缩流程示意图

最后,再将计算完成的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算法的输出。上一篇:【专题课堂】浅谈标识密码SM9的发展 下一篇:【专题课堂】时间戳服务器
返回列表