本发明属于安全技术领域,特别涉及一种sm3密码杂凑算法中消息填充的硬件实现方法。
背景技术:
sm3密码杂凑算法是我国自主研制的一种哈希算法,可以把长度小于264的消息经过分组迭代后,转化成一个256比特的杂凑值。sm3密码杂凑算法适用于各种数字签名和消息验证,广泛应用于国内商用密码产品。
国家密码管理局于2010年12月公布的sm3密码杂凑算法中,制定了sm3密码杂凑算法的计算步骤和方法。
sm3密码杂凑算法的消息填充的步骤如下所示:
首先假设消息m的长度为k比特,k小于264。首先将比特“1”添加到消息的末尾,再添加n个“0”,n是满足k+1+n≡448mod512的最小的非负整数。然后在最后再添加一个64位比特串,该比特串是长度k的二进制表示。填充后的消息m’的比特长度为512的倍数。
技术实现要素:
现有的sm3密码杂凑算法中的消息填充主要是通过软件来实现的,本发明提供一种硬件实现sm3密码杂凑算法中消息填充的方法,用以提高sm3密码杂凑模块的吞吐量,减少软件处理以及和硬件交互的时间。其具体方案如下:
定义两个512比特的寄存器u和v,用来存储初始消息以及消息填充过程中的中间消息和处理完成的消息;
定义每次输入消息的长度最多为256比特,如果超过256比特则分次输入,每次输入的消息长度为k;
(1)将输入的消息存入寄存器u的高256位,将1比特“1”存入寄存器v的最高位,此时可分为两种情况:
第一次输入消息即为全部消息,则把v右移k位,然后把u、v与k进行异或操作,其结果存储在寄存器u中。此时寄存器u中的值就是填充后的512比特消息;
第一次输入消息不为全部消息,说明消息长度为256,则把第二次输入的消息存入u的低256位,后续处理见(2)、(3)、(4);
(2)如果第二次的输入是最后一次消息,并且消息长度小于192,同时说明第二次的输入是最后一次消息,则把v右移k位,然后把u的低256位、v的高256位与k异或,其结果存储在寄存器u的低256位中。此时寄存器u中的值就是填充后的512比特消息;
(3)如果第二次的输入是最后一次消息,并且消息长度大于192,则把v右移k位,然后把u的低256位与v的高256位异或,其结果存储在寄存器u的低256位中;把v的低64位与k异或,其结果存储在寄存器v的低64位中。此时寄存器u和v即为填充后的两个512比特消息;
(4)如果第二次的输入不是最后一次消息,说明消息长度为256,此时寄存器u中的512比特消息是符合填充要求的第一个512比特消息,将其存入寄存器v中送入sm3密码杂凑算法中进行计算,并将寄存器u清零。后续处理见(5);
第三次输入的消息可以看作第一次输入消息,重复(2)中的步骤进行填充,直到完成最后一次消息填充;
本发明的优点主要包括:
1.消息填充速度快,主要运算均组合逻辑,计算延迟小;
2.本发明运算资源高效可复用,可以应对可能出现的所有情况,极大的节省了硬件资源;
3.本发明采用了乒乓操作完成数据的无缝缓冲与处理。
附图说明
图1为本发明的硬件结构示意图;
图2为消息填充硬件实现的基本流程图。
具体实施方式
为了使本发明更便于理解,以下结合附图和具体实施方式来对本发明做进一步说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实例公开了一种sm3密码杂凑算法中消息填充的硬件实现方法。采用硬件描述语言构建消息填充状态机和基本运算单元。如图1所示,是本发明的硬件结构示意图,所述基本运算单元包括:移位运算单元、异或运算单元、比较单元,并且使用了乒乓操作完成数据的无缝缓冲与处理;
如图2所示,是本发明硬件实现的流程图,所述消息填充状态机按照消息填充流程,通过调用基本运算单元完成消息的填充,最后根据不同情况会输出不同值。详述如下:
定义两个512比特的寄存器u和v,用来存储初始消息以及消息填充过程中的中间消息和处理完成的消息;
定义每次输入消息的长度最多为256比特,如果超过256比特则分次输入,每次输入的消息长度为k;
(1)将输入的消息存入寄存器u的高256位,将1比特“1”存入寄存器v的最高位,此时可分为两种情况:
第一次输入消息即为全部消息,则把v右移k位,然后把u、v与k进行异或操作,其结果存储在寄存器u中。此时寄存器u中的值就是填充后的512比特消息;
第一次输入消息不为全部消息,说明消息长度为256,则把第二次输入的消息存入u的低256位,后续处理见(2)、(3)、(4);
(2)如果第二次的输入是最后一次消息,并且消息长度小于192,同时说明第二次的输入是最后一次消息,则把v右移k位,然后把u的低256位、v的高256位与k异或,其结果存储在寄存器u的低256位中。此时寄存器u中的值就是填充后的512比特消息;
(3)如果第二次的输入是最后一次消息,并且消息长度大于192,则把v右移k位,然后把u的低256位与v的高256位异或,其结果存储在寄存器u的低256位中;把v的低64位与k异或,其结果存储在寄存器v的低64位中。此时寄存器u和v即为填充后的两个512比特消息;
(4)如果第二次的输入不是最后一次消息,说明消息长度为256,此时寄存器u中的512比特消息是符合填充要求的第一个512比特消息,将其存入寄存器v中送入sm3密码杂凑算法中进行计算,并将寄存器u清零。后续处理见(5);
(5)第三次输入的消息可以看作第一次输入消息,重复(2)中的步骤进行填充,直到完成最后一次消息填充;
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制。任何熟悉本领域的技术人员,在不脱离本发明技术方案范围情况下,都可利用上述揭示的方法和技术内容对本发明技术方案做出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本发明技术方案保护的范围内。