CN105988772B - 模逆运算器 - Google Patents
模逆运算器 Download PDFInfo
- Publication number
- CN105988772B CN105988772B CN201510096948.6A CN201510096948A CN105988772B CN 105988772 B CN105988772 B CN 105988772B CN 201510096948 A CN201510096948 A CN 201510096948A CN 105988772 B CN105988772 B CN 105988772B
- Authority
- CN
- China
- Prior art keywords
- variable
- updated
- xlen
- ylen
- low level
- 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.)
- Active
Links
Abstract
一种模逆运算方法及运算器,用于计算Z=Y‑1mod X,其中Z为所述模逆运算的结果,X为第一操作数,Y为第二操作数,所述模逆运算方法包括:计算获取第一操作数X的二进制位长Xlen以及第二操作数Y的二进制位长Ylen;初始化第一变量R与第二变量S;当Xlen≥Ylen时,计算X模Y,当Xlen≤Ylen时,计算Y模X。在更新后的X=0且更新后的Y=1时,所述模逆运算的结果为更新后的第二变量S;在更新后的X=1且更新后的Y=0时,所述模逆运算的结果为X的初始值与更新后的第一变量R之差;在更新后的X与更新后的Y其中之一等于0而另一个不等于1时,所述模逆运算的结果不存在。采用所述方法及运算器,可实现模为任意非零整数的模逆运算,提高模逆运算的计算效率,降低硬件功耗。
Description
技术领域
本发明涉及信息安全领域,尤其涉及一种模逆运算方法及运算器。
背景技术
模逆运算广泛应用在公钥密码体制中,例如,在RSA算法中的解密密钥生成时应用到模逆运算,模逆运算也可以用于椭圆曲线密码算法中的点加和倍点运算。
目前,求解模逆运算的方法主要包括模幂算法、扩展欧几里得算法、二进制扩展欧几里得算法等。
模幂算法以费马小定理为基础,将模逆运算转换成模幂运算,但是模幂算法无法确定模逆结果是否存在。采用模乘器作为硬件运算单元,较为复杂且功耗较大。
扩展欧几里得算法通过辗转相除计算最大公因子求解模逆,当最大公因子为非1整数时无法获取模逆的计算结果。采用除法器作为硬件运算单元,实现仍较为复杂。
二进制扩展欧几里得算法将除法转换成移位和加减法,但是,在移位的过程中,操作数的权值发生了改变,最终运算结果中包含有2n(n为操作数的位长)项权重因子,去除权重因子需进行多次除2的操作,因此,要求模必须是奇数。
现有的二进制扩展欧几里得算法方法在进行模逆运算时仍存在一定的限制,无法针对任意非零整数求模,并且计算过程较为复杂。
发明内容
本发明实施例解决的问题是如何实现对任意非零整数求模,并提高模逆运算的计算效率,降低硬件功耗。
为解决上述问题,本发明实施例提供一种模逆运算方法,用于计算Z=Y-1 modX,其中Z为所述模逆运算的结果,X为第一操作数,Y为第二操作数,包括:
获取第一操作数X的二进制位长Xlen以及第二操作数Y的二进制位长 Ylen;初始化第一变量R与第二变量S;
当Xlen≥Ylen时,计算X模Y:
在X为正数时,将X左移N1位至最高位为1,低位补N1位无效0,将左移后的X与Y高位对齐相减,将差值的后N1位去除,作为更新后的X,将第一变量R与左移(Xlen-Ylen)位的第二变量S低位对齐相加之和作为更新后的第一变量R;
在X为负数时,将X左移N2位,低位补N2位无效0,将左移后的X与 Y高位对齐相加,将和值的后N2位去除,作为更新后的X,将第一变量R与左移(Xlen-Ylen)位的第二变量S低位对齐并相减,得到的差值作为更新后的第一变量R;其中,N2为:X最高位的0前的符号位的个数N3与(Xlen-Ylen) 之间的最小值;
当Xlen≤Ylen时,计算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)之间的最小值;
在更新后的X=0且更新后的Y=1时,所述模逆运算的结果为更新后的第二变量S;在更新后的X=1且更新后的Y=0时,所述模逆运算的结果为X的初始值与更新后的第一变量R之差;在更新后的X与更新后的Y其中之一等于0而另一个不等于1时,所述模逆运算的结果不存在。
本发明实施例还提供了一种模逆运算器,用于计算Z=Y-1mod X,其中Z 为所述模逆运算的结果,X为第一操作数,Y为第二操作数,包括:控制器、移位器、加减法运算器以及存储器,其中:
获取第一操作数X和第二操作数Y,以及第一操作数X的二进制位长 Xlen、第二操作数Y的二进制位长Ylen;初始化第一变量R与第二变量S;
当Xlen≥Ylen时,计算X模Y:
在X为正数时,将X左移N1位至最高位为1,低位补N1位无效0,将左移后的X与Y高位对齐相减,将差值的后N1位去除,作为更新后的X,将第一变量R与左移(Xlen-Ylen)位的第二变量S低位对齐相加之和作为更新后的第一变量R;
在X为负数时,将X左移N2位,低位补N2位无效0,将左移后的X与 Y高位对齐相加,将和值的后N2位去除,作为更新后的X,将第一变量R与左移(Xlen-Ylen)位的第二变量S低位对齐并相减,得到的差值作为更新后的第一变量R;其中,N2为:X最高位的0前的符号位的个数N3与(Xlen-Ylen) 之间的最小值;
当Xlen≤Ylen时,计算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)之间的最小值;
在更新后的X=0且更新后的Y=1时,所述模逆运算的结果为更新后的第二变量S;在更新后的X=1且更新后的Y=0时,所述模逆运算的结果为X的初始值与更新后的第一变量R之差;在更新后的X与更新后的Y其中之一等于0而另一个不等于1时,所述模逆运算的结果不存在。
与现有技术相比,本发明实施例的技术方案具有以下优点:
在第一操作数X位长大于第二操作数Y时,X左移时可以消除冗余的符号位,通过变量Xlen记录X的实时位长,X的权值没有发生变化。R和S的运算遵循低位对齐的运算方法,R无左移操作,即R的权值也没有发生改变。类似的,在Y位长大于X时,Y左移时可以消除冗余的符号位,通过变量Ylen 记录Y的实时位长,Y的权值没有发生变化。R和S的运算遵循低位对齐的运算方法,S无左移操作,即S的权值也没有发生改变。即在整个模逆运算过程中,运算的结果不包括权重因子,相比于现有的二进制扩展欧几里得算法,不需要再对运算结果进行权重因子的消除操作,并且可以不限定模必须为奇数,可以实现模为任意非零整数的模逆运算,并提高模逆运算的计算效率,降低硬件功耗。
附图说明
图1是本发明实施例中的一种模逆运算方法的流程图;
图2是本发明实施例中的一种模逆运算器的结构示意图。
具体实施方式
现有的二进制扩展欧几里得算法将除法转换成移位和加减法,但是,在移位的过程中,操作数的权值发生了改变,最终运算结果中包含有2n(n为操作数的位长)项权重因子,去除权重因子需进行多次除2的操作,因此,要求模必须是奇数。但是,现有的二进制扩展欧几里得算法方法在进行模逆运算时仍存在一定的限制,无法针对任意非零整数求模,并且计算过程较为复杂。
在本发明实施例中,在第一操作数X位长大于第二操作数Y时,X左移时可以消除冗余的符号位,通过变量Xlen记录X的实时位长,X的权值没有发生变化。R和S的运算遵循低位对齐的运算方法,R无左移操作,即R的权值也没有发生改变。类似的,在Y位长大于X时,Y左移时可以消除冗余的符号位,通过变量Ylen记录Y的实时位长,Y的权值没有发生变化。R和S的运算遵循低位对齐的运算方法,S无左移操作,即S的权值也没有发生改变。在整个模逆运算过程中,运算的结果不包括权重因子,相比于现有的二进制扩展欧几里得算法,不需要再对运算结果进行权重因子的消除操作,并且可以不限定模必须为奇数,可以实现对任意非零整数求模。
为使本发明实施例的上述目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施例做详细的说明。
本发明实施例提供了一种模逆运算方法,用于计算Z=Y-1modX,其中Z 为所述模逆运算的结果,X为第一操作数,Y为第二操作数,参照图1,以下通过具体步骤对本发明实施例提供的模逆运算方法进行详细说明。
步骤S101,获取第一操作数X的二进制位长Xlen以及第二操作数Y的二进制位长Ylen,初始化第一变量R与第二变量S。
在具体实施中,第一操作数X和第二操作数Y均为非0的正整数。在获取到第一操作数X和第二操作数Y之后,将第一操作数X和第二操作数Y依次进行二进制转换,从而可以分别获取第一操作数X对应的初始二进制位长 Xlen,以及第二操作数Y对应的初始二进制位长Ylen。
例如,计算Z=13-1mod17,即第一操作数X的值为17,转换成二进制数为X=10001,Xlen=5。又如,第二操作数Y的值为13,转换成二进制数为 Y=1101,Ylen=4。
在具体实施中,可以根据实际的应用场景初始化第一变量R和第二变量 S。在本发明一实施例中,初始化第一变量R=0,第二变量S=1。
步骤S102,当Xlen≥Ylen时,计算X模Y。
在本发明实施例中,可以先对第一操作数对应的Xlen与第二操作数对应的Ylen进行比较。在Xlen≥Ylen时,根据第一操作数X的符号位,执行对应的操作,包括:
1)在X为正数时,即X的符号位为0时,将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=00010001,Y=1000,X的符号位为0。将X左移N1=3位,低位补3位无效0,则左移后的X=10001000。在本发明实施例中,X在左移时低位补充的0是无效0,实质上并没有参与X的运算,即实质上X对应的二进制位长Xlen=5。
将左移后的X与Y高位对齐做减法,在本发明实施例中,高位对齐运算是指:数A的位长为M,数B的位长为N,M>N,将数A和数B进行高位对齐运算,是指将数B的低位补(M-N)个0后进行的运算。
即:
即得到的差值为00001000,将得到的差值的后3位去除,得到的值为 00001,作为更新后的X值,即更新后的X=00001。
初始化的第一变量R=0,第二变量S=1,第二变量S左移1位后,第二变量S更新为S=10,将第一变量R与左移后的第二变量S低位对齐并相加,得到0+10=10,即为更新后的第一变量R=10。
2)在X为负数时,即X的符号位为1时,将X左移N2位,X的低位补N2位无效0;将左移后的X与Y高位对齐相加,将得到的和值的后N2位去除,得到的结果作为更新后的X;将第一变量R与左移(Xlen-Ylen)位的第二变量S低位对齐相减,并将得到的和值作为更新后的第一变量R。其中, N2为:X最高位的0前的符号位的个数N3与(Xlen-Ylen)之间的最小值。
例如,X=-10111,Y=1101,X的符号位为1。将X左移N2=1位,低位补1位无效零,则左移后的X=-01110。可以理解的是,左移后的X中,后1 位的0为无效0,即实质上X对应的二进制位长为Xlen=4。将左移后的X与 Y高位对齐做加法,即:
即得到的和值为01000,将得到的和值的后1位去除,得到的值为0100,作为更新后的X值,即更新后的X=0100。
当前步骤第一变量R=110,第二变量S=1,第二变量S左移1位后,更新为S=10。将第一变量R与左移后的第二变量S低位对齐相减,得到的差值为 110-10=100,即更新后的第一变量R=100。
步骤S103,当Xlen≤Ylen时,计算Y模X。
1)在Y为正数时,将Y左移M1位至最高位为1,低位补M1位无效0,将左移后的Y与X高位对齐相减,将差值的后M1位去除,作为更新后的Y;将第二变量S与左移(Ylen-Xlen)位的第一变量R低位对齐相加,并将得到的和值作为更新后的第二变量S。
2)在Y为负数时,将Y左移M2位,低位补M2位无效0,将左移后的 Y与X高位对齐相加,将得到的和值的后M2位去除,作为更新后的Y;将第二变量S与左移(Ylen-Xlen)位的第一变量R低位对齐相减,得到的差值作为更新后的第二变量S;其中,M2为:Y最高位的0前的符号位的个数 M3与(Ylen-Xlen)之间的最小值。
在本发明实施例中,步骤S103的运算过程可以参见步骤S102,将步骤 S102中的X替换成Y,Y替换成X,R替换成S,S替换成R后,即可以为步骤S103中的运算过程。
在本发明实施例中,在模逆运算的计算过程中,可以重复执行步骤S102~步骤S103,即:在X更新后,将更新后的X对应的Xlen与Ylen进行再次比较,并根据比较结果,执行步骤S102或步骤S103;或在Y更新完成后,将更新后的Y对应的Ylen与Xlen进行再次比较,并根据比较结果,执行步骤 S102或步骤S103。
重复执行步骤S102或步骤S103,直至更新后的X和更新后的Y中,存在一个数为0时,停止模逆运算。例如,在检测到X=0时,终止模逆运算。并根据当前Y的值,来确定模逆运算的结果。
在本发明一实施例中,在更新后的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,即本发明上述实施例提供的模逆运算方法求得的结果正确。
由此可见,在第一操作数X位长大于第二操作数Y时,X左移时可以消除冗余的符号位,通过变量Xlen记录X的实时位长,X的权值没有发生变化。 R和S的运算遵循低位对齐的运算方法,R无左移操作,即R的权值也没有发生改变。类似的,在Y位长大于X时,Y左移时可以消除冗余的符号位,通过变量Ylen记录Y的实时位长,Y的权值没有发生变化。R和S的运算遵循低位对齐的运算方法,S无左移操作,即S的权值也没有发生改变。即在整个模逆运算过程中,运算的结果不包括权重因子,相比于现有的二进制扩展欧几里得算法,不需要再对运算结果进行权重因子的消除操作,并且可以不限定模必须为奇数,可以实现对任意非零整数求模。
本发明实施例还提供了一种模逆运算器,用于计算Z=Y-1mod X,其中Z 为所述模逆运算的结果,X为第一操作数,Y为第二操作数,参照图2,包括:控制器201、移位器202、加减法运算器203以及存储器204,其中:
存储器204中,存储有第一操作数X、第二操作数Y、第一变量R以及第二变量S。
控制器201,适于保存并更新所述第一操作数X对应的二进制位长Xlen 以及符号位Xsign、所述第二操作数Y对应的二进制位长Ylen以及符号位 Ysign,控制所述移位器202以及所述加减法运算器203实现X模Y以及Y 模X,包括:
在Xlen≥Ylen,且Xsign=0时,控制所述移位器202将X左移N1位至最高位为1,低位补N1位无效0,控制所述移位器202将所述第二变量S左移(Xlen-Ylen)位;控制所述加减法运算器203将左移后的X与Y高位对齐相减,将差值的后N1位去除作为更新后的X并保存,将第一变量R与左移后的第二变量S低位对齐并相加,得到的和值作为更新后的第一变量R。
在本发明实施例中,在进行模逆运算时,控制器201从存储器204中读取X和Y,将X送入移位器202。移位器202将X左移N1位至最高位为1,移位后X位长多出Y的低位结果直接写入到存储器204,与Y位长相等的高位结果送入至加减法运算器203。加减法运算器203将X的高位部分与Y相减,并将运算结果写入至存储器204。在加减法运算器203进行减法运算的过程中出现借位时,X的符号位取反,否则X的符号位不变。将高位运算的结果与移出的低位结合,并去除低位中的后N1位,作为更新后的X。
例如,X=00011001,Y=1000。将X送入至移位器202,将X左移3位至最高位为1,移位后X=11001000,移位后的X位长多出Y的低位结果为1000,将1000写入到存储器204中。与Y位长相等的X的高位结果为1100,将1100 送入至加减法运算器203与Y相减,得到的运算结果为0100,将运算结果写入至存储器203。将高位运算的结果与移出的低位结合,得到的值为01001000,去除01001000的后3位,得到的值为01001即为更新后的X。
在本发明一实施例中,控制器201从存储器204中读取第一变量R和第二变量S,将第二变量S送入至移位器202。移位器202将第二变量S左移 N1位,加减法运算器203将第一变量R与左移后的第二变量低位对齐相加,得到的和值作为更新后的第一变量R。
可以理解的是,在本发明实施例中,第一变量R的计算与更新还可以存在其他的实现方法。
在本发明另一实施例中,在计算X模Y的过程中,预先设置第三变量 QS,第三变量QS存储在存储器204中,且第三变量QS的初始值为0。在每次X左移N1位与Y高位对齐相减之后,从存储器204中读取第三变量QS 以及第二变量S。将第三变量QS送入至移位器202中左移N1位,将移位结果送入至加减法运算器203。加减法运算器203将左移后的第三变量QS与第二变量S低位对齐并相加,得到的和值作为更新后的第三变量QS。在X模Y 计算结束时,从存储器204中读取第一变量R和更新后的第三变量QS,送入至加减法运算器203中,将第一变量R与更新后的第三变量QS低位对齐相加,得到的和值作为更新后的第一变量R。
在Xlen≥Ylen,且Xsign=1时,控制所述移位器将X左移N2位,低位补N2位无效0,控制所述移位器将所述第二变量S左移(Xlen-Ylen)位;控制所述加减法运算器将左移后的X与Y高位对齐相加,将和值的后N2位去除作为更新后的X并保存,将第一变量R与左移后的第二变量S低位对齐并相减,得到的差值作为更新后的第一变量R,其中,N2为:X最高位的0前的符号位的个数N3与(Xlen-Ylen)之间的最小值。
在本发明实施例中,在Xsign=1,即X为负数时,移位器202将X左移 N2位至最高位为1,移位后X位长多出Y的低位结果直接写入到存储器204,与Y位长相等的高位结果输入至加减法运算器203。加减法运算器203将X 的高位部分与Y相加,并将运算结果写入至存储器204。在加减法运算器203 进行减法运算的过程中出现进位时,X的符号位取反,否则X的符号位不变。将高位运算的结果与移出的低位结合,并取出低位中的后N2位,作为更新后的X。
例如,X=-10111,Y=1101。X最高位的0前的符号位的个数N3=1, (Xlen-Ylen)=1,因此N2=1。将X送入至移位器202,将X左移1位,移位后X=01110,移位后的X位长多出Y的低位结果为0,将0写入到存储器 204中。与Y位长相等的X的高位结果为-0111,将0111送入至加减法器203 与Y相加,在相加的过程中产生了进位,X符号位取反,得到的高位运算的结果为0100,将高位运算的结果与移出的低位结合,得到的值为01000,去除低位中的后1位0,得到的值作为更新后的X,即更新后的X=0100。
在本发明一实施例中,控制器201从存储器204中读取第一变量R和第二变量S,将第二变量S送入至移位器202。移位器202将第二变量S左移 (Xlen-Ylen)位,加减法运算器203将第一变量R与左移后的第二变量S低位对齐相减,得到的差值作为更新后的第一变量R。
在本发明另一实施例中,在计算X模Y的过程中,预先设置第三变量 QS,第三变量QS存储在存储器204中,且第三变量QS的初始值为0。在每次X左移N1位与Y高位对齐相加之后,从存储器204中读取第三变量QS 以及第二变量S。将第三变量QS送入至移位器202中左移N1位,将移位结果送入至加减法运算器203。加减法运算器203将左移后的第三变量QS与第二变量S低位对齐并相减,得到的差值作为更新后的第三变量QS。在X模Y 计算结束时,从存储器204中读取第一变量R和更新后的第三变量QS,送入至加减法运算器203中,将第一变量R与更新后的第三变量QS低位对齐相减,得到的差值作为更新后的第一变量R。
在Xlen≤Ylen,且Ysign=0时,控制所述移位器将Y左移M1位至最高位为1,低位补M1位无效0,控制所述移位器将所述第一变量R左移 (Ylen-Xlen)位;控制所述加减法运算器将左移后的Y与X高位对齐相减,将差值的后N1位去除作为更新后的Y并保存,将第二变量S与左移后的第一变量R低位对齐并相加,得到的和值作为更新后的第二变量S。
在Xlen≤Ylen,且Ysign=1时,控制所述移位器将Y左移M2位,低位补M2位无效0,控制所述移位器将所述第一变量R左移(Ylen-Xlen)位;控制所述加减法运算器将左移后的Y与X高位对齐相加,将和值的后M2位去除作为更新后的Y并保存,将第二变量S与左移后的第一变量R低位对齐并相减,得到的差值作为更新后的第二变量S,其中,M2为:Y最高位的0前的符号位的个数M3与(Ylen-Xlen)之间的最小值。
在本发明实施例中,在Xlen≤Ylen时,模逆运算的过程可以参照本发明上述实施例中提供的Xlen≥Ylen时的过程,此处不做赘述。
在本发明实施例中,可以通过控制器201控制移位器202和加减法运算器203循环执行上述操作,直至得到更新后的X和更新后的Y中的一个值为 0时,结束模逆运算。
在所述控制器得到的更新后的X=0且更新后的Y=1时,所述模逆运算的结果为更新后的S;在更新后的X=1且更新后的Y=0时,所述模逆运算的结果为X的初始值与更新后的R之差;在更新后的X与更新后的Y其中之一等于0而另一个不等于1时,说明X和Y不互素,所述模逆运算的结果不存在。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指示相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:ROM、RAM、磁盘或光盘等。
虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。
Claims (1)
1.一种模逆运算器,用于计算Z=Y-1mod X,其中Z为所述模逆运算的结果,X为第一操作数,Y为第二操作数,其特征在于,包括:控制器、移位器、加减法运算器以及存储器,其中:
所述存储器,适于存储第一操作数X、第二操作数Y、第一变量R以及第二变量S;
所述控制器,适于保存并更新所述第一操作数X对应的二进制位长Xlen以及符号位Xsign、所述第二操作数Y对应的二进制位长Ylen以及符号位Ysign,控制所述移位器以及所述加减法运算器实现X模Y以及Y模X,包括:
在Xlen≥Ylen,且Xsign=0时,控制所述移位器将X左移N1位至最高位为1,低位补N1位无效0,控制所述移位器将所述第二变量S左移(Xlen-Ylen)位;控制所述加减法运算器将左移后的X与Y高位对齐相减,将差值的后N1位去除作为更新后的X并保存,将第一变量R与左移后的第二变量S低位对齐并相加,得到的和值作为更新后的第一变量R;
在Xlen≥Ylen,且Xsign=1时,控制所述移位器将X左移N2位,低位补N2位无效0,控制所述移位器将所述第二变量S左移(Xlen-Ylen)位;控制所述加减法运算器将左移后的X与Y高位对齐相加,将和值的后N2位去除作为更新后的X并保存,将第一变量R与左移后的第二变量S低位对齐并相减,得到的差值作为更新后的第一变量R;其中,N2为:X最高位的0前的符号位的个数N3与(Xlen-Ylen)之间的最小值;
在Xlen≤Ylen,且Ysign=0时,控制所述移位器将Y左移M1位至最高位为1,低位补M1位无效0,控制所述移位器将所述第一变量R左移(Ylen-Xlen)位;控制所述加减法运算器将左移后的Y与X高位对齐相减,将差值的后N1位去除作为更新后的Y并保存,将第二变量S与左移后的第一变量R低位对齐并相加,得到的和值作为更新后的第二变量S;
在Xlen≤Ylen,且Ysign=1时,控制所述移位器将Y左移M2位,低位补M2位无效0,控制所述移位器将所述第一变量R左移(Ylen-Xlen)位;控制所述加减法运算器将左移后的Y与X高位对齐相加,将和值的后M2位去除作为更新后的Y并保存,将第二变量S与左移后的第一变量R低位对齐并相减,得到的差值作为更新后的第二变量S;其中,M2为:Y最高位的0前的符号位的个数M3与(Ylen-Xlen)之间的最小值;
在所述控制器得到的更新后的X=0且更新后的Y=1时,所述模逆运算的结果为更新后的S;在更新后的X=1且更新后的Y=0时,所述模逆运算的结果为X的初始值与更新后的R之差;在更新后的X与更新后的Y其中之一等于0而另一个不等于1时,所述模逆运算的结果不存在;
当X的位长M大于Y的位长N时,所述高位对齐运算是指将Y的低位补齐M-N个0后进行的运算;所述第一变量R的初始值为0,所述第二变量S的初始值为1。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510096948.6A CN105988772B (zh) | 2015-03-04 | 2015-03-04 | 模逆运算器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510096948.6A CN105988772B (zh) | 2015-03-04 | 2015-03-04 | 模逆运算器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105988772A CN105988772A (zh) | 2016-10-05 |
CN105988772B true CN105988772B (zh) | 2019-04-26 |
Family
ID=57038656
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510096948.6A Active CN105988772B (zh) | 2015-03-04 | 2015-03-04 | 模逆运算器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105988772B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111213122A (zh) * | 2018-08-22 | 2020-05-29 | 深圳市汇顶科技股份有限公司 | 模逆运算器、模逆运算方法及安全系统 |
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 CN201510096948.6A patent/CN105988772B/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 |
---|
同时支持两种有限域的模逆算法及其硬件实现;王健等;《北京大学学报(自然科学版)》;20060630;第1卷(第2期);第1-5页 |
有限素域上椭圆曲线模逆运算的设计与实现;秦帆等;《计算机工程与应用》;20080831;第44卷(第23期);第117-119页 |
Also Published As
Publication number | Publication date |
---|---|
CN105988772A (zh) | 2016-10-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105988771B (zh) | 模逆运算器 | |
KR102132261B1 (ko) | 비교 연산이 필요없이 최종 모듈러 감소를 하는 몽고메리 곱셈 방법 및 곱셈기 | |
US8532286B2 (en) | System and method for reducing the computation and storage requirements for a montgomery-style reduction | |
TW200919304A (en) | Apparatus and method for performing magnitude detection for arithmetic operations | |
CN101371285B (zh) | 加密处理装置、加密处理方法 | |
CN105988772B (zh) | 模逆运算器 | |
CN110704109B (zh) | 一种椭圆曲线密码协处理器 | |
CN102779022A (zh) | 抗边信道攻击的模幂方法和设备 | |
CN101630244B (zh) | 一种流水线型椭圆曲线双标量乘法系统及方法 | |
CN104123431B (zh) | 一种元素的模逆计算方法及装置 | |
CN105930128A (zh) | 一种利用浮点数计算指令实现大整数乘法计算加速方法 | |
CN103207770A (zh) | 一种在嵌入式系统中实现大数预计算的方法 | |
CN102396010A (zh) | 有限域运算装置、有限域运算方法、程序以及记录介质 | |
JPH06175583A (ja) | べき乗剰余演算回路 | |
CN102104482A (zh) | 椭圆曲线密码体制中无穷远点在仿射坐标系下的表示方法 | |
Hars | Modular inverse algorithms without multiplications for cryptographic applications | |
CN114968180A (zh) | 高效蒙哥马利乘法器 | |
JP2004125891A (ja) | べき乗剰余演算器 | |
CN102646033A (zh) | 模乘运算的实现方法和装置 | |
CN109284082A (zh) | 一种ecc和sm2通用的点运算方法及装置 | |
Smyth et al. | An adaptable and scalable asymmetric cryptographic processor | |
CN107239258A (zh) | 一种模逆运算方法及运算器 | |
Nedjah et al. | Four hardware implementations for the m-ary modular exponentiation | |
CN110233727A (zh) | 一种sm2运算方法、系统、设备及计算机存储介质 | |
CN102521544A (zh) | 一种在cpu中抗能量攻击的模幂运算的实现方法 |
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 |