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字,