Bootstrap

SM3密码杂凑算法原理

目录

1.概述

2、算法描述

2.1 概述

2.2 填充

2.3 迭代压缩

2.3 消息扩展

2.4 压缩函数

2.5 杂凑值


1.概述

SM3是我国采用的一种密码散列函数标准,由国家密码管理局于2010年12月17日发布。相关标准为“GM/T 0004-2012 《SM3密码杂凑算法》”。

商用密码体系中,SM3主要用于数字签名及验证、消息认证码生成及验证、随机数生成等,其算法公开。据国家密码管理局表示,其安全性及效率与SHA-256相当。

信息安全中,有许多重要的应用,都使用了密码散列函数来实现,例如数字签名消息认证码

特性

一个理想的密码散列函数应该有四个主要的特性:

  • 对于任何一个给定的消息,它都很容易就能运算出散列数值。

  • 难以由一个已知的散列数值,去推算出原始的消息。

  • 在不更动散列数值的前提下,修改消息内容是不可行的。

  • 对于两个不同的消息,它不能给与相同的散列数值。

本文主要介绍了SM3密码杂凑算法的计算方法和计算步骤,感兴趣的读者可以了解SM3算法背后的数学原理,源码会在另一篇文章介绍:SM3密码杂凑算法源码解析_10点43的博客-CSDN博客_sm3 源码


2、算法描述

2.1 概述

对长度为l(l < 264) 比特的消息m, SM3杂凑算法经过填充和迭代压缩,生成杂凑值,杂凑值长度为256比特。

2.2 填充

假设消息m 的长度为l 比特。首先将比特“1”添加到消息的末尾,再添加k 个“0”, k是满足l + 1 + k ≡ 448mod512 的最小的非负整数。然后再添加一个64位比特串,该比特串是长度l的二进制表示。填充后的消息m′ 的比特长度为512的倍数
例如:对消息01100001 01100010 01100011,其长度l=24,经填充得到比特串:

2.3 迭代压缩

将填充后的消息m′按512比特进行分组:
其中n=(l+k+65)/512。
对m′按下列方式迭代:
FOR i=0 TO n-1
        
ENDFOR
其中CF是压缩函数, 为256比特初始值IV, 为填充后的消息分组,迭代压缩的结果为

初始向量为:IV= 7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aa e38dee4d b0fb0e4e

流程如图所示:

2.3 消息扩展

2.4 压缩函数

令A,B,C,D,E,F,G,H为字寄存器,SS1,SS2,TT1,TT2为中间变量,压缩函数,计算过程描述如下:

中间计算过程如图所示:

è¿éåå¾çæè¿°

2.5 杂凑值

;