基于容错的md5全流水硬件加密方法

文档序号:6427379阅读:211来源:国知局
专利名称:基于容错的md5全流水硬件加密方法
基于容错的MD5全流水硬件加密方法
技术领 域本发明涉及一种可容错的全流水的消息摘要(MD5)硬件加密方法和MD5运算器件。
背景技术
随着FPGA技术的兴起,许多安全加密算法都被硬件化以提高计算速度和安全性。 MD5数字摘要算法在网络安全的诸多方面都得到广泛的应用,由于其串行计算的特点,对 MD5算法的加速并不像其它具有并行操作算法那样容易实现。又由于硬件的容错设计需要消耗大量的硬件资源还会降低运算吞吐率,因此MD5的高吞吐率的且具有容错功能的硬件实现方法并不多见。在这种背景下,期望一种有超高吞吐率并具有容错功能的MD5硬件加密方案。

发明内容
本发明为了找到一种具有容错能力且具有超高吞吐率的MD5硬件加密方法,对 MD5加密运算进行了结构拆分,提供了一种64级全流水的硬件运算结构,并针对单粒子翻转(SEU)等常见数据错误进行了容错加固。本发明主要包括两个步骤首先是对MD5加密运算的64个步骤进行全展开,实现中每一个步骤使用一个单独的运算单元。在该单元中,输入算法中相应步骤中特定的参数并使用特定的运算公式,各单元的计算公式见表1,各公式中的参数值见表2 ;64个功能独特的单元按照一定顺序依次连接,数据块经过这64个器件的处理就相当于经过了 MD5的64轮加密运算。数据分组被分为16个32位的字,当第1个数据分组从初始单元流出以后,第2个数据分组便可以进入初始单元。数据分组被分为16个32位的字,当数据分组流入初始,初始取出第一个字XO进行表1所示公式计算,得到一个结果作为单元1的b输入,同时将数据分组全部交给单元1 ; 单元1取出第二个字Xl (以后每个单元取出的字见表2所示)进行表1所示公式计算,得到结果作为单元2的b输入,同时将数据分组全部交给单元2,以此类推,直到单元63将a, b,c, d四个链接变量全部输出(链接变量的初始值见附图1的说明,传递过程见附图4的说明),4个链接变量的组合即是运算结果。在使用时,a、c、d和T从参数列表里提取出以后马上进行海明码解码,然后再投入使用,b变量被同时提取出3个副本,通过一个按位三模表决器,选出正确的b值投入运算。在以上的过程中,当第1个数据分组从初始单元流出以后,第2个数据分组便可以进入初始单元,以此类推,当第1个数据及其计算结果分组从单元63流出的时候,第2个数据分组刚好从单元62流出,第3个数据分组从单元61流出,……,第64个数据分组从初始单元流出,而第65个数据分组正准备进入初始单元。以此便实现了 MD5加密算法的流水化。其次,根据SEU可能发生的位置进行了海明码容错加固;将运算部件进行三模冗余加固,最终在64个步骤中 都进行了这样的容错加固。本发明中的MD5运算过程不需要复杂的控制逻辑,整个流水线中的数据有效性仅与一个使能信号绑定。因此大大降低了控制逻辑的出错几率,也避免了加固控制逻辑所产生的延迟。根据本发明,可以实现每一轮运算都能高度容错的MD5加密,并且当数据充满流水线后能够达到数十Gbps的超高吞吐率。本发明的优点在于假设待加密的数据长度都不超过一个数据分组,这样一个数据分组走完流水线就完成了整个文本的加密处理,不再需要将结果反馈到流水线的开头部分。考虑到MD5加密主要应用在用户名和登录口令的加密上,一个数据分组的长度 (448bit,56个字符)对于绝大多数口令系统都足够长,因此本发明的适用范围仍然比较广泛。并且,在这样的假设下,64级流水线最高可以达到平均一个节拍处理完一个512bit文本的吞吐率。在xlinxISE 10. 1平台下布线所得频率为127MHz,折算出吞吐率为65Gbps。


图1是一般的MD5加密的总体结构说明图。图2是一般的MD5运算轮循的结构示例图。图3是本发明的MD5运算步骤的结构示意图。图4是本发明的未加入容错设计的运算单元结构图。图5是本发明的初始运算单元结构图。图6是本发明的一般运算单元结构图。图7是本发明中运算器部件的内部结构。图8是本发明中非线性函数部件的内部结构。
具体实施例方式符号说明a_32,b_32, c_32, d_32 每轮运算中的链接变量,下划线之后的32表示为32位的数据,如无特殊说明,本说明书附图中所有下划线之后的数字皆表示该数据的位数。T,为每轮运算中的一个32位常数,但以海明编码(38位)的方式存储,因此附图中经常以T_38的形式出现。Χ_32,是每一轮运算中使用到的待加密的数据块。F1,F2,F3,F4;分别为四个非线性函数的代号,其中 Fl= (((χ)&(y)) I ( (χ)&(z))),F2= (((χ)&(ζ)) | ((y)& (ζ))), F3= ((x)"(y)"(z)),F4= ((y)"((x) (ζ)))。首先,对一般的MD5硬件加密实现的结构进行简要说明。参照图1,一般的MD5硬件加密实现都需要读入、输出、存储、循环操作模块和状态机控制模块。其中读入模块负责与控制端的主机内存进行交互,取得待加密的原始数据。 如果待加密的原始数据没有进行过填充处理,这一模块还可以对数据进行分块填充。其填充方式为,以512bit为单位分组对待加密的文本进行处理,每一个分组又被划分为16个 32bit的子分组。因此首先对待加密数据进行填充0 (紧接着待加密数据的一位填1),使得待加密文本的长度恰好为一个比512bit的倍数小64bit的数。这样,在待加密文本的最后附加上64bit的消息长度之后整个文本的长度就是512bit的整数倍。存储模块一方面可以暂存读入模块读入的数据,另一方面存储MD5算法自身设定的常量数据。在MD5算法中,需要使用的数据常量有4个初始链接变量A (0x67452301)、B (0xefcdab89)、C (0x98badcfe)、 D (0x10325476),以及64个32位的Ti值,64轮循环中第i轮的Ti取值是232*abs (sin (i)) 的整数部分,i的单位是弧度。存储模块为循环操作模块提供计算数据和算法常量。而循环操作模块则进行MD5加密的轮运算操作,当计算出结果时将结果传递给输出模块进行输出。所有功能模块的协调和工作都在状态控制模块的控制之下进行。参照图2,对一般的MD5轮询加密结构进行说明。在一般的MD5硬件加密设计中, 负责进行加密轮运算的单元是被循环利用的,一块数据在该单元里循环64次之后才能得到信息摘要,再让下一块数据进入运算单元。如图2,A_32,B_32,C_32,D_32,就是暂存四个 32位链接变量的寄存器,当文本的第一个数据分组第一次进入运算单元的时候则使用链接变量的初始值。在64轮运算中的第i轮中,状态控制逻辑根据i的取值不同,将数据分组的相应子分组(32位的一段数据)和对应常数Ti输入运算单元,并选择4个非线性函数中的一个参与运算,然 后给出循环移位的位数s。当进行完一轮运算后,连接变量B的值被更新, 其他链接变量的值依次右移传递给下一组链接变量,于是得到下一轮运算所需要的一组链接变量(反馈至原始单元的头部四个寄存器中)。当一块(512bit)数据进行完64轮加密运算之后,控制逻辑判断该数据分组是不是待加密文本的最后一个分组,如果是则将4个更新后的链接变量拼接成128位的信息摘要作为结果输出,如果不是最后一个分组,则将更新后的4个链接变量反馈值运算单元的头部作为下一个数据分组的初始链接变量使用。然后,在一般的MD5加密硬件实现的基础上,仔细说明本发明的主要工作——对循环操作模块的全流水展开的工作流程。参照图3,在本发明中,对数据分组进行64轮加密运算的循环操作被分解为64级流水线。图3中,每一个功能单元对应64轮运算中的一轮,功能单元内部为组合逻辑运算, 使用输出端的寄存器暂存结果,通过使能信号标志本节拍的计算结果是否有效,重置或开机时所有的使能信号被置为0。当RAM访问器得到一个待计算的512bit数据分组之后,将数据发送到开始单元的输入端口,并同时置使能信号为高。开始单元接收数据之后按既定设置,不需要任何控制逻辑指导,处理数据,将结果和数据分组存到输出端口的寄存器中并置输出的使能信号为高。下一节拍单元2取得数据分组和上一单元计算结果并按既定设置进行处理,以此类推。64个节拍之后,数据分组到达单元64的输出端,四个连接变量也同时到达,这时候的流水线的最后一个功能单元根据使能信号的有效性,决定是否将4个连接变量作为消息摘要拼接输出。因此,从数据分组首次进入流水线,到输出结果一共需要65 个节拍的延迟。参照图4,图4为流水线中计算单元的数据流图。输入端有数据分组、四个连接变量和使能信号,4个连接变量中有3个链接变量的值没有更改,而是作为另一个链接变量存入输出端的寄存器,输入b作为c输出,输入c作为d输出,输入d作为a输出,4个链接变量参与运算之后的结果作为更新了的链接变量b输出。参数T_32是每个单元预设好的。在每个单元的计算部件中,仅使用了数据分组的一个子分组,具体是哪个分组,每个运算单元各不相同(见表1,各单元使用的参数和非线性函数明细表第二列)。图4中“计算器”部件的内部结构见图7。如图7,b、c、d首先通过一个非线性函数F运算得到F,加上a之后, 与X和T之和再作和。然后循环左移s位,最后加上b得到新的b值。非线性函数F和循环左移的位数S,根据运算单元在流水线中的位置不同而不同,具体见表1的第3列和表2 中的第5列。 参照图5,图6 ;为了使本发明的流水线具有较高的抗灾难能力,我们在每一级流水线中(即每个计算单元)都加入了容错设计。在初始单元里,图5中,a、c、d三个链接变量以及T的初始值以海明码的形式被保存在参数列表里,而b变量则被保存了 3份。在使用时,a、c、d和T从参数列表里提取出以后马上进行海明码解码,然后再投入使用,而b变量则被同时提取出3个副本,通过一个按位三模表决器,选出正确的b值投入运算。按位三模表决器的工作原理是,对于b变量的3个副本中相应的每一位进行一次三模表决,如果三个副本中的同一位之间有不同,则选择多数派进行输出(由于一位数只有0和1两种取值,根据抽屉原理,如果3个副本间发生冲突,则一个2副本的多数派必然存在)。这样的设计效果是,如果b的一个副本发生了数位错误,只要另外两个副本对应的数据位不发生错误,仍然可以输出正确结果。海明码编码存储和解码使用可以纠正数据中出现的一位翻转错误, 即单粒子翻转事件(SEU),同时也可以发现两位翻转错误。在本设计中,我们假设同时发生两位翻转错误的概率极其低下(事实上它发生的概率也的确极其低下——几乎是SEU的发生概率的平方),因此对于同时发生的两位错误没有作处理。为了应对计算器部件的计算过程中产生的错误,本发明在每级流水线单元中都将计算器部件进行了三模拷贝。如图5、 图6,同样的数据输入到三个计算器中,得到3个结果进行一次表决,表决出的数据又被拷贝成三个副本存储到三个b的数据寄存器中去。其他的3个链接变量和使能信号在输出端都被进行了海明码编码之后才存入寄存器,以便下一级流水单元取用。对于待加密的数据分组,进入初始单元时为不加密的原始数据,在初始单元的输出端被以子分组(32位)为单位进行了海明码编码存储。如图6,在初始单元之后的每个单元中,数据分组都只被解码了一个在本级内需要使用的子分组,然后在输出端对该子分组进行编码存储,其他子分组则直接传送到输出端的寄存器中。而3个链接变量和使能信号由于之前的单元进行了编码存储,在本单元使用之前都需要进行海明解码,对b变量的三个副本则是由于传递了三个副本而进行三模按位表决之后进行使用。参数T则取自本单元自身的参数列表中,进行海明解码之后使用。最后,当计算结果从最后一级运算单元流出,如图3所示,在第65个节拍,流水线末端根据使能信号的取值决定是否输出结果,如果为1则认为输出的四个链接变量是有效输出,对链接变量进行字节序修正和拼接之后输出128位消息摘要。表 1
单元号ι计算公式非线性函数
初始单元b = b+(a+Fl+Xi+Ti) << sFl = (((b)&(c)) | ( (b)&(d)))~
单元 1b = b+(a+Fl+Xi+Ti) << sFl = (((b)&(c)) | ( (b)&(d)))~
单元 2b = b+(a+Fl+Xi+Ti) << sFl = (((b)&(c)) | ( (b)&(d)))~
单元 3b = b+(a+Fl+Xi+Ti) << sFl = (((b)&(c)) | ( (b)&(d)))~
权利要求
1.基于容错的MD5全流水硬件加密方法,其特征在于,该方法包括两个步骤首先是对MD5加密运算的64个步骤进行全展开,实现中每一个步骤使用一个单独的运算单元;其次,根据SEU可能发生的位置进行了海明码容错加固;将运算部件进行三模冗余加固,最终在64个步骤中都进行这样的容错加固。
2.根据权利要求1所述的基于容错的MD5全流水硬件加密方法,其特征在于,64个功能独特的单元按照一定顺序依次连接,数据块经过这64个器件的处理,相当于经过MD5的 64轮加密运算。
3.根据权利要求1所述的基于容错的MD5全流水硬件加密方法,其特征在于,数据分组被分为16个32位的字,当第1个数据分组从初始单元流出以后,第2个数据分组便可以进入初始单元。
4.根据权利要求1所述的基于容错的MD5全流水硬件加密方法,其特征在于,在使用时,a、c、d和T从参数列表里提取出以后马上进行海明码解码,然后再投入使用,b变量被同时提取出3个副本,通过一个按位三模表决器,选出正确的b值投入运算。
全文摘要
本发明公开了一种基于容错的MD5全流水硬件加密方法。该方法包括两个步骤首先是对MD5加密运算的64个步骤进行全展开,实现中每一个步骤使用一个单独的运算单元。其次,根据SEU可能发生的位置进行了海明码容错加固;将运算部件进行三模冗余加固,最终在64个步骤中都进行了这样的容错加固。本发明的优点在于假设待加密的数据长度都不超过一个数据分组,这样一个数据分组走完流水线就完成了整个文本的加密处理,不再需要将结果反馈到流水线的开头部分。
文档编号G06F21/24GK102222204SQ20111017711
公开日2011年10月19日 申请日期2011年6月28日 优先权日2011年6月28日
发明者倪时策, 吕启, 李荣春, 窦勇, 胡绵江 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1