HASH函数又称报文摘要、杂凑函数、散列函数,它能将任意长度的信息转换成固定长度的HASH值,适用于商用密码应用中的数字签名和验证、消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。
SM3密码算法是一种国产密码杂凑算法,算法主要分为填充、分块和迭代三个步骤。
- 填充是为了满足加密要求,每个分块都需要填充到512bit。填充规则按照先添加比特“1”,再添加k个“0”,k满足l+1+k=448(mod 512)的最小的非负整数,最后再添加一个64位比特串,即l的长度。
- 分块是将填充后的消息按512比特分组。
- 迭代是经过压缩函数运算得到最终的杂凑值。每一轮的压缩值都与该轮分块和上一轮的压缩值相关。v0是给定的初始值。分块是16个字,即512bit。
消息扩展
另外在压缩函数中,涉及将原来16字的B扩展为132字的W。其扩展过程分为三部分,第一部分w0,w1.....w15保持原有16字,第二部分w16,w17....w67为关于P1函数的变换,第三部分w0',w1',w63'为关于前68个字的变换。
迭代函数
在迭代函数中,每一轮都需要将寄存器重新赋值,然后与上一次的压缩值进行异或运算。