发明内容
为了解决上述问题,本发明提出了一种用于智能卡的Montgomery模乘器的数据处理方法及系统,能够在硬件规模和功耗基本不变的情况下,使算法执行速度大幅提高。
为了达到上述目的,本发明提出了一种用于智能卡的Montgomery模乘器的数据处理方法,该方法包括:
通过4s2+7s次乘法运算获得Montgomery模乘器的运算结果的低位2s个字;采用32x32位的乘法器分别计算出axb和mxn的w位结果。
通过4s2-4s次乘法运算获得Montgomery模乘器的运算结果的高位2s个字;采用32x32位的乘法器分别计算出axb和mxn的w位结果。
其中,a、b、n为2s位的232进制数;s=k/64,k是要运算的模数的长度,s向上取整。
m=t·n’mod r;gcd(n,r)=1,r为2的整数次幂,n’满足r·r-1-n·n’=1。
所述w为64位。
a=(a[2s-1],a[2s-2],…,a[1],a[0]);
b=(b[2s-1],b[2s-2],…,b[1],b[0]);
n=(n[2s-1],n[2s-2],…,n[1],n[0]);
m=(m[2s-1],m[2s-2],…,m[1],m[0])。
优选地,采用32x32位的乘法器计算出axb的w位结果包括以下四个步骤:
21、将a[2j]*b[2(i-j)]的结果的低32位和高32位分别存储在中间结果寄存器MOL和MOH中,将中间结果寄存器t1、t0中存储的w位数据分别和MOH、MOL中存储的w位数据相加,其中t1存储w位数据的高32位,t0存储w位数据的低32位;将相加结果的高32位与低32位分别存储在中间结果寄存器t1,t0中;相加结果的进位存储在进位保存寄存器C0中。
22、将a[2j+1]*b[2(i-j)]的结果的高32位和低32位分别存储在中间结果寄存器MOH和MOL中,将中间结果寄存器t2、t1中存储的w位数据分别和中间结果寄存器MOH、MOL中存储的w位数据相加,其中t2存储w位数据的高32位,t1存储w位数据的低32位;将相加结果的高32位与低32位分别存储在中间结果寄存器t2、t1中;相加结果的进位存储在进位保存寄存器C1中。
23、a[2j]*b[2(i-j)+1]的过程与步骤22相同。
24、将a[2j+1]*b[2(i-j)+1]的结果的高32位和低32位分别存储在中间结果寄存器MOH和MOL中,将中间结果寄存器t3、t2中存储的w位数据分别和中间结果寄存器MOH、MOL中存储的w位数据相加获得第一相加结果,其中t3存储w位数据的高32位,t2存储w位数据的低32位;将第一相加结果与进位保存寄存器C0中存储的数据相加获得第二相加结果,将第二相加结果的高32位与低32位分别存储在中间结果寄存器t3、t2中;两次相加结果的进位存储在进位保存寄存器C2中;其中,i的取值范围为:0到s-1;j的取值范围为:0到i-1。
MOH、MOL、t3、t2、t1、t0是6个w/2位的所述中间结果寄存器,C2、C1分别为不小于log2(3s)、log2(4s)位的进位保存寄存器,C0为1位的进位保存寄存器,中间结果寄存器与进位保存寄存器的初始值均为0。
在获得Montgomery模乘器的运算结果的高位2s个字的运算过程中,i的取值范围为:0到s-1;j的取值范围为:i+1到s-1。
优选地,该方法还包括:低位计算模块每次需要计算{a[2i+1],a[2i]}x{b[1],b[0]}和{m[2i+1],m[2i]}x{n[1],n[0]},并且计算出下次运算所需的m[2i+1]和m[2i],存储在m的m[2i+1]、m[2i]位置;低位计算模块每执行一次运算,运算结果的高w位存储在中间结果寄存器t3、t2中,其中,t3存储所述高w位中的高32位,t2存储高w位中的低32位;运算结果的低w位存储在中间结果寄存器t1、t0中,其中,t1存储低w位中的高32位,t0存储低w位中的低32位;运算结果的进位存储在进位保存寄存器C2中,并且将运算结果右移w位。
优选地,该方法还包括:高位计算模块每执行一次运算,将第二计算模块产生的w位的运算结果保存在数据m的m[2i+1]、m[2i]存储位置,其中m[2i+1]存储运算结果的高32位,m[2i]存储运算结果的低32位;高位计算模块每执行一次运算,运算结果的高w位存储在中间结果寄存器t3、t2中,其中,t3存储高w位中的高32位,t2存储高w位中的低32位;运算结果的低w位存储在中间结果寄存器t1、t0中,其中,t1存储低w位中的高32位,t0存储低w位中的低32位;运算结果的进位存储在进位保存寄存器C2中,并且运算结果右移w位,并将m[2i+1]、m[2i]存储的w位数据和n[2i+1]、n[2i]存储的w位数据相减,其中,n[2i+1]存储w位数据的高32位,n[2i]存储w位数据的低32位;将相减的结果的高32位存储在b[2i+1]中,低32位存储在b[2i]中,相减的结果的借位存储在借位寄存器B中。
优选地,通过以下方法实现采用32×32位乘法器计算出64x64位乘法结果:
从存储器中读取w位数据a的高w/2位和低w/2位以及w位数据b的低w/2位。
在第一个时钟周期内,数据a的低w/2位与数据b的低w/2位相乘,得到w位的第一乘法结果,同时读取数据b的高w/2位和下次大循环中需要进行乘法的数据n的高w/2位。
在第二个时钟周期内,数据a的高w/2位与数据b的低w/2位相乘,得到w位的第二乘法结果,同时读取下次大循环中需要进行乘法的数据m的低w/2位。
在第三个时钟周期内,数据a的低w/2位与数据b的高w/2位相乘,得到w位的第三乘法结果,同时读取下次需要进行乘法的数据n的低w/2位。
在第四个时钟周期内,数据a的高w/2位与数据b的高w/2位相乘,得到w位的第四乘法结果,同时读取下次需要进行乘法的数据m的高w/2位。
将第一乘法结果、第二乘法结果、第三乘法结果以及第四乘法结果相加获得2w位的最终乘法结果。
优选地,该方法还包括:采用两级流水线硬件结构,并行执行乘法运算和加法运算。
本发明还提出一种用于智能卡的Montgomery模乘器的数据处理系统,该系统包括:低位计算模块和高位计算模块。
低位计算模块,用于通过4s2+7s次乘法运算获得Montgomery模乘器的运算结果的低位2s个字。
高位计算模块,用于通过4s2-4s次乘法运算获得Montgomery模乘器的运算结果的高位2s个字。
低位计算模块包括第一算法模块,用于采用32x32位的乘法器分别计算出axb和mxn的w位结果。
高位计算模块包括第二算法模块,用于执行与所述第一计算模块相同的运算过程。
其中,a、b、n为2s位的232进制数;s=k/64,k是要运算的模数的长度,s向上取整。
m=t·n’mod r;gcd(n,r)=1,r为2的整数次幂,n’满足r·r-1-n·n’=1。
所述w为64位。
a=(a[2s-1],a[2s-2],…,a[1],a[0]);
b=(b[2s-1],b[2s-2],…,b[1],b[0]);
n=(n[2s-1],n[2s-2],…,n[1],n[0]);
m=(m[2s-1],m[2s-2],…,m[1],m[0])。
优选地,第一计算模块通过以下步骤实现采用32x32位的乘法器计算出axb的w位结果,mxn与axb的计算方法相同:
81、将a[2j]*b[2(i-j)]的结果的低32位和高32位分别存储在中间结果寄存器MOL和MOH中,将中间结果寄存器t1、t0中存储的w位数据分别和MOH、MOL中存储的w位数据相加,其中t1存储w位数据的高32位,t0存储w位数据的低32位;将相加结果的高32位与低32位分别存储在中间结果寄存器t1、t0中;相加结果的进位存储在进位保存寄存器C0中。
82、将a[2j+1]*b[2(i-j)]的结果的高32位和低32位分别存储在中间结果寄存器MOH和MOL中,将中间结果寄存器t2、t1中存储的w位数据分别和中间结果寄存器MOH、MOL中存储的w位数据相加,其中t2存储w位数据的高32位,t1存储w位数据的低32位;将相加结果的高32位与低32位分别存储在中间结果寄存器t2、t1中;相加结果的进位存储在进位保存寄存器C1中。
83、a[2j]*b[2(i-j)+1]的过程与步骤82相同。
84、将a[2j+1]*b[2(i-j)+1]的结果的高32位和低32位分别存储在中间结果寄存器MOH和MOL中,将中间结果寄存器t3、t2中存储的w位数据分别和中间结果寄存器MOH、MOL中存储的w位数据相加获得第一相加结果,其中t3存储w位数据的高32位,t2存储w位数据的低32位;将第一相加结果与进位保存寄存器C0中存储的数据相加获得第二相加结果,将第二相加结果的高32位与低32位分别存储在中间结果寄存器t3、t2中;两次相加结果的进位存储在进位保存寄存器C2中。
其中,i的取值范围为:0到s-1;j的取值范围为:0到i-1。
MOH、MOL、t3、t2、t1、t0是6个w/2位的中间结果寄存器,C2、C1分别为不小于log2(3s)、log2(4s)位的所述进位保存寄存器,C0为1位的进位保存寄存器,中间结果寄存器与进位保存寄存器的初始值均为0。
其中,第二计算模块在获得Montgomery模乘器的运算结果的高位2s个字的运算过程中,i的取值范围为:0到s-1;j的取值范围为:i+1到s-1。
优选地,低位计算模块还用于:每次都要计算{a[2i+1],a[2i]}x{b[1],b[0]}和{m[2i+1],m[2i]}x{n[1],n[0]},并且计算出下次运算所需的m[2i+1]和m[2i],存储在m的m[2i+1]、m[2i]位置;低位计算模块每执行一次运算,运算结果的高w位存储在中间结果寄存器t3、t2中,其中,t3存储所述高w位中的高32位,t2存储所述高w位中的低32位;运算结果的低w位存储在中间结果寄存器t1、t0中,其中,t1存储低w位中的高32位,t0存储低w位中的低32位;运算结果的进位存储在进位保存寄存器C2中,并且将运算结果右移w位。
优选地,高位计算模块还用于,每执行一次运算,将第二计算模块产生的w位的运算结果保存在数据m的m[2i+1]、m[2i]存储位置,其中m[2i+1]存储运算结果的高32位,m[2i]存储运算结果的低32位;高位计算模块每执行一次运算,运算结果的高w位存储在中间结果寄存器t3、t2中,其中,t3存储高w位中的高32位,t2存储高w位中的低32位;运算结果的低w位存储在中间结果寄存器t1、t0中,其中,t1存储低w位中的高32位,t0存储低w位中的低32位;运算结果的进位存储在进位保存寄存器C2中,并且将运算结果右移w位,并将m[2i+1]、m[2i]存储的w位数据和n[2i+1]、n[2i]存储的w位数据相减,其中,n[2i+1]存储w位数据的高32位,n[2i]存储w位数据的低32位;将相减的结果的高32位存储在b[2i+1]中,低32位存储在b[2i]中;相减的结果的借位存储在借位寄存器B中。
优选地,第一计算模块通过以下方法实现采用32×32位乘法器计算出64x64位乘法结果:
从存储器中读取w位数据a的高w/2位和低w/2位以及w位数据b的低w/2位。
在第一个时钟周期内,数据a的低w/2位与数据b的低w/2位相乘,得到w位的第一乘法结果,同时读取数据b的高w/2位和下次大循环中需要进行乘法的数据n的高w/2位。
在第二个时钟周期内,数据a的高w/2位与数据b的低w/2位相乘,得到w位的第二乘法结果,同时读取下次大循环中需要进行乘法的数据m的低w/2位。
在第三个时钟周期内,数据a的低w/2位与数据b的高w/2位相乘,得到w位的第三乘法结果,同时读取下次需要进行乘法的数据n的低w/2位。
在第四个时钟周期内,数据a的高w/2位与数据b的高w/2位相乘,得到w位的第四乘法结果,同时读取下次需要进行乘法的所述数据m的高w/2位。
将第一乘法结果、第二乘法结果、第三乘法结果以及第四乘法结果相加获得2w位的最终乘法结果。
优选地,该系统还包括结构配置模块:采用两级流水线硬件结构,并行执行乘法运算和加法运算。
与现有技术相比,本发明包括:通过4s2+7s次乘法运算获得Montgomery模乘器的运算结果的低位2s个字;采用32x32位的乘法器分别计算出axb和mxn的w位结果;通过4s2-4s次乘法运算获得Montgomery模乘器的运算结果的高位2s个字;采用32x32位的乘法器分别计算出axb和mxn的w位结果。通过本发明的方案,能够在硬件规模和功耗基本不变的情况下,使算法执行速度大幅提高。
具体实施方式
为了便于本领域技术人员的理解,下面结合附图对本发明作进一步的描述,并不能用来限制本发明的保护范围。
模乘器是公钥密码算法(RSA,ECC等)的核心部件,其性能直接影响算法的执行效率。Montgomery模乘算法利用移位替代传统模乘算法中的除法运算,提高了算法执行速度,并且十分适合硬件实现。本发明主要解决的问题是通过对FIPS(Finely Integrated Product Scanning)算法进行改进,在硬件实现过程中消除访问RAM的影响。
本发明采用FIPS算法实现Montgomery模乘器。由于智能卡硬件资源有限,并且双端口存储器面积大于同等容量的单端口存储器,因此本发明基于单端口存储器进行设计。FIPS算法提高速度的瓶颈在于从RAM读取数据效率较低,需要使用两个时钟周期才能获得进行乘法运算的两个乘数,因此提高算法速度的关键在于消除访问RAM的影响,并且提高时钟频率。本发明通过对FIPS算法进行改进,消除了访问RAM的影响。采用32x32位乘法器在四个时钟周期内实现64x64位的数据乘法,在硬件规模和功耗基本不变的情况下,使算法执行速度大幅提高;采用流水线设计,并行执行乘法运算和加法运算,减小了关键路径延迟,提高了算法执行的时钟频率,使其在某些高频率场合下进一步提高算法执行速度。
具体地,本发明提出了一种用于智能卡的Montgomery模乘器的数据处理方法,该方法包括:
S101、通过4s2+7s次乘法运算获得Montgomery模乘器的运算结果的低位2s个字;采用32x32位的乘法器分别计算出axb和mxn的w位结果。
S102、通过4s2-4s次乘法运算获得Montgomery模乘器的运算结果的高位2s个字;采用32x32位的乘法器分别计算出axb和mxn的w位结果。
其中,a、b、n为2s位的232进制数;s=k/64,k是要运算的模数的长度,s向上取整。
m=t·n’mod r;gcd(n,r)=1,r为2的整数次幂,n’满足r·r-1-n·n’=1。
所述w为64位。
a=(a[2s-1],a[2s-2],…,a[1],a[0]);
b=(b[2s-1],b[2s-2],…,b[1],b[0]);
n=(n[2s-1],n[2s-2],…,n[1],n[0]);
m=(m[2s-1],m[2s-2],…,m[1],m[0])。
优选地,采用32x32位的乘法器计算出axb的w位结果包括以下四个步骤:
21、将a[2j]*b[2(i-j)]的结果的低32位和高32位分别存储在中间结果寄存器MOL和MOH中,将中间结果寄存器t1、t0中存储的w位数据分别和MOH、MOL中存储的w位数据相加,其中t1存储w位数据的高32位,t0存储w位数据的低32位;将相加结果的高32位与低32位分别存储在中间结果寄存器t1、t0中;相加结果的进位存储在进位保存寄存器C0中。
22、将a[2j+1]*b[2(i-j)]的结果的高32位和低32位分别存储在中间结果寄存器MOH和MOL中,将中间结果寄存器t2、t1中存储的w位数据分别和中间结果寄存器MOH、MOL中存储的w位数据相加,其中t2存储w位数据的高32位,t1存储w位数据的低32位;将相加结果的高32位与低32位分别存储在中间结果寄存器t2、t1中;相加结果的进位存储在进位保存寄存器C1中。
23、a[2j]*b[2(i-j)+1]的过程与步骤22相同。
24、将a[2j+1]*b[2(i-j)+1]的结果的高32位和低32位分别存储在中间结果寄存器MOH和MOL中,将中间结果寄存器t3、t2中存储的w位数据分别和中间结果寄存器MOH、MOL中存储的w位数据相加获得第一相加结果,其中t3存储w位数据的高32位,t2存储w位数据的低32位;将第一相加结果与进位保存寄存器C0中存储的数据相加获得第二相加结果,将第二相加结果的高32位与低32位分别存储在中间结果寄存器t3、t2中;两次相加结果的进位存储在进位保存寄存器C2中。
其中,i的取值范围为:0到s-1;j的取值范围为:0到i-1。
MOH、MOL、t3、t2、t1、t0是6个w/2位的中间结果寄存器,C2、C1分别为不小于log2(3s)、log2(4s)位的进位保存寄存器,C0为1位的进位保存寄存器,中间结果寄存器与进位保存寄存器的初始值均为0。
其中,在获得Montgomery模乘器的运算结果的高位2s个字的运算过程中,i的取值范围为:0到s-1;j的取值范围为:i+1到s-1。
优选地,该方法还包括:低位计算模块每次需要计算{a[2i+1],a[2i]}x{b[1],b[0]}和{m[2i+1],m[2i]}x{n[1],n[0]},并且计算出下次运算所需的m[2i+1]和m[2i],存储在m的m[2i+1]、m[2i]位置;低位计算模块每执行一次运算,运算结果的高w位存储在中间结果寄存器t3、t2中,其中,t3存储高w位中的高32位,t2存储高w位中的低32位;运算结果的低w位存储在中间结果寄存器t1、t0中,其中,t1存储所述低w位中的高32位,t0存储低w位中的低32位;运算结果的进位存储在进位保存寄存器C2中,并且将运算结果右移w位。
优选地,该方法还包括:高位计算模块每执行一次运算,将第二计算模块产生的w位的运算结果保存在数据m的m[2i+1]、m[2i]存储位置,其中m[2i+1]存储运算结果的高32位,m[2i]存储运算结果的低32位;高位计算模块每执行一次运算,运算结果的高w位存储在中间结果寄存器t3、t2中,其中,t3存储所述高w位中的高32位,t2存储高w位中的低32位;运算结果的低w位存储在中间结果寄存器t1、t0中,其中,t1存储低w位中的高32位,t0存储低w位中的低32位;运算结果的进位存储在进位保存寄存器C2中,并且运算结果右移w位,并将m[2i+1]、m[2i]存储的w位数据和n[2i+1]、n[2i]存储的w位数据相减,其中,n[2i+1]存储w位数据的高32位,n[2i]存储w位数据的低32位;将相减的结果的高32位存储在b[2i+1]中,低32位存储在b[2i]中,相减的结果的借位存储在借位寄存器B中。
优选地,通过以下方法实现采用32×32位乘法器计算出64x64位乘法结果:
从存储器中读取w位数据a的高w/2位和低w/2位以及w位数据b的低w/2位。
在第一个时钟周期内,数据a的低w/2位与数据b的低w/2位相乘,得到w位的第一乘法结果,同时读取数据b的高w/2位和下次大循环中需要进行乘法的数据n的高w/2位。
在第二个时钟周期内,数据a的高w/2位与数据b的低w/2位相乘,得到w位的第二乘法结果,同时读取下次大循环中需要进行乘法的数据m的低w/2位。
在第三个时钟周期内,数据a的低w/2位与数据b的高w/2位相乘,得到w位的第三乘法结果,同时读取下次需要进行乘法的数据n的低w/2位。
在第四个时钟周期内,数据a的高w/2位与数据b的高w/2位相乘,得到w位的第四乘法结果,同时读取下次需要进行乘法的数据m的高w/2位。
将第一乘法结果、第二乘法结果、第三乘法结果以及第四乘法结果相加获得2w位的最终乘法结果。
优选地,该方法还包括:采用两级流水线硬件结构,并行执行乘法运算和加法运算。
本发明还提出一种用于智能卡的Montgomery模乘器的数据处理系统01,该系统包括:低位计算模块02和高位计算模块03。
低位计算模块02,用于通过4s2+7s次乘法运算获得所述Montgomery模乘器的运算结果的低位2s个字。
高位计算模块03,用于通过4s2-4s次乘法运算获得Montgomery模乘器的运算结果的高位2s个字。
低位计算模块02包括第一算法模块04,用于采用32x32位的乘法器分别计算出axb和mxn的w位结果。
高位计算模块03包括第二算法模块05,用于执行与第一计算模块04相同的运算过程。
其中,a、b、n为2s位的232进制数;s=k/64,k是要运算的模数的长度,s向上取整。
m=t·n’mod r;gcd(n,r)=1,r为2的整数次幂,n’满足r·r-1-n·n’=1。
所述w为64位。
a=(a[2s-1],a[2s-2],…,a[1],a[0]);
b=(b[2s-1],b[2s-2],…,b[1],b[0]);
n=(n[2s-1],n[2s-2],…,n[1],n[0]);
m=(m[2s-1],m[2s-2],…,m[1],m[0])。
优选地,第一计算模块04通过以下步骤实现采用32x32位的乘法器计算出axb的w位结果,mxn与axb的计算方法相同:
81、将a[2j]*b[2(i-j)]的结果的低32位和高32位分别存储在中间结果寄存器MOL和MOH中,将中间结果寄存器t1、t0中存储的w位数据分别和MOH、MOL中存储的w位数据相加,其中t1存储w位数据的高32位,t0存储w位数据的低32位;将相加结果的高32位与低32位分别存储在中间结果寄存器t1、t0中;相加结果的进位存储在进位保存寄存器C0中。
82、将a[2j+1]*b[2(i-j)]的结果的高32位和低32位分别存储在中间结果寄存器MOH和MOL中,将中间结果寄存器t2、t1中存储的w位数据分别和中间结果寄存器MOH、MOL中存储的w位数据相加,其中t2存储w位数据的高32位,t1存储w位数据的低32位;将相加结果的高32位与低32位分别存储在中间结果寄存器t2、t1中;相加结果的进位存储在进位保存寄存器C1中。
83、a[2j]*b[2(i-j)+1]的过程与步骤82相同。
84、将a[2j+1]*b[2(i-j)+1]的结果的高32位和低32位分别存储在中间结果寄存器MOH和MOL中,将中间结果寄存器t3、t2中存储的w位数据分别和中间结果寄存器MOH、MOL中存储的w位数据相加获得第一相加结果,其中t3存储w位数据的高32位,t2存储w位数据的低32位;将第一相加结果与进位保存寄存器C0中存储的数据相加获得第二相加结果,将第二相加结果的高32位与低32位分别存储在中间结果寄存器t3、t2中;两次相加结果的进位存储在进位保存寄存器C2中。
其中,i的取值范围为:0到s-1;j的取值范围为:0到i-1。
MOH、MOL、t3、t2、t1、t0是6个w/2位的中间结果寄存器,C2、C1分别为不小于log2(3s)、log2(4s)位的进位保存寄存器,C0为1位的进位保存寄存器,中间结果寄存器与进位保存寄存器的初始值均为0。
其中,第二计算模块05在获得Montgomery模乘器的运算结果的高位2s个字的运算过程中,i的取值范围为:0到s-1;j的取值范围为:i+1到s-1。
优选地,低位计算模块02还用于:每次都要计算{a[2i+1],a[2i]}x{b[1],b[0]}和{m[2i+1],m[2i]}x{n[1],n[0]},并且计算出下次运算所需的m[2i+1]和m[2i],存储在m的m[2i+1]、m[2i]位置;低位计算模块02每执行一次运算,运算结果的高w位存储在中间结果寄存器t3、t2中,其中,t3存储高w位中的高32位,t2存储高w位中的低32位;运算结果的低w位存储在中间结果寄存器t1、t0中,其中,t1存储低w位中的高32位,t0存储低w位中的低32位;运算结果的进位存储在进位保存寄存器C2中,并且将运算结果右移w位。
优选地,高位计算模块03还用于,每执行一次运算,将第二计算模块05产生的w位的运算结果保存在数据m的m[2i+1]、m[2i]存储位置,其中m[2i+1]存储运算结果的高32位,m[2i]存储运算结果的低32位;高位计算模块03每执行一次运算,运算结果的高w位存储在中间结果寄存器t3、t2中,其中,t3存储高w位中的高32位,t2存储高w位中的低32位;运算结果的低w位存储在中间结果寄存器t1、t0中,其中,t1存储低w位中的高32位,t0存储低w位中的低32位;运算结果的进位存储在进位保存寄存器C2中,并且将运算结果右移w位,并将m[2i+1]、m[2i]存储的w位数据和n[2i+1]、n[2i]存储的w位数据相减,其中,n[2i+1]存储w位数据的高32位,n[2i]存储w位数据的低32位;将相减的结果的高32位存储在b[2i+1]中,低32位存储在b[2i]中;相减的结果的借位存储在借位寄存器B中。
优选地,第一计算模块04通过以下方法实现采用32×32位乘法器计算出64x64位乘法结果:
从存储器中读取w位数据a的高w/2位和低w/2位以及w位数据b的低w/2位。
在第一个时钟周期内,数据a的低w/2位与数据b的低w/2位相乘,得到w位的第一乘法结果,同时读取数据b的高w/2位和下次大循环中需要进行乘法的数据n的高w/2位。
在第二个时钟周期内,数据a的高w/2位与数据b的低w/2位相乘,得到w位的第二乘法结果,同时读取下次大循环中需要进行乘法的数据m的低w/2位。
在第三个时钟周期内,数据a的低w/2位与数据b的高w/2位相乘,得到w位的第三乘法结果,同时读取下次需要进行乘法的所述数据n的低w/2位。
在第四个时钟周期内,数据a的高w/2位与数据b的高w/2位相乘,得到w位的第四乘法结果,同时读取下次需要进行乘法的数据m的高w/2位。
将第一乘法结果、第二乘法结果、第三乘法结果以及第四乘法结果相加获得2w位的最终乘法结果。
优选地,该系统还包括结构配置模块06:用于采用两级流水线硬件结构,并行执行乘法运算和加法运算。
下面通过具体实施例对本发明的方案进一步说明。
公钥密码学中的模乘运算通常是大数运算,需要将大数分解成位宽一定的字,变换为“多精度”数。若双字的位宽为w,则大整数可以用基为W=2w的2s(s=n/64)个字表示,n是要运算的模数的长度。该改进算法的核心思想是采用32x32位乘法器在四个时钟周期内实现64x64位的数据乘法,利用流水线方式设计,并行执行乘法运算和加法运算,在硬件规模和功耗基本不变的情况下,提高算法执行速度。基于FIPS算法的改进算法描述如下:
a、b、n为2s位的232进制数;
a=(a[2s-1],a[2s-2],…,a[1],a[0]);
b=(b[2s-1],b[2s-2],…,b[1],b[0]);
n=(n[2s-1],n[2s-2],…,n[1],n[0]);
MOH,MOL,t3,t2,t1,t0是6个w/2位的中间结果寄存器,C2,C1分别为不小于log2(3s),log2(4s)位的进位保存寄存器,C0为1位的进位保存寄存器,初始值均为0。
n0=-{n[1],n[0]}-1mod W,n0[1],n0[0]分别为n0的高w/2位和低w/2位。
该改进算法由两个大循环组成,每个大循环中嵌套一个内循环。第一个大循环用4s2+7s次乘法运算完成乘积结果的低位2s个字,第二个大循环用4s2-4s次乘法运算完成乘积结果的高位2s个字。第一个内循环中采用32x32位的乘法器分别计算出axb和mxn的w位结果,第一个内循环中axb和mxn计算方法相同,需要四步来实现:
第一步,将a[2j]*b[2(i-j)的结果低32位和高32位分别存在中间寄存器MOL和MOH中,同时中间寄存器{t1,t0}和{MOH,MOL}相加,结果保存在寄存器{C0,t1,t0}中。
第二步,将a[2j+1]*b[2(i-j)]的结果存在中间寄存器{MOH,MOL}中,同时寄存器{C1,t2,t1}和{MOH,MOL}相加,结果保存在寄存器{C1,t2,t1}中。
第三步,a[2j]*b[2(i-j)+1]的过程和第二步相同。
第四步,将a[2j+1]*b[2(i-j)+1]结果存在中间寄存器{MOH,MOL}中,同时寄存器{C2,t3,t2}、{MOH,MOL}、C0相加,结果保存在寄存器{C2,t3,t2}中。
内循环结束之后进入第一个大循环运算,在第一个大循环运算中每次需要计算{a[2i+1],a[2i]}x{b[1],b[0]}和{m[2i+1],m[2i]}x{n[1],n[0]},并且计算出下次运算所需的m[2i+1]和m[2i],存储在m的{m[2i+1],m[2i]}位置。第一个大循环每执行一次,结果被保存在寄存器{C2,t3,t2,t1,t0}中,每执行一次大循环,运算结果右移w位。
当运算完成乘积结果的低位2s个字之后,进入第二个大循环。在第二个大循环中,内循环的运算过程和第一个内循环相同。第二个大循环每执行一次,将内循环产生w位的运算结果保存在数据m的{m[2i+1],m[2i]}存储位置。同时,将运算结果{C2,t3,t2,t1,t0}右移w位,并将{m[2i+1],m[2i]}和{n[2i+1],n[2i]}相减,结果保存在寄存器{B,b[2i+1],b[2i]}中。其中,B为借位寄存器。由上述改进算法可以看出,该算法将减法循环合并在第二个大循环中去运算,可以减少s个时钟周期。最终,通过B和t0进行判断计算结果保存在m或b之中。该算法采用乘加结构,每次内循环结束之后执行一次写存储器的操作。算法由两个大循环组成,第一个大循环中需要4s2+7s次乘法,第二个大循环中需要4s2-4s次乘法,两个循环共用8s2+3s次乘法。
FIPS算法速度的瓶颈在于从RAM读取数据效率较低,通过上述改进算法可以看出,该算法采用32x32位乘法器在四个时钟周期内实现64x64位的数据乘法。同时,本发明在硬件设计中采用流水线设计,并行执行乘法运算和加法运算,在乘法运算的同时从存储器中读取下次需要进行乘法的数据,完全可以消除访问RAM对性能的影响。
以下为本发明方案的具体实施程序:
图3所示为32×32位乘法器四个周期计算64x64位乘法示意图,首先从存储器中读取w位数据a的高w/2位(aH)和低w/2位(aL)以及w位数据b的低w/2位(bL)。第一个时钟周期a的低w/2位(aL)与b的低w/2位(bL)相乘,得到w位的部分乘法结果,同时读取b的高w/2(bH)或下次需要进行乘法的数据n的高w/2(nH);第二个时钟周期a的高w/2位(aH)与b的低w/2位(bL)相乘,得到w位的部分乘法结果,同时读取下次需要进行乘法数据m的低w/2(mL);第三个时钟周期a的低w/2位(aL)与b的高w/2位(bH)相乘,得到w位的部分乘法结果,同时读取下次需要进行乘法数据n的低w/2(nL);第四个时钟周期a的高w/2位(aH)与b的高w/2位(bH)相乘,得到w位的部分乘法结果,同时读取下次需要进行乘法数据m的高w/2(mH);将四部分乘法结果相加即可得到2w位的最终乘法结果。在乘法运算的同时从存储器中读取下次需要进行乘法的数据,该方法可以消除访问RAM的影响,从而提高算法执行速度。而且,乘法器面积和电路功耗基本不受影响。
从上述改进算法结构中可以看出,算法的核心是循环的乘加操作。为提高算法执行效率,硬件实现可以采用两级流水线结构,并行执行乘法运算和加法运算。如图4所示,循环开始,首先从存储器中读取w位数据a的高w/2位和低w/2位以及w位数据b的低w/2位(第1、2、3步);第4步执行乘法操作,即a与b的低w/2位相乘,同时读取数据b的高w/2位;第5步执行乘法操作和加法操作,即a高w/2位与b的低w/2位相乘,第4步的乘法结果与{t1,t0}相加,同时读取数据m的低w/2位;第6、7、8步同样执行乘法操作和加法操作,第6步中a的低w/2位与b的高w/2位相乘,第5步的乘法结果与{c1,t2,t1}相加,同时读取数据n的低w/2位;第7步中a的高w/2位与b的高w/2位相乘,第6步的乘法结果与{c1,t2,t1}相加,同时读取数据m的高w/2位;第8步中m的低w/2位与n的低w/2位相乘,第7步的乘法结果与{c2,t3,t2}和C0相加,同时读取数据n的高w/2位;之后跳转到步骤1继续执行,乘加操作与第5步执行方式相同,直到跳出内循环为止。图2中的虚线框表示在循环的第一轮不执行乘法或加法操作;图中c0为1位进位寄存器,c1,c2为两个进位累加寄存器,它们用来保存加法结果的进位值。c1,c2的位宽与循环执行的次数相关,由于内循环中乘法的次数不超过2s,并且每次内循环中分别有4次和3次的加法进位值需要c1和c2来寄存,因此c1,c2位宽分别选为log2(4s)和log2(3s);t3,t2,t1,t0是4个w/2位的中间结果寄存器,用来保存加法运算结果。乘法器(MULT)的输出结果位宽为w位,{c1,t2,t1}位宽为log2(4s·2w),因此加法器(ADD)的位宽选为log2(4s·2w)位;当内循环结束后,在外循环中需要将{c2,t3}和c1中保存的结果进行相加,右移w位后,作为新的t2,t1,t0参与下次循环运算。
图5为内循环乘加硬件结构示意图。如图所示,第一级流水线由一个32x32位乘法器,三个输入寄存器以及乘法结果保存寄存器{MOH,MOL}组成。输入端分别包含w位数据a的高w/2位aH和低w/2位aL,b的高w/2位bH和低w/2位bL,m的高w/2位mH和低w/2位mL,n的高w/2位nH和低w/2位nL。第二级流水线由一个log2(4s·2w)位和两个log2(3s·2w)位加法器,以及加法结果寄存器和加法进位寄存器组成;根据执行执行步骤,加法器选择不同的输入和结果保存寄存器。当内循环的乘法和加法执行结束之后,在外循环部分将{c2,t3}寄存器和c1寄存器中保存的结果相加。
由于硬件中仅有一个位宽为w/2的同步存储器,因此算法速度提高的瓶颈在于消除访问存储器的影响。算法中有4个数据a、b、m、n参加乘法运算,因此需要8个时钟周期才能读出w位的待运算数据。在第一个大循环中,共有s个外循环和(s2-s)/2次内循环,每个内循环需要8个时钟周期,每个外循环由于需要接续内循环未完成操作以及自身的乘加运算需要14个时钟,因此第一个大循环共需要4s2+10s个时钟周期;第二个大循环包含s个外循环和(s2-s)/2次内循环,每个内循环需要8个时钟周期,每个外循环由于需要接续内循环未完成操作以及减法操作需要6个时钟,因此第二个大循环共需要4s2+2s个时钟周期因此本发明执行所需时钟周期数约为8s2+12s个时钟周期。
本发明与现有技术相比具有以下优点:
(1)改进FIPS算法,采用32x32位乘法器在四个时钟周期内实现64x64位的数据乘法,在电路面积和功耗基本不变的情况下,大幅提高了算法执行速度,适合对硬件资源和性能要求较高的场合应用。
(2)采用流水线乘加结构设计,减小关键路径延迟,提高了芯片运行频率。
需要说明的是,以上所述的实施例仅是为了便于本领域的技术人员理解而已,并不用于限制本发明的保护范围,在不脱离本发明的发明构思的前提下,本领域技术人员对本发明所做出的任何显而易见的替换和改进等均在本发明的保护范围之内。