[发明专利]一种实现SM2密码体制的大整数求乘逆方法有效
申请号: | 201310281880.X | 申请日: | 2013-07-05 |
公开(公告)号: | CN103389965A | 公开(公告)日: | 2013-11-13 |
发明(设计)人: | 蒋声障;张登峰;余杭军 | 申请(专利权)人: | 福建升腾资讯有限公司 |
主分类号: | G06F17/11 | 分类号: | G06F17/11 |
代理公司: | 福州市鼓楼区京华专利事务所(普通合伙) 35212 | 代理人: | 宋连梅 |
地址: | 350000 福建省福州市仓山区金*** | 国省代码: | 福建;35 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 实现 sm2 密码 体制 整数 求乘逆 方法 | ||
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、执行所述输出模块。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于福建升腾资讯有限公司,未经福建升腾资讯有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310281880.X/1.html,转载请声明来源钻瓜专利网。