CN105988771A - 模逆运算器 - Google Patents
模逆运算器 Download PDFInfo
- Publication number
- CN105988771A CN105988771A CN201510096487.2A CN201510096487A CN105988771A CN 105988771 A CN105988771 A CN 105988771A CN 201510096487 A CN201510096487 A CN 201510096487A CN 105988771 A CN105988771 A CN 105988771A
- Authority
- CN
- China
- Prior art keywords
- operand
- xlen
- bit
- ylen
- variable
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Executing Machine-Instructions (AREA)
Abstract
一种模逆运算器,用于计算Z=Y-1mod X,包括:控制器、移位器、加减法运算器以及存储器,其中:存储器适于存储第一操作数X、第二操作数Y、第一变量R以及第二变量S;移位器,位宽与M相等,适于以M为单位将X与Y进行移位操作;加减法运算器,位宽与M相等,适于对X中的M位数据与Y中的M位数据进行运算;控制器,包括适于缓存并更新X对应的二进制位长Xlen、Y对应的二进制位长Ylen的寄存器,控制器以M为单位从所述存储器中读取X以及Y,控制加减法运算器对X中的M位数据与Y中的M位数据进行运算,并将运算结果存储至存储器。采用所述模逆运算器,可以避免模逆运算参数过长导致的模逆运算器无法进行模逆运算的问题,扩展性较强。
Description
技术领域
本发明涉及信息安全领域,尤其涉及一种模逆运算器。
背景技术
模逆运算广泛应用在公钥密码体制中,例如,在RSA算法中的解密密钥生成时应用到模逆运算,模逆运算也可以用于椭圆曲线密码算法中的点加和倍点运算。
目前,求解模逆运算的方法主要包括模幂算法、扩展欧几里得算法、二进制扩展欧几里得算法等。
模幂算法以费马小定理为基础,将模逆运算转换成模幂运算,但是模幂算法无法确定模逆结果是否存在。采用模乘器作为硬件运算单元,较为复杂且功耗较大。
扩展欧几里得算法通过辗转相除计算最大公因子求解模逆,当最大公因子为非1整数时无法获取模逆的计算结果。采用除法器作为硬件运算单元,实现仍较为复杂。
二进制扩展欧几里得算法将除法转换成移位和加减法,降低了模逆运算器的设计复杂度。但是,在模逆运算的参数的位长较大时,模逆运算器的移位器与加减法运算器对应的位宽也要相应地增加。模逆运算器所能够进行运算的数据长度受移位器的位宽及加减法运算器的位宽限制。在模逆运算的参数的位长超出移位器或加减法运算器的位宽时,模逆运算器无法进行模逆运算。
发明内容
本发明实施例解决的是避免模逆运算参数过长导致的模逆运算器无法进行模逆运算的问题,扩展性较强。
为解决上述问题,本发明实施例提供一种模逆运算器,用于计算Z=Y-1mod X,其中Z为所述模逆运算的结果,X为第一操作数,Y为第二操作数,包括:控制器、移位器、加减法运算器以及存储器,其中:
所述存储器,适于存储第一操作数X、第二操作数Y、第一变量R以及第二变量S,其中:所述第一操作数X以及所述第二操作数Y均以预设的位长M为单位存储在所述存储器中,其中,M=N×L,N≥1,L为一个字的二进制长度;
所述移位器,位宽与M相等,适于以M为单位读取所述存储器中的第一操作数X与第二操作数Y,并将第一操作数X与第二操作数Y进行移位操作;
所述加减法运算器,位宽与M相等,适于对第一操作数X中的M位数据与第二操作数Y中的M位数据进行运算;
控制器,包括寄存器,所述寄存器适于缓存并更新所述第一操作数X对应的二进制位长Xlen、所述第二操作数Y对应的二进制位长Ylen,所述控制器以M为单位从所述存储器中读取所述第一操作数X以及所述第二操作数Y,控制所述加减法运算器对第一操作数X中的M位数据与第二操作数Y中的M位数据进行运算,并将运算结果存储至所述存储器。
可选的,所述N=1。
可选的,所述加减法运算器适于从第一操作数X中选取一字节长度的连续数据与第二操作数Y中选取的对应的一字节长度的连续数据进行运算,在运算结果出现进位或借位时,将当前输出的进位或借位作为下一字节数据的进位或借位的输入。
可选的,在Xlen不能被M整除时,将所述第一操作数X高位补符号位,将所述第一操作数X的位长Xlen扩展至被M整除;在Ylen不能被M整除时,将所述第二操作数Y高位补符号位,将所述第二操作数Y的位长Ylen扩展至被M整除。
与现有技术相比,本发明实施例的技术方案具有以下优点:
移位器在对X或Y进行移位操作时,以M为单位读取X或Y的数据进行移位操作;加减法运算器在对X与Y进行加减法运算时,以M为单位将X中的M个数据与Y中的M个数据进行加减法运算。也就是说,在整个模逆运算的过程中,移位器和加减法运算器均是以M为单位进行运算,即移位器和加减法运算器的位宽仅为M即可实现对较长的X和Y进行运算,从而可以避免模逆运算参数过长导致的模逆运算器无法进行模逆运算的问题,扩展性较高。
附图说明
图1是本发明实施例中的一种模逆运算器的结构示意图。
具体实施方式
现有的二进制扩展欧几里得算法将除法转换成移位和加减法,降低了模逆运算器的设计复杂度,但是,在模逆运算的参数的位长较大时,二进制扩展欧几里得模逆运算器的移位器与加减法运算器对应的位宽也要相应地增加。模逆运算器所能够进行运算的数据长度受移位器的位宽及加减法运算器的位宽限制。在模逆运算的参数的位长超出移位器或加减法运算器的位宽时,模逆运算器无法进行模逆运算。
在本发明实施例中,移位器在对X或Y进行移位操作时,以M为单位读取X或Y的数据进行以为操作;加减法运算器在对X与Y进行加减法运算时,以M为单位将X中的M个数据与Y中的M个数据进行加减法运算。也就是说,在整个模逆运算的过程中,移位器和加减法运算器均是以M为单位进行运算,即移位器和加减法运算器的位宽仅为M即可实现对较长的X和Y进行运算,从而可以避免模逆运算参数过长导致的模逆运算器无法进行模逆运算的问题,扩展性较高。
为使本发明实施例的上述目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施例做详细的说明。
参照图1,本发明实施例提供了一种模逆运算器,用于计算Z=Y-1mod X,其中Z为所述模逆运算的结果,X为第一操作数,Y为第二操作数,包括:存储器101、移位器102、加减法运算器103以及控制器104,其中:
存储器101,适于存储模逆运算中的第一操作数X、第二操作数Y,以及预设的第一变量R和第二变量S。
在具体实施中,可以将第一操作数X与第二操作数Y分别以预设的位长M为单位分段存储在存储器101中。在本发明实施例中,M可以为一个字的二进制长度的整数倍,即M=N×L,L为一个字的二进制长度。可以理解的是,M也可以等于一个字的二进制长度的非整数倍,M可以根据实际的应用场景选取。
例如,M的值可以为16,即:将第一操作数X与第二操作数均以位长为16为单位,划分成多个数据段并存储在存储器101中。又如,M的值可以为24,M的值也可以为32或其他值,此处不做赘述。
在实际应用中,在将第一操作数X以位长为M划分成多个数据段并存储在存储器101中时,存在第一操作数X无法被M整除的情况。在本发明一实施例中,针对上述情况,对第一操作数X进行扩展,具体为:在第一操作数X的最高位处补符号位,使得经过扩展的第一操作数X的位长被M整除。
相应地,在将第二操作数Y以位长为M划分成多个数据段并存储在存储器101中时,存在第二操作数Y无法被M整除的情况。在本发明一实施例中,针对上述情况,对第二操作数Y进行扩展,具体为:在第二操作数Y的最高位处补符号位,使得经过扩展的第二操作数Y的位长被M整除。
例如,第一操作数X为1010101101100011100110011001,M=16,X的位长为28,无法被M=16整除,因此,将第一操作数X扩展为00001010101101100011100110011001,扩展后的X的位长为32,则第一操作数X在存储器101中的存储方式为:0000101010110110,0011100110011001。
移位器102,位宽与M相等,以M为单位从存储器101中读取第一操作数X与第二操作数Y,对第一操作数X与第二操作数Y进行移位操作。
在本发明实施例中,移位器102的位宽可以与M相等。由于第一操作数X与第二操作数Y均以M为单位存储在存储器101中,因此移位器102可以一次从存储器101中读取M位数据。在进行左移时,例如,将第一操作数X左移N1位,移位器102读取第一操作数X的最低数据段,将最低数据段低位补N1位0,高位的N1位数据补到其左边数据段作为低位,最高数据段的高N1位舍弃,得到左移N1位的操作数X。
例如,第一操作数X在存储器101中的存储方式为:0000101010110110,0011100110011001。控制器104向移位器102发送将第一操作数X左移4位的操作指令。移位器102接收到左移操作指令后,将最低16位数据左移4位,得到1001100110010000,0011与高位数据段进行结合,最高4位0000舍弃,得到左移4位的第一操作数X为:10101011011000111001100110010000。
加减法运算器103,位宽与M相等,以M为单位从存储器101中读取第一操作数X与第二操作数Y,并对读取出的第一操作数X中的M位数据与第二操作数Y中的M位数据进行加法运算或减法运算。
在本发明实施例中,需要注意的是,加减法运算器103在对第一操作数X与第二操作数Y进行加法运算时,例如,将第一操作数X与第二操作数Y相加,先按照预先设定的加法规则将第一操作数X与第二操作数Y高位对齐或低位对齐。将第一操作数X与第二操作数Y对齐部分的最低M位数据进行相加,在进行相加的过程中产生进位时,将产生的进位作为相邻高位M位数据加法运算的进位输入。
加减法运算器103在对第一操作数X与第二操作数Y进行减法运算时,例如,将第一操作数与第二操作数Y相减,先按照预先设定的减法规则将第一操作数X与第二操作数Y高位对齐或低位对齐。将第一操作数X与第二操作数Y对齐部分的最低M位数据进行相减,在进行相减的过程中产生借位时,将产生的借位作为相邻高位M位数据减法运算的借位输入。
例如,在M=L时,即M的长度为一个字的位长时,M=16。X为位长为128位,Y的位长为64位,加减法运算器103将第一操作数X与第二操作数Y高位对齐相加,即第一操作数X和第二操作数Y之间高位对齐部分的位长为64位。选取第一操作数X的第65~80位与第二操作数Y的第1~16位进行加法运算,在产生进位时,将进位作为第一操作数第81~96位与第二操作数第17~32位相减运算时的进位输入。
相类似的,第一操作数X与第二操作数Y之间的相减运算的过程可以参照上述示例,此处不做赘述。
控制器104,以M为单位从存储器101中以M为单位从读取第一操作数X以及第二操作数Y,控制移位器102将第一操作数X或第二操作数Y进行移位操作,控制加减法运算器103对第一操作数X中选取的M位数据与第二操作数Y中选取的对应的M位数据进行加减法运算,并将加减法运算器103得到的运算结果存储至存储器101。
在本发明实施例中,控制器104中可以设置有寄存器。可以通过寄存器缓存第一操作数X对应的二进制位长Xlen以及第二操作数Y对应的二进制位长Ylen。在模逆运算的过程中,当Xlen或Ylen发送改变时,寄存器将存储的Xlen或Ylen更新为更改以后的Xlen或Ylen。
在本发明实施例中,采用上述模逆运算器计算Z=Y-1mod X时,可以通过采用将第一操作数X与第二操作数Y左移之后进行运算来实现,也可以通过采用将第一操作数X与第二操作数Y右移之后进行运算来实现。
下面分别对采用左移算法进行模逆运算以及采用右移算法进行模逆运算进行说明。
1、采用右移算法进行模逆运算。
首先,对采用右移算法进行模逆运算的基本原理进行说明。
第一操作数X的位长为Xlen,第二操作数Y的位长为Ylen,设定第一变量R=0,以及第二变量S=1。
(1.1)在Xlen≥Ylen时,计算X模Y。将Y右移n1位至最低位为1,将第二变量S更新为S=S/2n1。将X右移m1位至最低位为1,将第一变量R更新为R=R/2m1。
在X为正数时,将X与Y低位对齐做减法,将得到的差值作为更新后的X值,并将Xlen更新为Xlen=Xlen-m1。将第一变量R与第二变量S低位对齐做加法,得到的和值作为更新后的第一变量R。
在X为负数时,将X与Y低位对齐做加法,将得到的和值作为更新后的X值,并将Xlen更新为Xlen=Xlen-m1。将第一变量R与第二变量S低位对齐做减法,得到的差值作为更新后的第一变量R。
(1.2)在Ylen≥Xlen时,计算Y模X。将X右移m2位至最低位为1,将第一变量R更新为R=R/2m2。将Y右移n2位至最低位为1,将第二变量S更新为S=S/2n2。
在Y为正数时,将Y与X低位对齐做减法,将得到的差值作为更新后的Y值,并将Ylen更新为Ylen=Ylen-n2。将第二变量S与第一变量R低位对齐做加法,得到的和值作为更新后的第二变量S。
在Y为负数时,将Y与X低位对齐做加法,将得到的和值作为更新后的Y值,并将Ylen更新为Ylen=Ylen-n2。将第二变量S与第一变量R低位对齐做减法,得到的差值作为更新后的第二变量S。
重复上述步骤(1.1)和步骤(1.2),直至更新后的X=0或更新后的Y=0时,停止模逆运算。
在更新后的X=0且更新后的Y=1时,模逆运算的结果为更新后的第二变量S;在更新后的X=1且更新后的Y=0时,模逆运算的结果为X的初始值与更新后的第一变量R之差;在更新后的X与更新后的Y其中之一等于0而另一个不等于1时,所述模逆运算的结果不存在。
下面以X=17,Y=13为例。分别将X和Y转换成对应的二进制数,则X=10001,Y=1101。初始化第一变量R=0,第二变量S=1,初始的Xlen=5,Ylen=4。
X的最低位为1,Y的最低位为1,即X和Y均无需进行右移操作,m1=0,n1=0。Xlen>Ylen,X与Y均为整数,将X和Y低位对齐做减法,得到的差值作为更新后的X值,即X=X-Y=10001-1101=00100。Xlen更新为Xlen=Xlen-m1=5。去除更新后的X的符号位,则X=100,对应的,Xlen更新为Xlen=3。
由于m1=0,n1=0,因此,更新后的S=S/2n1=1,更新后的R=R/2m1=0。将R与S低位对齐相加,得到的和值作为更新后的R。更新后的R=R+S=0+1=1。
更新后X的位长Xlen=3,Ylen=4,即Ylen>Xlen。将X右移m2位至最低位为1,由于更新后的X=100,则X的右移位数m2=2。有上一步骤可知,当前R=1。X右移2位后,对R进行更新,更新后的R=R/22。由于R=1,除2除不尽,加上模值除以2,R=(1+10001)/2=1001,R=(1001+10001)/2=1101,即为更新后的R。
Y的最低位为1,因此Y右移位数n2=0。X、Y均为正数,将Y与X低位对齐做减法,得到更新后的Y,更新后的Y=Y-X=1101-1=1100。将X右移2位时更新的R与S低位对齐相加,得到更新后的S=S+R=1+1101=1110。
更新后的Y=1100,将Y右移n2位至最低位为1,n2=2,得到右移后的Y=11。更新后的S=S/22,S=1110,最低位为0,因此除以2可以除尽,S=S/2=111。最低位为1,除2除不尽,加上模值除以2,则更新后的S=(S+10001)/2=1100。
Y位长大于X位长,且X、Y均为正数,将Y与X低位对齐做减法,更新后的Y=Y-X=11-1=10,更新后的S=S+R=1100+1101=10001。
更新后的Y的最低位为0,将Y右移n2位至最低位为1,n2=1,得到右移后的Y=1。Y右移后,S更新为S=(10001+10001)/2=10001。
右移后Y=1,X=1,二者位长相等,且X、Y均为正数,将Y与X低位对齐相减,得到更新后的Y=Y-X=1-1=0。更新后的S=S+R=10001+1101=11110。
由于更新后的Y=0,上述模逆运算的计算过程结束,此时更新后的X=1,更新后的Y=0,模逆运算结果存在。模逆运算结果等于X的初始值与更新后的R之差,即模逆运算结果Z=10001-1101=100,转换成十进制数即Z=4。
本发明上述实施例中提供的右移算法的距离仅为说明如何具体地采用右移算法计算模逆运算。在第一操作数X和第二操作数Y的位长较大时,也可以采用本发明上述实施例中提供的右移算法,此处不做赘述。
结合本发明上述实施例中提供的模逆运算器,以及采用右移算法进行模逆运算,以下对本发明实施例中提供的模逆运算器在进行右移操作时的执行过程进行说明。
控制器104包括寄存器,在寄存器中存储并更新X对应的二进制位长Xlen和Y对应的二进制位长Ylen,当Xlen≥Ylen时,计算X模Y;当Ylen≥Xlen时,计算Y模X。X和Y、R和S均以字为单位存储在存储器101中。
以计算X模Y为例进行说明。
首先,将操作数Y右移至最低位为1:从存储器101中读取Y最低字,判断出Y的右移位数,按照从低位到高位的顺序依次从存储器101中读取Y的所有字,送入移位器102中进行移位,并将移位结果存储至存储器101。
然后,从存储器101中读取X最低字,根据X与Y的位长、X的符号位以及X的最低字判断X的右移位数和操作,包括:
(1.3)taillen=wordlen,taillen表示为X最低字后缀0的个数,wordlen表示为字长。
Xlen-Ylen≥taillen时,以字为单位按照从低位到高位的顺序依次从存储器101中读取X,送入移位器102中,以shiftsize=taillen位进行右移,移位结果写入到存储器101中作为更新后的X,再从存储器101中读取更新后的X的最低字进行判断,以获取X的右移位数。
X为正数,且Xlen-Ylen<taillen时,X模Y计算过程结束,进入Y模X计算,X右移位数shiftsize=taillen。
X为负数,且Xlen-Ylen<taillen时,X右移位数shiftsize=Xlen-Ylen,将右移后的X与右移后的Y低位对齐做加法。
(1.4)taillen<wordlen。
在X为正数,且Xlen-Ylen≥taillen时,X右移位数shiftsize=taillen,将右移后的X与右移后的Y低位对齐做减法;
在X为负数,且Xlen-Ylen≥taillen时,X右移位数shiftsize=taillen,将右移后的X与右移后的Y低位对齐做加法;
在X为正数,且Xlen-Ylen<taillen时,X模Y计算过程结束,进入Y模X计算,X右移位数shiftsize=taillen;
在X为负数,且Xlen-Ylen<taillen时,X右移位数shiftsize=Xlen-Ylen,将右移后的X与右移后的Y低位对齐做加法。
在X与Y进行加法运算或减法运算时,以字为单位从存储器101中读取右移后的X和右移后的Y,移位后X多出移位后Y的高位结果直接写入到存储器101,移位后的X与Y字长相等的低位部分送入加减法运算器103,进行相应的加法运算或减法运算,并将低位运算结果存储至存储器101。将右移后的X的高位结果与低位运算结果合并,即可得到更新后的X。
可以理解的是,在实际应用中,还存在X的字长与Y字长相等的情况,此时,更新后的X为加法运算或减法运算的结果。在计算完成后,可以将Xlen更新为Xlen=Xlen-shiftsize。
R更新为R/2shiftsize,在控制器104中设置计数器cnt=shiftsize。从存储器101中读取R的最低字,在最低字的最低位为0时,以字为单位按照从低位到高位的顺序从存储器101中读取R,送入移位器102中右移1位,移位结果写入存储器101中作为新的R值,计数器cnt更新为cnt=cnt-1。在最低字的最低位为1时,以字为单位按照从低位到高位的顺序从存储器101中读取R和X的初始值,送入加减法运算器103进行加法运算。将加法运算的结果送入至移位器102中右移1位,移位结果写入存储器101中作为新的R值,计数器cnt更新为cnt=cnt-1。经过shiftsize次运算之后,得到R/2shiftsize,即为最终的R。
将R和S进行相关计算。以字为单位按照从低位到高位的顺序依次从存储器101中读取R和S并送入至加减法运算器103,将二者低位对齐进行相应的加减法运算,将得到的和值作为更新后的R。
在计算过程中,X为位长Xlen不断减小,直至求得X模Y。Y模X可以采用本发明上述实施例中相同的运算方法。经过若干次运算结果之后,X和Y中的其中一个值更新为0。
在更新后的X=0且更新后的Y=1时,模逆运算的结果为更新后的第二变量S;在更新后的X=1且更新后的Y=0时,模逆运算的结果为X的初始值与更新后的第一变量R之差;在更新后的X与更新后的Y其中之一等于0而另一个不等于1时,所述模逆运算的结果不存在。
2、采用左移算法进行模逆运算
首先,对采用左移算法进行模逆运算的基本原理进行说明。
第一操作数X的位长为Xlen,第二操作数Y的位长为Ylen,设定第一变量R,以及第二变量S。
(2.1)在Xlen≥Ylen时,计算X模Y。
在X为正数时,将X左移N1位至最高位为1,X的低位补N1位无效0;将左移后的X与Y高位对齐相减,将得到的差值的后N1位去除,得到的结果作为更新后的X;将第一变量R与左移(Xlen-Ylen)位的第二变量S低位对齐相加,并将得到的和值作为更新后的第一变量R。
在本发明实施例中,需要注意的是,在N1大于Xlen-Ylen时,X左移N1位后的值小于Y,X模Y计算结束,若X=0,计算结束,若X>0,进行Y模X计算。
在X为负数时,将X左移N2位,X的低位补N2位无效0;将左移后的X与Y高位对齐相加,将得到的和值的后N2位去除,得到的结果作为更新后的X;将第一变量R与左移(Xlen-Ylen)位的第二变量S低位对齐相减,并将得到的和值作为更新后的第一变量R。其中,N2为:X最高位的0前的符号位的个数N3与(Xlen-Ylen)之间的最小值。
(2.2)在Ylen≥Xlen时,计算Y模X。
在Y为正数时,将Y左移M1位至最高位为1,低位补M1位无效0,将左移后的Y与X高位对齐相减,将差值的后M1位去除,作为更新后的Y;将第二变量S与左移(Ylen-Xlen)位的第一变量R低位对齐相加,并将得到的和值作为更新后的第二变量S。
在Y为负数时,将Y左移M2位,低位补M2位无效0,将左移后的Y与X高位对齐相加,将得到的和值的后M2位去除,作为更新后的Y;将第二变量S与左移(Ylen-Xlen)位的第一变量R低位对齐相减,得到的差值作为更新后的第二变量S;其中,M2为:Y最高位的0前的符号位的个数M3与(Ylen-Xlen)之间的最小值。
重复上述步骤(2.1)和步骤(2.2),直至更新后的X=0或更新后的Y=0时,停止模逆运算。
在更新后的X=0且更新后的Y=1时,模逆运算的结果为更新后的第二变量S;在更新后的X=1且更新后的Y=0时,模逆运算的结果为X的初始值与更新后的第一变量R之差;在更新后的X与更新后的Y其中之一等于0而另一个不等于1时,所述模逆运算的结果不存在。
下面以X值为17、Y值为13为例,对本发明上述实施例中提供的模逆运算方法进行说明。
计算Z=13-1mod17。
分别将X和Y以二进制数表示,则X=10001,Y=1101。设定第一变量R=0,第二变量S=1。从上述内容可知,X对应的Xlen=5,Y对应的Ylen=4。
Xlen>Ylen,且Xlen-Ylen=1,X为正数且X的第一位为1,则不将X左移,即X左移的位数为0。将X与Y高位对齐相减,将得到的差值作为更新后的X,即更新后的X=10001-11010=-10111。
第一变量R与左移1位的第二变量S相加,将得到的和值作为更新后的R,即更新后的R=10。
更新后的X=-10111为负数,将X左移N2位,N2为X最高位的0前的符号位的个数N3与(Xlen-Ylen)之间的最小值。X最高位的0前的符号位的个数N3=1,(Xlen-Ylen)=1,因此N2=1,即将X左移1位,低位补1位无效0,则左移后的X=-01110,由于最低位的0为无效0,则左移后的X对应的Xlen=4。
更新后的X对应的Xlen与Ylen相等,Xlen-Ylen=0。将Y与X相加,得到的和值为-01110+11010=01000。将和值结果的最后1位去除,作为更新后的X,即更新后的X=0100。
第一变量R与左移0位的第二变量S相减,并将得到的差值作为更新后的R,即更新后的R=10-1=1。
Y=1101,更新后的X=0100,X的第一位为符号位,因此X=100。由于Xlen不包括X的符号位,因此Xlen=3,即Ylen大于更新后的X对应的Xlen,Ylen-Xlen=1。Y为整数且Y的第一位为1,Y不左移。将Y与X高位对齐相减,将得到的差值作为更新后的Y,即更新后的Y=1101-1000=0101。
将更新后的R左移1位,并与第二变量S相加,得到更新后的第二变量S=1+10=11。
将更新后的Y最高位为0,Y为整数,将Y左移1位至最高位为1,低位补1位无效0,左移后的Y=1010。由于左移后的Y的最低位的0为无效0,则Y对应的Ylen=3,X=100,对应的Xlen=3,即Xlen=Ylen。
将Y与X高位对齐相减,得到的差值为1010-1000=10,将差值的最低位的0去除,得到的值为1,即更新后的Y=1。将更新后的第二变量S与更新后的第一变量R相加,S=11,R=1,得到更新后的第二变量S=11+1=100。
更新后的Y=1,X=100,即X对应的位长Xlen=3,Y对应的位长Ylen=1,Xlen-Ylen=2。将X与Y高位对齐相减,得到的差值为100-100=0,即为更新后的X值。将第一变量R与左移2位的第二变量S相加,得到的和值为更新后的第一变量R=1+10000=10001。
此时,更新后的X=0,更新后的Y=1,模逆运算结束。
从上述内容中可知,在更新后的X=0且更新后的Y=1时,模逆运算的结果为更新后的第二变量S。第二变量S=100,转换成十进制数为4。即13-1mod17=4。
代入验证:13×4=52,对17求模得到的结果为1,即本发明上述实施例提供的模逆运算方法求得的结果正确。
结合本发明上述实施例中提供的模逆运算器,以及采用左移算法进行模逆运算,以下对本发明实施例中提供的模逆运算器在进行左移操作时的执行过程进行说明。
控制器104包括寄存器,在寄存器中存储并更新X对应的二进制位长Xlen和Y对应的二进制位长Ylen,当Xlen≥Ylen时,计算X模Y;当Ylen≥Xlen时,计算Y模X。X和Y均以字为单位存储在存储器101中。X和Y、R和S均以字为单位存储在存储器101中。
以计算X模Y为例进行说明。
首先,将操作数Y左移至最高位为1:从存储器101中读取Y的最高字,判断出Y所需进行左移的位数,按照从低位到高位的顺序依次从存储器101中读取Y的所有字,送入移位器102中进行移位,并将移位结果存储至存储器101。
然后,从存储器101中读取X最高字,根据X与Y的位长、X的符号位以及X的最高字判断X的左移位数和操作,包括:
(2.3)leadlen=wordlen,在X为正数时,leadlen表示为X最高字前缀0的个数,在X为负数时,leadlen表示为X最高字前缀1的个数,wordlen表示为字长。
Xlen-Ylen≥leadlen时,以字为单位按照从低位到高位的顺序依次从存储器101中读取X,送入移位器102中,以shiftsize=leadlen位进行左移,移位结果写入到存储器101中作为更新后的X,再从存储器101中读取更新后的X的最高字进行判断,以获取X的左移位数。
X为正数,且Xlen-Ylen<leadlen时,X模Y计算过程结束,进入Y模X计算,X左移位数shiftsize=leadlen。
X为负数,且Xlen-Ylen<leadlen时,X左移位数shiftsize=Xlen-Ylen,将左移后的X与左移后的Y高位对齐做加法。
(2.4)leadlen<wordlen。
在X为正数,且Xlen-Ylen≥leadlen时,X左移位数shiftsize=leadlen,将左移后的X与左移后的Y高位对齐做减法;
在X为负数,且Xlen-Ylen≥leadlen时,X左移位数shiftsize=leadlen,将左移后的X与左移后的Y高位对齐做加法。
在X为正数,且Xlen-Ylen<leadlen时,X模Y计算过程结束,进入Y模X计算,X左移位数shiftsize=leadlen。
在X为负数,且Xlen-Ylen<leadlen时,X左移位数shiftsize=Xlen-Ylen,将左移后的X与左移后的Y高位对齐做加法。
在X与Y进行加法运算或减法运算时,以字为单位从存储器101中读取左移后的X和左移后的Y,移位后X多出移位后Y的低位结果直接写入到存储器101,移位后的X与Y字长相等的高位部分送入加减法运算器103,进行相应的加法运算或减法运算,并将高位运算结果存储至存储器101。将左移后的X的低位结果与高位运算结果合并,即可得到更新后的X。
可以理解的是,在实际应用中,还存在X的字长与Y字长相等的情况,此时,更新后的X为加法运算或减法运算的结果。在计算完成后,可以将Xlen更新为Xlen=Xlen-shiftsize。
然后,R与左移(Xlen-Ylen)后的S低位对齐做加法或减法。
在本发明一实施例中,R值的计算与更新步骤为:控制器104以字为单位按照从低位到高位的顺序从存储器101中读取R和S,将S送入至移位器102。移位器102将S左移(Xlen-Ylen)位,加减法运算器103将R与左移后的S低位对齐相减,得到的差值作为更新后的R。
在本发明另一实施例中,在计算X模Y的过程中,预先设置第三变量QS,第三变量QS存储在存储器101中,且第三变量QS的初始值为0。在每次X左移N1位与Y高位对齐相加之后,从存储器101中读取第三变量QS以及第二变量S。将第三变量QS送入至移位器102中左移N1位,将移位结果送入至加减法运算器103。加减法运算器103将左移后的第三变量QS与第二变量S低位对齐并相减,得到的差值作为更新后的第三变量QS。在X模Y计算结束时,从存储器101中读取第一变量R和更新后的第三变量QS,送入至加减法运算器103中,将第一变量R与更新后的第三变量QS低位对齐相减,得到的差值作为更新后的第一变量R。
由此可见,移位器在对X或Y进行移位操作时,以M为单位读取X或Y的数据进行以为操作;加减法运算器在对X与Y进行加减法运算时,以M为单位将X中的M个数据与Y中的M个数据进行加减法运算。也就是说,在整个模逆运算的过程中,移位器和加减法运算器均是以M为单位进行运算,即移位器和加减法运算器的位宽仅为M即可实现对较长的X和Y进行运算,从而可以避免模逆运算参数过长导致的模逆运算器无法进行模逆运算的问题,扩展性较高。
虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。
Claims (4)
1.一种模逆运算器,用于计算Z=Y-1mod X,其中Z为所述模逆运算的结果,X为第一操作数,Y为第二操作数,其特征在于,包括:控制器、移位器、加减法运算器以及存储器,其中:
所述存储器,适于存储第一操作数X、第二操作数Y、第一变量R以及第二变量S,其中:所述第一操作数X以及所述第二操作数Y均以预设的位长M为单位存储在所述存储器中,其中,M=N×L,N≥1,L为一个字的二进制长度;
所述移位器,位宽与M相等,适于以M为单位读取所述存储器中的第一操作数X与第二操作数Y,并将第一操作数X与第二操作数Y进行移位操作;
所述加减法运算器,位宽与M相等,适于对第一操作数X中的M位数据与第二操作数Y中的M位数据进行运算;
控制器,包括寄存器,所述寄存器适于缓存并更新所述第一操作数X对应的二进制位长Xlen、所述第二操作数Y对应的二进制位长Ylen,所述控制器以M为单位从所述存储器中读取所述第一操作数X以及所述第二操作数Y,控制所述加减法运算器对第一操作数X中的M位数据与第二操作数Y中的M位数据进行运算,并将运算结果存储至所述存储器。
2.如权利要求1所述的模逆运算器,其特征在于,所述N=1。
3.如权利要求2所述的模逆运算器,其特征在于,所述加减法运算器适于从第一操作数X中选取一字节长度的连续数据与第二操作数Y中选取的对应的一字节长度的连续数据进行运算,在运算结果出现进位或借位时,将当前输出的进位或借位作为下一字节数据的进位或借位的输入。
4.如权利要求1所述的模逆运算器,其特征在于,在Xlen不能被M整除时,将所述第一操作数X高位补符号位,将所述第一操作数X的位长Xlen扩展至被M整除;在Ylen不能被M整除时,将所述第二操作数Y高位补符号位,将所述第二操作数Y的位长Ylen扩展至被M整除。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510096487.2A CN105988771B (zh) | 2015-03-04 | 2015-03-04 | 模逆运算器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510096487.2A CN105988771B (zh) | 2015-03-04 | 2015-03-04 | 模逆运算器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105988771A true CN105988771A (zh) | 2016-10-05 |
CN105988771B CN105988771B (zh) | 2019-10-22 |
Family
ID=57039609
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510096487.2A Active CN105988771B (zh) | 2015-03-04 | 2015-03-04 | 模逆运算器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105988771B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106850212A (zh) * | 2017-03-06 | 2017-06-13 | 西安电子科技大学 | 基于rsa密码算法的密钥生成系统及方法 |
CN108075889A (zh) * | 2016-11-18 | 2018-05-25 | 腾讯科技(深圳)有限公司 | 一种降低加解密运算时间复杂度的数据传输方法及系统 |
WO2020037565A1 (zh) * | 2018-08-22 | 2020-02-27 | 深圳市汇顶科技股份有限公司 | 模逆运算器、模逆运算方法及安全系统 |
CN112099761A (zh) * | 2020-08-27 | 2020-12-18 | 清华大学 | 基于改进的二进制左移模逆算法的装置及其控制方法 |
CN114816531A (zh) * | 2022-04-18 | 2022-07-29 | 海飞科(南京)信息技术有限公司 | 使用窄加法数据通道实现大位宽加操作数取数加操作的方法 |
CN113723035B (zh) * | 2021-07-23 | 2024-04-02 | 西安交通大学 | 一种位宽可变的求模运算方法及求模运算电路 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6609141B1 (en) * | 2000-10-13 | 2003-08-19 | Motorola, Inc. | Method of performing modular inversion |
EP1746495A1 (de) * | 2005-06-29 | 2007-01-24 | Giesecke & Devrient GmbH | Verwendung eines Koprozessors zur modularen Inversion |
EP2587713A2 (de) * | 2011-10-28 | 2013-05-01 | Giesecke & Devrient GmbH | Effiziente modulare Inversion mit Primzahltest |
CN103336680A (zh) * | 2013-06-27 | 2013-10-02 | 清华大学 | 改进的二进制左移模逆算法 |
CN104123431A (zh) * | 2013-04-24 | 2014-10-29 | 国民技术股份有限公司 | 一种元素的模逆计算方法及装置 |
-
2015
- 2015-03-04 CN CN201510096487.2A patent/CN105988771B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6609141B1 (en) * | 2000-10-13 | 2003-08-19 | Motorola, Inc. | Method of performing modular inversion |
EP1746495A1 (de) * | 2005-06-29 | 2007-01-24 | Giesecke & Devrient GmbH | Verwendung eines Koprozessors zur modularen Inversion |
EP2587713A2 (de) * | 2011-10-28 | 2013-05-01 | Giesecke & Devrient GmbH | Effiziente modulare Inversion mit Primzahltest |
CN104123431A (zh) * | 2013-04-24 | 2014-10-29 | 国民技术股份有限公司 | 一种元素的模逆计算方法及装置 |
CN103336680A (zh) * | 2013-06-27 | 2013-10-02 | 清华大学 | 改进的二进制左移模逆算法 |
Non-Patent Citations (2)
Title |
---|
周涛等: "素域模逆运算的一种快速算法和VLSI实现", 《清华大学学报(自然科学版)》 * |
赵开兰等: "基于资源复用的RSA加速器层次化架构", 《计算机工程与应用》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108075889A (zh) * | 2016-11-18 | 2018-05-25 | 腾讯科技(深圳)有限公司 | 一种降低加解密运算时间复杂度的数据传输方法及系统 |
CN106850212A (zh) * | 2017-03-06 | 2017-06-13 | 西安电子科技大学 | 基于rsa密码算法的密钥生成系统及方法 |
WO2020037565A1 (zh) * | 2018-08-22 | 2020-02-27 | 深圳市汇顶科技股份有限公司 | 模逆运算器、模逆运算方法及安全系统 |
CN111213122A (zh) * | 2018-08-22 | 2020-05-29 | 深圳市汇顶科技股份有限公司 | 模逆运算器、模逆运算方法及安全系统 |
CN112099761A (zh) * | 2020-08-27 | 2020-12-18 | 清华大学 | 基于改进的二进制左移模逆算法的装置及其控制方法 |
CN112099761B (zh) * | 2020-08-27 | 2022-09-02 | 清华大学 | 基于改进的二进制左移模逆算法的装置及其控制方法 |
CN113723035B (zh) * | 2021-07-23 | 2024-04-02 | 西安交通大学 | 一种位宽可变的求模运算方法及求模运算电路 |
CN114816531A (zh) * | 2022-04-18 | 2022-07-29 | 海飞科(南京)信息技术有限公司 | 使用窄加法数据通道实现大位宽加操作数取数加操作的方法 |
CN114816531B (zh) * | 2022-04-18 | 2023-05-02 | 海飞科(南京)信息技术有限公司 | 使用窄加法数据通道实现大位宽加操作数取数加操作的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105988771B (zh) | 2019-10-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105988771A (zh) | 模逆运算器 | |
US7805478B2 (en) | Montgomery modular multiplier | |
US8532286B2 (en) | System and method for reducing the computation and storage requirements for a montgomery-style reduction | |
KR920010183B1 (ko) | Rom테이블을 갖춘 역수연산회로 | |
JP4408712B2 (ja) | 多倍長データ積和演算処理回路及びモンゴメリ積和剰余演算回路 | |
JP5006368B2 (ja) | 多倍長演算装置 | |
CN101097511A (zh) | 使用折叠的模归约 | |
CN103207770A (zh) | 一种在嵌入式系统中实现大数预计算的方法 | |
KR101794807B1 (ko) | 몽고메리 역원 계산 장치 및 이를 이용한 몽고메리 역원 계산 방법 | |
Gutub et al. | Efficient scalable VLSI architecture for Montgomery inversion in GF (p) | |
JP5175983B2 (ja) | 演算装置 | |
JP2004004341A (ja) | べき乗剰余計算装置、べき乗剰余計算方法及びプログラム | |
KR101128505B1 (ko) | 모듈러 곱셈 연산 방법 및 장치 | |
CN104951279A (zh) | 一种基于NEON引擎的向量化Montgomery模乘器的设计方法 | |
CN113467752B (zh) | 用于隐私计算的除法运算装置、数据处理系统及方法 | |
CN105988772B (zh) | 模逆运算器 | |
CN209560522U (zh) | 获取加解密运算中的中间结果组的硬件装置 | |
Wu | An efficient common-multiplicand-multiplication method to the Montgomery algorithm for speeding up exponentiation | |
CN102411489B (zh) | 一种嵌入式系统中的数据处理方法及装置 | |
JP4850884B2 (ja) | べき乗剰余演算器 | |
JP4293665B2 (ja) | 剰余乗算装置 | |
US20230093203A1 (en) | Arithmetic device and method | |
JPS6155691B2 (zh) | ||
JP2003216034A (ja) | べき乗剰余演算器 | |
KR101179932B1 (ko) | 모듈러 3 연산 장치 및 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |