CN103389965A - 一种实现sm2密码体制的大整数求乘逆方法 - Google Patents
一种实现sm2密码体制的大整数求乘逆方法 Download PDFInfo
- Publication number
- CN103389965A CN103389965A CN201310281880XA CN201310281880A CN103389965A CN 103389965 A CN103389965 A CN 103389965A CN 201310281880X A CN201310281880X A CN 201310281880XA CN 201310281880 A CN201310281880 A CN 201310281880A CN 103389965 A CN103389965 A CN 103389965A
- Authority
- CN
- China
- Prior art keywords
- register
- data
- value
- equation
- described data
- 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
Images
Landscapes
- Error Detection And Correction (AREA)
Abstract
本发明提供一种实现SM2密码体制的大整数求乘逆方法,具体包括如下步骤:将模值n、大整数a分别存储至模值寄存器、整数寄存器;将大整数a、数值1、模值n、数值0分别存储至方程系数寄存器一、方程常量寄存器一、方程系数寄存器二、方程常量寄存器二;执行方程一化简模块;执行循环运算;依据循环结束条件判断模块的结果选择进入循环或终止循环执行输出模块;当终止循环时即得出该大整数a的乘逆运算值r。本发明的优点在,速度快,节省内存的消耗。
Description
技术领域
本发明具体涉及一种实现SM2密码体制的大整数求乘逆方法。
背景技术
在SM2密码体制等金融安全相关领域,大数的求乘逆运算速度以及运算所需要的内存空间,直接影响了金融产品的使用性能及限制了部分应用范围,可能还间接地影响金融产品的成本。目前业内公认扩展的欧几里德算法为最快的求乘逆方法;为了满足需求今后的加密需求,需要速度更快且内存消耗低的大整数求乘逆方法。
发明内容
本发明要解决的技术问题,在于提供一种实现SM2密码体制的大整数求乘逆方法,速度快且耗内存小。
本发明是这样实现的:一种实现SM2密码体制的大整数求乘逆方法,包括:
整数寄存器:用于存储大整数a的值,且在一次求乘逆运算过程中,a的值保持不变;
模值寄存器:用于存储模值n,模值寄存器中的数据在SM2算法运算过程中保持不变;
方程系数寄存器一:用于存储方程一未知数系数的数据C1;
方程系数寄存器二:用于存储方程二未知数系数的数据C2;
方程常量寄存器一:用于存储方程一常量的数据V1;
方程常量寄存器二:用于存储方程二常量的数据V2;
移位数据寄存器:用于存储待右移的数据D;
计算连续比特0个数模块:用于计算移位数据寄存器的数据D以二进制表示时,从最低位开始连续比特0的位数k;
移位位数寄存器:用于存储所述位数k;
有限域移位模块:用于将二进制的所述数据D,依据所述位数k的值进行连续k次的右移1位运算;每次右移1位运算时,对二进制的所述数据D进行判断,当二进制的所述数据D最低位为0时,则将二进制的所述数据D的该次右移1位运算后的结果记为数据D1;当二进制的所述数据D的最低位为1时,则将二进制的所述数据D与二进制的所述模值n二者相加的和进行右移1位运算后的结果记为数据D1;且将第1至第k-1次的右移1位运算后所产生出的所述数据D1记为下一次右移1位运算的所述数据D;
移位结果寄存器:用于存储所述数据D1;
被加数寄存器:用于存储一被加数值ADD1;
加数寄存器:用于存储一加数值ADD2;
有限域加法模块:用于将被加数值ADD1与加数值ADD2相加;当ADD1+ADD2>=n时,将ADD1+ADD2-n的结果记为数据ADD;当ADD1+ADD2<n时,将ADD1+ADD2的结果记为数据ADD;
加法结果寄存器:用于存储所述数据ADD;
被减数寄存器:用于存储被减数值SUB1;
减数寄存器:用于存储减数值SUB2;
有限域减法模块:用于将被减数值SUB1与减数值SUB2相减;当SUB1>=SUB2时,将SUB1-SUB2的结果记为数据SUB;当SUB1<SUB2时,将n+SUB1-SUB2的结果记为数据SUB;
减法结果寄存器:用于存储所述数据SUB
方程系数比较模块:用于比较C1和C2的大小;当C1>=C2时,输出一表示TRUE的状态值bCmp;当C1<C2时,输出一表示FALSE的状态值bCmp;
系数比较结果寄存器:用于存储所述状态值bCmp;所述状态值bCmp仅表示TRUE或FALSE任一种;
分支判断模块:用于判断所述数据C1和所述数据C2两者于二进制表示中的低第2位的值;当所述数据C1的低第2位的值等于所述数据C2的低第2位的值时,输出一表示FALSE的状态值bAdd;当所述数据C1的低第2位的值不等于所述数据C2的低第2位的值时,输出一表示TRUE的状态值bAdd;
分支判断结果寄存器:用于存储所述状态值bAdd,所述状态值bAdd仅表示TRUE或FALSE任一种;
循环结束条件判断模块:用于判断循环运算结果;当所述数据C1=1,将所述数据V1记为所述大整数a的乘逆运算值r,且输出一表示TRUE的状态值bRoop;当所述数据C2=1,将所述数据V2记为所述大整数a的乘逆运算值r,且输出一表示TRUE的状态值bRoop;当所述数据C1和数据C2均不等于1时,输出一表示FALSE的状态值bRoop;
输出结果寄存器:用于存储乘逆运算值r;
循环结束条件判断结果寄存器:用于存储所述状态值bRoop,所述状态值bRoop仅表示TRUE或FALSE任一种;
方程一化简模块:用于化简所述数据C1,使所述数据C1转化为奇数;将所述数据C1输入至移位数据寄存器;先执行所述计算连续比特0个数模块,后执行所述有限域移位模块;将所述数据D1覆盖输入至方程系数寄存器一;将所述数据V1输入至移位数据寄存器;执行所述有限域移位模块;将所述数据D1覆盖输入至方程常量寄存器一;
方程二化简模块:用于化简所述数据C2,使所述数据C2转化为奇数;将所述数据C2输入至移位数据寄存器;先执行所述计算连续比特0个数模块,后执行所述有限域移位模块;将所述数据D1覆盖输入至方程系数寄存器一;将所述数据V1输入至移位数据寄存器;执行所述有限域移位模块;将所述数据D1覆盖输入至方程常量寄存器一;
输出模块:用于将所述输出结果寄存器中的乘逆运算值r输出;
该方法具体包括如下步骤:
步骤10、进行初始化;将所述模值n存储至所述模值寄存器;
步骤20、将大整数a存储至整数寄存器;
步骤30、将所述大整数a存储至所述方程系数寄存器一;将一数值1存储至所述方程常量寄存器一;将所述模值n存储至所述方程系数寄存器二;将一数值0存储至所述方程常量寄存器二;
步骤40、执行所述方程一化简模块;
步骤50、执行循环运算;执行所述循环结束条件判断模块;当循环结束条件判断结果寄存器中的状态值bRoop表示TRUE时,则终止循环,进入步骤60;当环结束条件判断结果寄存器中的状态值bRoop表示FALSE时,进入步骤51;
步骤51、执行所述方程系数比较模块;
步骤52、执行所述分支判断结果寄存器判断;当所述分支判断结果寄存器中的状态值bAdd表示TRUE时,进入步骤53;当所述分支判断结果寄存器中的状态值bAdd表示FALSE时,进入步骤54;
步骤53、将所述数据C1、数据C2分别输入至所述被加数寄存器、加数寄存器后,执行所述有限域加法模块;
当所述系数比较结果寄存器中的状态值bCmp表示TRUE时,将所述加法结果寄存器中的数据ADD覆盖输入至所述数据C1;
当所述系数比较结果寄存器中的状态值bCmp表示FALSE时,将所述加法结果寄存器中的数据ADD覆盖输入所述数据至C2;
将所述数据V1、数据V2分别输入至所述被加数寄存器、加数寄存器后,执行所述有限域加法模块;
当所述系数比较结果寄存器中的状态值bCmp表示TRUE时,将所述加法结果寄存器中的数据ADD覆盖输入至所述数据V1;
当所述系数比较结果寄存器中的状态值bCmp表示FALSE时,将所述加法结果寄存器中的数据ADD覆盖输入至所述数据V2;进入步骤55;
步骤54、当所述系数比较结果寄存器中的状态值bCmp表示TRUE时,将所述数据C1、数据C2分别输入至所述被减数寄存器、减数寄存器后,执行所述有限域减法模块;将所述减法结果寄存器中的数据SUB覆盖输入至所述数据C1;将所述数据V1、数据V2分别输入至所述被减数寄存器、减数寄存器后,执行所述有限域减法模块;将所述减法结果寄存器中的数据SUB覆盖输入至所述数据V1;进入步骤55;
当所述系数比较结果寄存器中的状态值bCmp表示FALSE时,将所述数据C2、数据C1分别输入至所述被减数寄存器、减数寄存器后,执行所述有限域减法模块;将所述减法结果寄存器中的数据SUB覆盖输入至所述数据C2;将所述数据V2、数据V1分别输入至所述被减数寄存器、减数寄存器后,执行有限域减法模块;将所述减法结果寄存器中的数据SUB覆盖输入至所述数据V2;进入步骤55;
步骤55、当所述系数比较结果寄存器中的状态值bCmp表示TRUE时,执行所述方程一化简模块,返回步骤50;
当所述系数比较结果寄存器中的状态值bCmp表示FALSE时,执行所述方程二化简模块,返回步骤50;
步骤60、执行所述输出模块。
本发明具有如下优点:通过各个模块及存储器对大整数a和模值进行求乘逆值运算,实现快速且低耗内存求得大数求乘逆值r。
附图说明
下面参照附图结合实施例对本发明作进一步的说明。
图1为本发明一种实现SM2密码体制的大整数求乘逆方法的执行流程图。
具体实施方式
请参阅图1所示,一种实现SM2密码体制的大整数求乘逆方法,包括:
整数寄存器:用于存储大整数a的值,且在一次求乘逆运算过程中,a的值保持不变;
模值寄存器:用于存储模值n,模值寄存器中的数据在SM2算法运算过程中保持不变;
方程系数寄存器一:用于存储方程一未知数系数的数据C1;
方程系数寄存器二:用于存储方程二未知数系数的数据C2;
方程常量寄存器一:用于存储方程一常量的数据V1;
方程常量寄存器二:用于存储方程二常量的数据V2;
根据所述大整数a和模值n,所述方程一为ar=1mod(n),所述方程二为nr=0mod(n),即C1=a、C2=n、V1=1、V2=0;
移位数据寄存器:用于存储待右移的数据D;
计算连续比特0个数模块:用于计算移位数据寄存器的数据D以二进制表示时,从最低位开始连续比特0的位数k(即所述位数k是低位开始的连续BIT0的个数);
移位位数寄存器:用于存储所述位数k;
有限域移位模块:用于将二进制的所述数据D,依据所述位数k的值进行连续k次的右移1位运算;每次右移1位运算时,对二进制的所述数据D进行判断,当二进制的所述数据D最低位为0时,则将二进制的所述数据D的该次右移1位运算后的结果记为数据D1;当二进制的所述数据D的最低位为1时,则将二进制的所述数据D与二进制的所述模值n二者相加的和进行右移1位运算后的结果记为数据D1;且将第1至第k-1次的右移1位运算后所产生出的所述数据D1记为下一次右移1位运算的所述数据D;
即第1至第k-1次的右移1位运算后产生的数据D1作为下一次右移1位运算的数据D,如此反复进行直到k次右移全部完成,最后1次(即第k次)的右移1位运算后产生的数据D1,即为最终结果;
移位结果寄存器:用于存储所述数据D1;
被加数寄存器:用于存储一被加数值ADD1;
加数寄存器:用于存储一加数值ADD2;
有限域加法模块:用于将被加数值ADD1与加数值ADD2相加;当ADD1+ADD2>=n时,将ADD1+ADD2-n的结果记为数据ADD;当ADD1+ADD2<n时,将ADD1+ADD2的结果记为数据ADD;
加法结果寄存器:用于存储所述数据ADD;
被减数寄存器:用于存储被减数值SUB1;
减数寄存器:用于存储减数值SUB2;
有限域减法模块:用于将被减数值SUB1与减数值SUB2相减;当SUB1>=SUB2时,将SUB1-SUB2的结果记为数据SUB;当SUB1<SUB2时,将n+SUB1-SUB2的结果记为数据SUB;
减法结果寄存器:用于存储所述数据SUB
方程系数比较模块:用于比较C1和C2的大小;当C1>=C2时,输出一表示TRUE的状态值bCmp;当C1<C2时,输出一表示FALSE的状态值bCmp;
系数比较结果寄存器:用于存储所述状态值bCmp;所述状态值bCmp仅表示TRUE或FALSE任一种(即bCmp=TRUE或FALSE);
分支判断模块:用于判断所述数据C1和所述数据C2两者于二进制表示中的低第2位的值;当所述数据C1的低第2位的值等于所述数据C2的低第2位的值时,输出一表示FALSE的状态值bAdd;当所述数据C1的低第2位的值不等于所述数据C2的低第2位的值时,输出一表示TRUE的状态值bAdd;
分支判断结果寄存器:用于存储所述状态值bAdd,所述状态值bAdd仅表示TRUE或FALSE任一种(即bAdd=TRUE或FALSE);
循环结束条件判断模块:用于判断循环运算结果;当所述数据C1=1,将所述数据V1记为所述大整数a的乘逆运算值r,且输出一表示TRUE的状态值bRoop;当所述数据C2=1,将所述数据V2记为所述大整数a的乘逆运算值r,且输出一表示TRUE的状态值bRoop;当所述数据C1和数据C2均不等于1时,输出一表示FALSE的状态值bRoop;
输出结果寄存器:用于存储乘逆运算值r;
循环结束条件判断结果寄存器:用于存储所述状态值bRoop,所述状态值bRoop仅表示TRUE或FALSE任一种(即bRoop=TRUE或FALSE);
方程一化简模块:用于化简所述数据C1,使所述数据C1转化为奇数;将所述数据C1输入至移位数据寄存器(即D=C1);先执行所述计算连续比特0个数模块,后执行所述有限域移位模块;将所述数据D1覆盖输入至方程系数寄存器一(即C1=D1);
将所述数据V1输入至移位数据寄存器(即D=V1);执行所述有限域移位模块(其中,执行所述有限域移位模块时的位数k即为C1执行所述计算连续比特0个数模块后的位数k);将所述数据D1覆盖输入至方程常量寄存器一(即V1=D1);
方程二化简模块:用于化简所述数据C2,使所述数据C2转化为奇数;将所述数据C2输入至移位数据寄存器(即D=C2);先执行所述计算连续比特0个数模块,后执行所述有限域移位模块;将所述数据D1覆盖输入至方程系数寄存器一(即C2=D1);
将所述数据V1输入至移位数据寄存器(即D=V2);执行所述有限域移位模块(其中,执行所述有限域移位模块时的位数k即为C2执行所述计算连续比特0个数模块后的位数k);将所述数据D1覆盖输入至方程常量寄存器一(即V2=D1);
输出模块:用于将所述输出结果寄存器中的乘逆运算值r输出;
该方法具体包括如下步骤:
步骤10、进行初始化;将所述模值n存储至所述模值寄存器;
步骤20、将大整数a存储至整数寄存器;
步骤30、将所述大整数a存储至所述方程系数寄存器一;将一数值1存储至所述方程常量寄存器一;将所述模值n存储至所述方程系数寄存器二;将一数值0存储至所述方程常量寄存器二;
步骤40、执行所述方程一化简模块;
步骤50、执行循环运算;执行所述循环结束条件判断模块;当循环结束条件判断结果寄存器中的状态值bRoop表示TRUE时,则终止循环,进入步骤60;当环结束条件判断结果寄存器中的状态值bRoop表示FALSE时,进入步骤51;
步骤51、执行所述方程系数比较模块;
步骤52、执行所述分支判断结果寄存器判断(即对分支判断结果寄存器中的状态值bAdd进行判断);当所述分支判断结果寄存器中的状态值bAdd表示TRUE时,进入步骤53;当所述分支判断结果寄存器中的状态值bAdd表示FALSE时,进入步骤54;
步骤53、将所述数据C1、数据C2分别输入至所述被加数寄存器、加数寄存器后(即ADD1=C1,ADD2=C2),执行所述有限域加法模块;
当所述系数比较结果寄存器中的状态值bCmp表示TRUE时,将所述加法结果寄存器中的数据ADD覆盖输入至所述数据C1;
当所述系数比较结果寄存器中的状态值bCmp表示FALSE时,将所述加法结果寄存器中的数据ADD覆盖输入所述数据至C2;
将所述数据V1、数据V2分别输入至所述被加数寄存器、加数寄存器后(即ADD1=V1,ADD2=V2),执行所述有限域加法模块;
当所述系数比较结果寄存器中的状态值bCmp表示TRUE时,将所述加法结果寄存器中的数据ADD覆盖输入至所述数据V1;
当所述系数比较结果寄存器中的状态值bCmp表示FALSE时,将所述加法结果寄存器中的数据ADD覆盖输入至所述数据V2;进入步骤55;
步骤54、当所述系数比较结果寄存器中的状态值bCmp表示TRUE时,将所述数据C1、数据C2分别输入至所述被减数寄存器、减数寄存器后(即SUB1=C1、SUB2=C2),执行所述有限域减法模块;将所述减法结果寄存器中的数据SUB覆盖输入至所述数据C1;
将所述数据V1、数据V2分别输入至所述被减数寄存器、减数寄存器后(即SUB1=V1、SUB2=V2),执行所述有限域减法模块;将所述减法结果寄存器中的数据SUB覆盖输入至所述数据V1(相当于是进行一组数据C1减C2和另一组数据V1减V2,两组的相减互不影响);进入步骤55;
当所述系数比较结果寄存器中的状态值bCmp表示FALSE时,将所述数据C2、数据C1分别输入至所述被减数寄存器、减数寄存器后(即SUB1=C2、SUB2=C1),执行所述有限域减法模块;将所述减法结果寄存器中的数据SUB覆盖输入至所述数据C2;将所述数据V2、数据V1分别输入至所述被减数寄存器、减数寄存器后(即SUB1=V2、SUB2=V1),执行有限域减法模块;将所述减法结果寄存器中的数据SUB覆盖输入至所述数据V2(相当于是进行一组数据C2减C1和另一组数据V2减V1,两组的相减互不影响);进入步骤55;
步骤55、当所述系数比较结果寄存器中的状态值bCmp表示TRUE时,执行所述方程一化简模块,返回步骤50;
当所述系数比较结果寄存器中的状态值bCmp表示FALSE时,执行所述方程二化简模块,返回步骤50;
步骤60、执行所述输出模块。
本发明一种实现SM2密码体制的大整数求乘逆方法的相关理论证明如下:
在有限域加法、有限域减法、有限域移位三种基础运算的一致条件中显然有方程ar mod n=1,另外有隐含的方程nr mod n=0;对于在有限域加减法解方程过程,显然是成立的,因此不做证明,下面就有限域的移位进行理论证明:
1.首先,在SM2密码体制中,n为奇素数,a!=0,即r也不等于0,因此有[a,n]=1;可以把命题重述为若n为奇素数,r!=0,b为偶数时,且b!=0,满足br mod n=c,则有(b/2)r mod n=c>>>1,其中“>>>”指按本发明所述的有限域移位模块的运算,只要该命题成立,则上述算法则能保证结果正确;
2.由于br mod n=c,则必存在一个整数k使得br=kn+c;若c为奇数,而b为偶数,显然k也为奇数,此时有br=(k-1)n+n+c,两边同时除以2,则(b/2)r=(k-1)n/2+(n+c)/2
=(k-1)n/2+(c>>>1);因此(b/2)r mod n=c>>>1;
若c为偶数,则显然k也为偶数,则(b/2)r=kn/2+c/2=kn/2+(c>>>1);因此(b/2)r mod n=c>>>1;
即无论c为奇数还是偶数,(b/2)r mod n=c>>>1;
与扩展欧几里德算法对比的测试数据参考:
在同一环境中进行测试扩展欧几里得算法与本发明一种实现SM2密码体制的大整数求乘逆方法的运行时间及代码所需内存对比,以供参考,结果
如下表:
具体实施方式举例:
以n=37,a=26为例,本发明一种实现SM2密码体制的大整数求乘逆方法是这样实现的:
1.提出两个方程:
26r=1mod(37)...(1)(即C1=26,V1=1);
37r=0mod(37)...(2)(即C2=37,V2=0);
2.化简系数得到:13r=19mod(37)...(3)(即C1=13,V1=19);
3.进行循环:
3.1(2)式减去(3)式,得24r=18mod(37)...(4)
(即C2=C2-C1,V2=V2+n-V1);
3.2(4)式两边同时右移3位,得3r=30mod(37)...(5)
(即C2>>=3,V2=V2>>>3);
4.继续循环:
4.1(3)式加上(5)式,得16r=12mod(37)...(6)
(即C1=C1+C2,V1=V1+V2);
4.2(6)式两边同时右移4位得r=10mod(37)...(7)
(即C1>>=4,V1=V1>>>4);
5.(7)式r的系数为1,循环结束,此时得到最后结果r=10。
本发明一种实现SM2密码体制的大整数求乘逆方法,通过运用解方程的思路,使用加减法及移位运算,避免了频繁的除法运算,与使用相同功能的扩展欧几里得运算的方法相比既使运算速度加快,又大大地节省了内存资源的使用。
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。
Claims (1)
1.一种实现SM2密码体制的大整数求乘逆方法,其特征在于:包括:
整数寄存器:用于存储大整数a的值,且在一次求乘逆运算过程中,a的值保持不变;
模值寄存器:用于存储模值n,模值寄存器中的数据在SM2算法运算过程中保持不变;
方程系数寄存器一:用于存储方程一未知数系数的数据C1;
方程系数寄存器二:用于存储方程二未知数系数的数据C2;
方程常量寄存器一:用于存储方程一常量的数据V1;
方程常量寄存器二:用于存储方程二常量的数据V2;
移位数据寄存器:用于存储待右移的数据D;
计算连续比特0个数模块:用于计算移位数据寄存器的数据D以二进制表示时,从最低位开始连续比特0的位数k;
移位位数寄存器:用于存储所述位数k;
有限域移位模块:用于将二进制的所述数据D,依据所述位数k的值进行连续k次的右移1位运算;每次右移1位运算时,对二进制的所述数据D进行判断,当二进制的所述数据D最低位为0时,则将二进制的所述数据D的该次右移1位运算后的结果记为数据D1;当二进制的所述数据D的最低位为1时,则将二进制的所述数据D与二进制的所述模值n二者相加的和进行右移1位运算后的结果记为数据D1;且将第1至第k-1次的右移1位运算后所产生出的所述数据D1记为下一次右移1位运算的所述数据D;
移位结果寄存器:用于存储所述数据D1;
被加数寄存器:用于存储一被加数值ADD1;
加数寄存器:用于存储一加数值ADD2;
有限域加法模块:用于将被加数值ADD1与加数值ADD2相加;当ADD1+ADD2>=n时,将ADD1+ADD2-n的结果记为数据ADD;当ADD1+ADD2<n时,将ADD1+ADD2的结果记为数据ADD;
加法结果寄存器:用于存储所述数据ADD;
被减数寄存器:用于存储被减数值SUB1;
减数寄存器:用于存储减数值SUB2;
有限域减法模块:用于将被减数值SUB1与减数值SUB2相减;当SUB1>=SUB2时,将SUB1-SUB2的结果记为数据SUB;当SUB1<SUB2时,将n+SUB1-SUB2的结果记为数据SUB;
减法结果寄存器:用于存储所述数据SUB
方程系数比较模块:用于比较C1和C2的大小;当C1>=C2时,输出一表示TRUE的状态值bCmp;当C1<C2时,输出一表示FALSE的状态值bCmp;
系数比较结果寄存器:用于存储所述状态值bCmp;所述状态值bCmp仅表示TRUE或FALSE任一种;
分支判断模块:用于判断所述数据C1和所述数据C2两者于二进制表示中的低第2位的值;当所述数据C1的低第2位的值等于所述数据C2的低第2位的值时,输出一表示FALSE的状态值bAdd;当所述数据C1的低第2位的值不等于所述数据C2的低第2位的值时,输出一表示TRUE的状态值bAdd;
分支判断结果寄存器:用于存储所述状态值bAdd,所述状态值bAdd仅表示TRUE或FALSE任一种;
循环结束条件判断模块:用于判断循环运算结果;当所述数据C1=1,将所述数据V1记为所述大整数a的乘逆运算值r,且输出一表示TRUE的状态值bRoop;当所述数据C2=1,将所述数据V2记为所述大整数a的乘逆运算值r,且输出一表示TRUE的状态值bRoop;当所述数据C1和数据C2均不等于1时,输出一表示FALSE的状态值bRoop;
输出结果寄存器:用于存储乘逆运算值r;
循环结束条件判断结果寄存器:用于存储所述状态值bRoop,所述状态值bRoop仅表示TRUE或FALSE任一种;
方程一化简模块:用于化简所述数据C1,使所述数据C1转化为奇数;将所述数据C1输入至移位数据寄存器;先执行所述计算连续比特0个数模块,后执行所述有限域移位模块;将所述数据D1覆盖输入至方程系数寄存器一;将所述数据V1输入至移位数据寄存器;执行所述有限域移位模块;将所述数据D1覆盖输入至方程常量寄存器一;
方程二化简模块:用于化简所述数据C2,使所述数据C2转化为奇数;将所述数据C2输入至移位数据寄存器;先执行所述计算连续比特0个数模块,后执行所述有限域移位模块;将所述数据D1覆盖输入至方程系数寄存器一;将所述数据V1输入至移位数据寄存器;执行所述有限域移位模块;将所述数据D1覆盖输入至方程常量寄存器一;
输出模块:用于将所述输出结果寄存器中的乘逆运算值r输出;
该方法具体包括如下步骤:
步骤10、进行初始化;将所述模值n存储至所述模值寄存器;
步骤20、将大整数a存储至整数寄存器;
步骤30、将所述大整数a存储至所述方程系数寄存器一;将一数值1存储至所述方程常量寄存器一;将所述模值n存储至所述方程系数寄存器二;将一数值0存储至所述方程常量寄存器二;
步骤40、执行所述方程一化简模块;
步骤50、执行循环运算;执行所述循环结束条件判断模块;当循环结束条件判断结果寄存器中的状态值bRoop表示TRUE时,则终止循环,进入步骤60;当环结束条件判断结果寄存器中的状态值bRoop表示FALSE时,进入步骤51;
步骤51、执行所述方程系数比较模块;
步骤52、执行所述分支判断结果寄存器判断;当所述分支判断结果寄存器中的状态值bAdd表示TRUE时,进入步骤53;当所述分支判断结果寄存器中的状态值bAdd表示FALSE时,进入步骤54;
步骤53、将所述数据C1、数据C2分别输入至所述被加数寄存器、加数寄存器后,执行所述有限域加法模块;
当所述系数比较结果寄存器中的状态值bCmp表示TRUE时,将所述加法结果寄存器中的数据ADD覆盖输入至所述数据C1;
当所述系数比较结果寄存器中的状态值bCmp表示FALSE时,将所述加法结果寄存器中的数据ADD覆盖输入所述数据至C2;
将所述数据V1、数据V2分别输入至所述被加数寄存器、加数寄存器后,执行所述有限域加法模块;
当所述系数比较结果寄存器中的状态值bCmp表示TRUE时,将所述加法结果寄存器中的数据ADD覆盖输入至所述数据V1;
当所述系数比较结果寄存器中的状态值bCmp表示FALSE时,将所述加法结果寄存器中的数据ADD覆盖输入至所述数据V2;进入步骤55;
步骤54、当所述系数比较结果寄存器中的状态值bCmp表示TRUE时,将所述数据C1、数据C2分别输入至所述被减数寄存器、减数寄存器后,执行所述有限域减法模块;将所述减法结果寄存器中的数据SUB覆盖输入至所述数据C1;将所述数据V1、数据V2分别输入至所述被减数寄存器、减数寄存器后,执行所述有限域减法模块;将所述减法结果寄存器中的数据SUB覆盖输入至所述数据V1;进入步骤55;
当所述系数比较结果寄存器中的状态值bCmp表示FALSE时,将所述数据C2、数据C1分别输入至所述被减数寄存器、减数寄存器后,执行所述有限域减法模块;将所述减法结果寄存器中的数据SUB覆盖输入至所述数据C2;将所述数据V2、数据V1分别输入至所述被减数寄存器、减数寄存器后,执行有限域减法模块;将所述减法结果寄存器中的数据SUB覆盖输入至所述数据V2;进入步骤55;
步骤55、当所述系数比较结果寄存器中的状态值bCmp表示TRUE时,执行所述方程一化简模块,返回步骤50;
当所述系数比较结果寄存器中的状态值bCmp表示FALSE时,执行所述方程二化简模块,返回步骤50;
步骤60、执行所述输出模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310281880.XA CN103389965B (zh) | 2013-07-05 | 2013-07-05 | 一种实现sm2密码体制的大整数求乘逆方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310281880.XA CN103389965B (zh) | 2013-07-05 | 2013-07-05 | 一种实现sm2密码体制的大整数求乘逆方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103389965A true CN103389965A (zh) | 2013-11-13 |
CN103389965B CN103389965B (zh) | 2016-04-20 |
Family
ID=49534241
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310281880.XA Active CN103389965B (zh) | 2013-07-05 | 2013-07-05 | 一种实现sm2密码体制的大整数求乘逆方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103389965B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106850212A (zh) * | 2017-03-06 | 2017-06-13 | 西安电子科技大学 | 基于rsa密码算法的密钥生成系统及方法 |
CN110233727A (zh) * | 2019-06-12 | 2019-09-13 | 湖南国科微电子股份有限公司 | 一种sm2运算方法、系统、设备及计算机存储介质 |
CN112099761A (zh) * | 2020-08-27 | 2020-12-18 | 清华大学 | 基于改进的二进制左移模逆算法的装置及其控制方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1809807A (zh) * | 2003-06-21 | 2006-07-26 | 皇家飞利浦电子股份有限公司 | 改进的求逆计算 |
US20110161390A1 (en) * | 2006-02-09 | 2011-06-30 | Masayuki Yoshino | Modular multiplication processing apparatus |
CN102761413A (zh) * | 2011-04-27 | 2012-10-31 | 航天信息股份有限公司 | p元域SM2椭圆曲线公钥密码算法的实现系统 |
-
2013
- 2013-07-05 CN CN201310281880.XA patent/CN103389965B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1809807A (zh) * | 2003-06-21 | 2006-07-26 | 皇家飞利浦电子股份有限公司 | 改进的求逆计算 |
US20110161390A1 (en) * | 2006-02-09 | 2011-06-30 | Masayuki Yoshino | Modular multiplication processing apparatus |
CN102761413A (zh) * | 2011-04-27 | 2012-10-31 | 航天信息股份有限公司 | p元域SM2椭圆曲线公钥密码算法的实现系统 |
Non-Patent Citations (4)
Title |
---|
E.SAVAS ET AL.: "The montgomery modular inverse-revisited", 《IEEE TRANSACTIONS ON COMPUTERS》 * |
YANG XIAOHUI ET AL.: "Design and implementation of dual-field modular inversion algorithm", 《JOURNAL OF ELECTRONICS(CHINA)》 * |
王珑等: "一种计算大数模逆运算的新方法", 《微电子学与计算机》 * |
陈琳等: "基于有符号数字系统的Montgomery模逆算法及其硬件实现", 《电子学报》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106850212A (zh) * | 2017-03-06 | 2017-06-13 | 西安电子科技大学 | 基于rsa密码算法的密钥生成系统及方法 |
CN110233727A (zh) * | 2019-06-12 | 2019-09-13 | 湖南国科微电子股份有限公司 | 一种sm2运算方法、系统、设备及计算机存储介质 |
CN112099761A (zh) * | 2020-08-27 | 2020-12-18 | 清华大学 | 基于改进的二进制左移模逆算法的装置及其控制方法 |
CN112099761B (zh) * | 2020-08-27 | 2022-09-02 | 清华大学 | 基于改进的二进制左移模逆算法的装置及其控制方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103389965B (zh) | 2016-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11983280B2 (en) | Protection of cryptographic operations by intermediate randomization | |
US10263768B2 (en) | Protection of a calculation against side-channel attacks | |
US8767955B2 (en) | Protection of a modular exponentiation calculation by multiplication by a random quantity | |
US20130301826A1 (en) | System, method, and program for protecting cryptographic algorithms from side-channel attacks | |
US11003769B2 (en) | Elliptic curve point multiplication operation method and apparatus | |
CN111092718A (zh) | 加密方法、装置及电子设备 | |
US20210109711A1 (en) | Processor and method for processing mask data | |
Bos | Low-latency elliptic curve scalar multiplication | |
CN103389965B (zh) | 一种实现sm2密码体制的大整数求乘逆方法 | |
CN114095149B (zh) | 信息加密方法、装置、设备及存储介质 | |
CN103207770A (zh) | 一种在嵌入式系统中实现大数预计算的方法 | |
CN117972761A (zh) | 基于国密sm2算法的数据处理方法以及装置 | |
Edamatsu et al. | Acceleration of large integer multiplication with Intel AVX-512 instructions | |
CN117692126A (zh) | 一种基于低复杂度模乘算法的Paillier同态加密方法及系统 | |
Seo et al. | Consecutive operand-caching method for multiprecision multiplication, revisited | |
Keliris et al. | Investigating large integer arithmetic on Intel Xeon Phi SIMD extensions | |
WO2013036217A1 (en) | Number squaring computer-implemented method and apparatus | |
Li et al. | Parallel algorithms for cryptosystem on conic curves over finite field Fp | |
KR20100063623A (ko) | 모듈러 곱셈 연산 방법 및 장치 | |
CN104579651A (zh) | 椭圆曲线密码点乘运算的方法和装置 | |
US20160034255A1 (en) | Arithmetic Devices, Montgomery Parameter Calculation Method and Modular Multiplication Method Thereof | |
Ma et al. | Fast implementation for modular inversion and scalar multiplication in the elliptic curve cryptography | |
CN109947393B (zh) | 基于求余器的运算方法及装置 | |
Seo et al. | Multi-precision squaring on MSP and ARM processors | |
JP5896756B2 (ja) | 演算装置及びプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |