发明内容
本发明所要解决的技术问题是,提供一种利用各功能单元之间的级联,有效的提高了RSA的加解密性能,并实现了不同有限域之间切换的功能,充分复用了硬件资源的支持双域的快速RSA密码协处理器。
本发明所采用的技术方案是:一种支持双域的快速RSA密码协处理器,包括:
域控制寄存器,用于接收外部输入的控制信号;
控制寄存器,用于接收外部输入的控制信号;
RAM存储单元,用于存储外部输入的操作数以及运算结果;
二元扩域,连接域控制寄存器的输出端,接收域控制寄存器的控制信号;
素数域,连接域控制寄存器的输出端,接收域控制寄存器的控制信号;
双域模乘单元,分别连接控制寄存器、RAM存储单元、二元扩域和素数域,用于根据域控制寄存器的控制信号对RAM存储单元存储的外部操作数进行计算,并将计算结果存回到RAM存储单元内。
所述的RAM存储单元包括有第一单口RAM存储单元、第二单口RAM存储单元和第三单口RAM存储单元。
所述的双域模乘单元包括有用于模拟算法执行的状态机单元和用于通过融合两种不同有限域的算法结构,将模乘运算统一为a+x*y+b的乘累加器单元。
所述的状态机单元包括有分别对应接收从RAM存储单元输出的操作数Xi的第四多路选择器、操作数Yi的第七多路选择器、操作数Xi,Tj的第一多路选择器、操作数Ti,Nj的异或门、操作数Zi的第三多路选择器,以及设置有分别连接所述乘累加器单元的二元扩域输出端并存储不同时间的进位累加数的Ca存储器和Cb存储器、分别对应连接所述的第一多路选择器、第二多路选择器和第三多路选择器的输出端的用于存储操作数的X存储器、Y存储器和Z存储器,其中,所述或门的另一输入端接收外部的Inv信号输出端连接第二多路选择器的输入端,所述的第一多路选择器、第二多路选择器和第三多路选择器的输入端还分别连接所述乘累加器单元的素数域输出端,所述的第三多路选择器和第四多路选择器的输入端还连接Ca存储器的输出端,所述Cb存储器的输出端分别连接第四多路选择器和第五多路选择器的输入端,所述X存储器、Y存储器和Z存储器的输出端分别对应连接第五多路选择器、第六多路选择器和第七多路选择器的输入端,所述第五多路选择器的另一个输入端接收数字1,所述的第四多路选择器、第五多路选择器、第六多路选择器和第七多路选择器)的输出端分别构成状态机单元的输出端连接所述的乘累加器单元。
所述的乘累加器单元由输入端分别接收RAM存储器单元输入的64bit的二进制的加数a、加数b、乘数X和乘数Y,输出端分别输出素数域结果c和二元扩域结果d的乘累加器构成,所述的乘累加器包括有第一加法器、第二加法器、第三加法器和对接收的乘数X和乘数Y相乘后分别输出给第二加法器的双域乘法器,所述的第一加法器的输入端分别接收二进制的加数a、加数b,输出端分别连接第二加法器和第三加法器的输入端,所述第二加法器的输出端输出素数域结果c,所述第三加法器的输出端输出二元扩域结果d。
所述的双域乘法器包括有依次串接的64个半加/全加阵列,连接所述64个半加/全加阵列的进位输出端的华莱士树,分别连接所述wzllace树的进位输出端和求和输出端的进位传播加法器,其中,所述的64个半加/全加阵列的第一个半加/全加阵列的输入端接收RAM存储器单元输入的乘数X和乘数Y,最后一个半加/全加阵列的输出端分别连接所述的进位传播加法器的输入端和所述的第二加法器,所述的进位传播加法器的输出端连接所述的第三加法器。
本发明的一种支持双域的快速RSA密码协处理器,基于前人对RSA模幂算法以及蒙哥马利模乘算法的研究基础之上,与抗侧信道攻击方法相结合,实现了具有一定的抗侧信道攻击的专用硬件密码加速模块。相比于通用处理器、专用集成电路以及FPGA等实现方式,本发明在性能及安全性上都有一定的优势。相比于其他RSA加密硬件,本发明添加了支持双域的功能,扩展额外的数据通路,利用各功能单元之间的级联,有效地避免了大量的冗余数据写回过程,提高了RSA的加解密性能,实现了不同有限域之间切换的功能,并充分复用了硬件资源,与仅支持单域运算的密码模块,面积增加不到20%,效果非常明显。
具体实施方式
下面结合实施例和附图对本发明的一种支持双域的快速RSA密码协处理器做出详细说明。
本发明的一种支持双域的快速RSA密码协处理器,在模幂层采用了蒙哥马利阶梯算法,在模乘层使用FIOS算法。并通过对模乘、模幂算法进行综合研究与整体考虑,对运算中相似运算进行硬件复用以减小面积;对架构中RAM进行特殊连接以减少模幂过程中数据的多次搬运,节省数据传输时间;对硬件实现过程中进行可配置设计,使得加解密支持不同有限域的运算,从而可以满足不同用户的需求,同时为了支持两种最长使用的有限域,设计了一种高效64bit*64bit双域乘法器。其次通过对侧信道攻击的研究,从最初的算法研究到后期的硬件设计过程中,将抗攻击特性贯穿于整个设计之中,使得硬件设计可以有效的防止功耗攻击和故障攻击,在此基础之上,对硬件模乘模块设计进行了改进,从而防止了模乘泄露功耗的隐患。
本发明的一种支持双域的快速RSA密码协处理器设计了特殊的指令集,用户通过访问预留的接口,传输特定的指令,可以动态的调整运算的有限域。为了系统能够方便的集成于SoC(System on Chip)之上,本发明采用的是单口RAM接口信号与外部互联,系统所有主要数据以及RAM均为64bit位宽。
如图1所示,本发明的一种支持双域的快速RSA密码协处理器,包括:域控制寄存器1,用于接收外部输入的控制信号;控制寄存器2,用于接收外部输入的控制信号;RAM存储单元3,用于存储外部输入的操作数功输出运算结果;二元扩域5,连接域控制寄存器1的输出端,接收域控制寄存器1的控制信号;素数域6,连接域控制寄存器1的输出端,接收域控制寄存器1的控制信号;双域模乘单元4,分别连接控制寄存器2、RAM存储单元3、二元扩域5和素数域6,用于根据域控制寄存器1的控制信号对RAM存储单元3存储的外部操作数进行计算,并将计算结果存回到RAM存储单元3内。其中,
所述的RAM存储单元3包括有第一单口RAM存储单元31、第二单口RAM存储单元32和第三单口RAM存储单元33。所述的双域模乘单元4包括有用于模拟算法执行的状态机单元41和用于通过融合两种不同有限域的算法结构,将模乘运算统一为a+x*y+b的乘累加器单元42。
本发明所述的状态机单元41是采用了蒙哥马利优化算法FIOS(finelyintegrated operand scanning method)进行设计的。蒙哥马利优化算法中将乘数X、Y、N分成r bit的数进行运算,这样对硬件实现非常有好处,可以高效利用寄存器。而且算法中所有操作均可变化为一种操作,这样将有利于节省硬件资源。蒙哥马利优化算法包括有素域下的模乘算法和二元扩域下的模乘算法。其中,
1、素域下的模乘算法
表1给出的算法是一种高基的蒙哥马利模乘算法,将大数的操作数划分为一块块小bit的字参与运算,本专利设计的是64bit位宽的高基模乘器。
表1、素域的FIOS算法
2、二元扩域下的模乘算法
在二元扩域下,所有的数据均可视为多项式的系数,因此他们的运算也转换为多项式系数的运算法则,如加法演变为按位模二加法。对应的,乘法中的部分积相加时也按照一样的规则。表2给出了支持二元扩域的FIOS算法。
表2、二元扩域的FIOS算法
3、不同域的算法比较
素域和二元域下FIOS算法的结构基本上相同,除了素域和二元域下基本的加法、乘法运算法则的区别,还有两点区别:
3.1、二元扩域下模数N的位数通常超出乘数的位数,且通常超出2bit,如256bit的模乘模数为258bit,且超出的最高位为1,则模数N相较素域下多出2bit(值为0x2),因此在算法第二层内循环的最后一次迭代时需将这多出的2bit加入计算(如表2中第6步)。
3.2、二元扩域下运算不会产生进位,因此最后一步的减法一定不会被执行,可直接去掉。
4、双域的模乘器的架构
通过融合两种不同有限域的算法结构,将模乘运算统一为a+x*y+b,这样有助于运算资源的高效可复用,极大的节省了硬件资源,优化了硬件面积。如图2为双域模乘器逻辑结构图。
如图2所示,本发明所述的状态机单元41包括有分别对应接收从RAM存储单元3输出的操作数Xi的第四多路选择器415、操作数Yi的第七多路选择器418、操作数Xi,Tj的第一多路选择器412、操作数Ti,Nj的或门413、操作数Zi的第三多路选择器414,以及设置有分别连接所述乘累加器单元42的二元扩域输出端并存储不同时间的进位累加数的Ca存储器419和Cb存储器4120、分别对应连接所述的第一多路选择器412、第二多路选择器413和第三多路选择器414的输出端的用于存储操作数的X存储器421、Y存储器422和Z存储器4123,其中,所述或门413的另一输入端接收外部的Inv信号输出端连接第二多路选择器413的输入端,所述的第一多路选择器412、第二多路选择器413和第三多路选择器414的输入端还分别连接所述乘累加器单元42的素数域输出端,所述的第三多路选择器414和第四多路选择器415的输入端还连接Ca存储器419的输出端,所述Cb存储器4120的输出端分别连接第四多路选择器415和第五多路选择器416的输入端,所述X存储器421、Y存储器4122和Z存储器4123的输出端分别对应连接第五多路选择器416、第六多路选择器417和第七多路选择器418的输入端,所述第五多路选择器416的另一个输入端接收数字1,所述的第四多路选择器415、第五多路选择器416、第六多路选择器417和第七多路选择器418的输出端分别构成状态机单元41的输出端连接所述的乘累加器单元42。
减少除法在运算中出现的次数,是提高运算速度的有效途径。1985年,Montgomery提出的模乘算法很快替换了经典模约减算法,蒙哥马利算法不依赖于长整数的比较和除法,而是把数都用N模的余数来表示,把对N的取模运算转化为对2指数的除法运算,在硬件实现过程中就是移位操作,是一种十分便于硬件实现的算法,所以应用最为广泛。
素域和二元扩域下基本的加法、乘法具有显著的区别,关键在于二元扩域下的运算是多项式运算,与传统的运算相比有不会产生进位的特性。二元扩域下数据可以看成是对应多项式的系数,因此加法可看成多项式相加,按照多项式运算中同次项相加的法则,只有相同位置的数才会相加,不会有进位的问题,而且是模2加法,这样就可以将二元扩域加法表示为数据在二进制形式下的按位异或操作。由于乘法可分解成部分积之和来进行运算,因此可以通过在部分积相加的过程中分离出异或操作的结果来得到二元扩域下的乘法结果,然后再将加法过程中产生的进位加回,即可得到普通乘法结果。支持64bit乘累加器结构如图3,双域乘法器原理如图4。
如图3所示,所述的乘累加器单元42由输入端分别接收存储器单元3输入的64bit的二进制的加数a、加数b、乘数X和乘数Y,输出端分别输出素数域结果c和二元扩域结果d的乘累加器构成,所述的乘累加器包括有第一加法器421、第二加法器422、第三加法器423和对接收的乘数X和乘数Y相乘后分别输出给第二加法器422的双域乘法器424,所述的第一加法器421的输入端分别接收二进制的加数a、加数b,输出端分别连接第二加法器422和第三加法器423的输入端,所述第二加法器422的输出端输出素数域结果c,所述第三加法器423的输出端输出二元扩域结果d。
如图4所示,所述的双域乘法器424包括有依次串接的64个半加/全加阵列4241,连接所述64个半加/全加阵列4241的进位输出端的华莱士树4242,分别连接所述华莱士树4242的进位输出端和求和输出端的进位传播加法器4243,其中,所述的64个半加/全加阵列4241的第一个半加/全加阵列的输入端接收存储器单元3输入的乘数X和乘数Y,最后一个半加/全加阵列的输出端分别连接所述的进位传播加法器4243的输入端和所述的第二加法器422,所述的进位传播加法器4243的输出端连接所述的第三加法器423。