本发明属于通信技术领域,更进一步涉及信息安全技术领域中的一种公钥密码体制中基于RSA密码算法的密钥生成系统及方法。本发明通过对大素数进行预处理,结合Miller-Rabin检测,在计算私钥是采用改进的欧几里得算法,有效避免了除法问题,生成符合RSA算法要求的密钥。
背景技术:
随着通信及信息安全技术的发展,公钥密码体制越来越受到人们的重视。在众多的公开密钥密码算法中,RSA密码算法是最成熟,也是使用最广泛的一种密码算法。它不仅具有传统的信息加密能力,并且能够用于验证信息的真实性、完整性和有效性,从而受到了广大用户的青睐,并已经成为了公钥密码的国际标准。但是实际上RSA密码算法也有着它本身不可避免的缺点,产生密钥很麻烦,受到素数产生技术的限制,难以做到一次一密;速度太慢,由于RSA的分组长度太大,为保证安全性,n至少也要600比特以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级。因此如何在短时间内产生大量符合RSA算法要求的密钥成为当前的研究热点。
龙建超在其发表的论文“公钥算法中大素数生成方法的研究改进”(云南大学硕士学位论文,2014)中提出了一种改进的公钥算法中大素数的生成方法。该方法在大素数传统生成方法的基础上,利用随机递增搜索,结合准梅森素数的特性,生成随机数后增加预过滤过程,再进行素性检测得到大素数,减少了大素数的生成时间。该方法存在的不足之处是,素性检测结果是素数的概率不够大,导致RSA密码算法不安全。
南京邮电大学在其申请的专利文献“一种改进的快速生成大素数的方法”(专利申请号:201510814574.1,申请公布号:CN1015770A)中公开了一种改进的快速生成大素数的方法。该方法能够快速生成大素数,是基于Miller-Rabin素性检测算法,并且采用蒙哥马利算法对原Miller-Rabin算法检测素数进行了优化。蒙哥马利算法采用的是模加右移的方法,有效地避免了求模运算中比较耗时的除法运算,减少了原算法中模幂运算的次数,从而提高了对素数的检测速度。但是,该方法仍然存在的不足之处是,在计算模逆时,需要循环1024次导致计算复杂而影响RSA密码的实际应用。
深圳数字电视国家工程实验室股份有限公司在其申请的专利文献“RSA密钥生成方法及装置”(专利申请号:201410092851.3,申请公布号:CN103812648A)中公开了一种RSA密钥生成方法及装置。该装置将生成密钥所需的高运算量的计算转移到可信平台外部,减轻了可信平台模块的计算负担。但是,该装置仍然存在的不足之处是,RSA密钥参数创建时,没有对大素数进行预处理的模块,导致系统在进行素数检测时计算量太大而影响RSA的密钥生成速度。
技术实现要素:
本发明的目的在于克服上述已有技术的不足,提出一种基于RSA密码算法的密钥生成方法。本发明通过对大素数进行预处理,结合Miller-Rabin检测,在获得私钥时采用改进的欧几里得方法,有效避免了除法问题,进一步提高了RSA密钥生成效率。
为实现上述目的,本发明的系统包括乘法器模块、随机数模块、预处理模块、判决模块、模值生成模块、模逆模块、输出模块,其中:
所述的乘法器模块,用于计算500以内的所有素数的积;
所述的随机数模块,用于随机生成一个512位的整数;
所述的预处理模块,用于计算500以内所有素数的积与所生成整数的最大公约数;
所述的判决模块,用于对所生成的与500以内所有素数的积互素的整数进行米勒-拉宾Miller-Rabin素性检测;
所述的模值生成模块,用于计算RSA的模值;
所述的模逆模块,用于计算RSA的私钥指数;
所述的输出模块,用于输出模值、第一因子、第二因子、私钥指数。
本发明的方法的具体实现步骤如下:
(1)生成RSA模值的第一因子:
采用RSA模值因子的生成方法,生成罗纳德·李维斯特、阿迪·萨莫尔、伦纳德·阿德曼RSA模值的第一因子p;
(2)生成RSA模值的第二因子:
采用RSA模值因子的生成方法,生成罗纳德·李维斯特、阿迪·萨莫尔、伦纳德·阿德曼RSA模值的第二因子q;
(3)生成模值:
模值生成模块将第一因子p与第二因子q相乘,得到罗纳德·李维斯特、阿迪·萨莫尔、伦纳德·阿德曼RSA的模值;
(4)计算RSA的私钥指数:
(4a)将传统的欧几里得算法中的除法操作转变为移位操作后,得到改进的欧几里得算法;
(4b)利用改进的欧几里得算法,对公钥指数进行模逆操作,将所得到的模逆值作为私钥指数;
(5)输出RSA密钥:
输出模块分别输出模值、第一因子、第二因子、私钥指数。
本发明与现有技术相比具有以下优点:
第三,由于本发明的系统中采用预处理模块,在进行素性检测之前,计算500以内所有素数的积与所生成整数的最大公约数,克服了现有技术由于缺少预处理模块导致的系统在进行素数检测时计算量太大而影响RSA的密钥生成速度,使得本发明的系统具有高效快速的优点。
第一,由于本发明的方法中采用米勒-拉宾Miller-Rabin检测方法对大素数进行检测,克服了现有技术由于素性检测结果是素数的概率不够大,导致RSA密码算法的不安全问题,使得本发明的密钥具有安全性高的优点。
第二,由于本发明的方法中采用了改进的欧几里得算法对公钥指数进行模逆操作,克服了现有技术中在计算模逆时,需要循环1024次导致的计算复杂问题,提高了私钥的生成速度,使得本发明具有实用性高的优点。
附图说明
图1是本发明系统的结构框图;
图2为本发明方法的流程图;
图3为本发明步骤4计算RSA的私钥指数的流程图;
具体实施方式
下面结合附图对本发明作进一步的描述。
参照附图1,本发明的系统包括乘法器模块、随机数模块、预处理模块、判决模块、模值生成模块、模逆模块、输出模块。
所述的乘法器模块,用于计算500以内的所有素数的积。
所述的随机数模块,用于随机生成一个512位的整数。
所述的预处理模块,用于计算500以内所有素数的积与所生成整数的最大公约数。
所述的判决模块,用于对互素的整数进行米勒-拉宾Miller-Rabin素性检测。
所述的模值生成模块,用于计算RSA的模值。
所述的模逆模块,用于计算RSA的私钥指数。
所述的输出模块,用于输出模值、第一因子、第二因子、私钥指数。
参照附图2,对本发明的实现方法做进一步描述。
步骤1,生成RSA模值的第一因子。
(1)生成RSA模值的第一因子:
采用RSA模值因子的生成方法,生成罗纳德·李维斯特、阿迪·萨莫尔、伦纳德·阿德曼RSA模值的第一因子p。
RSA模值第一因子的生成方法的具体步骤如下:
第1步,乘法器模块计算500以内所有素数的积;
第2步,随机数模块随机生成一个512位的整数;
第3步,预处理模块计算500以内所有素数的积与所生成整数的最大公约数;
第4步,判断最大公约数是否为1,若是,则所生成的整数与500以内所有素数的积互素,执行第5步,否则,所生成的整数与500以内所有素数的积不互素,舍弃该不互素的整数,执行第2步;
第5步,判决模块对所生成的与500以内所有素数的积互素的整数进行米勒-拉宾Miller-Rabin素性检测,若检测结果是合数,则舍弃该互素的整数,执行第2步,否则,执行第6步;
第6步,将素性检测后的整数作为罗纳德·李维斯特、阿迪·萨莫尔、伦纳德·阿德曼RSA模值的因子。
步骤2,生成RSA模值的第二因子。
(2)生成RSA模值的第二因子:
采用RSA模值因子的生成方法,生成罗纳德·李维斯特、阿迪·萨莫尔、伦纳德·阿德曼RSA模值的第二因子q。
RSA模值第二因子的生成方法的具体步骤如下:
第1步,乘法器模块计算500以内所有素数的积;
第2步,随机数模块随机生成一个512位的整数;
第3步,预处理模块计算500以内所有素数的积与所生成整数的最大公约数;
第4步,判断最大公约数是否为1,若是,则所生成的整数与500以内所有素数的积互素,执行第5步,否则,所生成的整数与500以内所有素数的积不互素,舍弃该不互素的整数,执行第2步;
第5步,判决模块对所生成的与500以内所有素数的积互素的整数进行米勒-拉宾Miller-Rabin素性检测,若检测结果是合数,则舍弃该互素的整数,执行第2步,否则,执行第6步;
第6步,将素性检测后的整数作为罗纳德·李维斯特、阿迪·萨莫尔、伦纳德·阿德曼RSA模值的因子。
步骤3,生成模值。
(3)生成模值:
模值生成模块将第一因子p与第二因子q相乘,得到罗纳德·李维斯特、阿迪·萨莫尔、伦纳德·阿德曼RSA的模值。
步骤4,计算RSA的私钥指数。
(4)计算RSA的私钥指数:
(4a)将传统的欧几里得算法中的除法操作转变为移位操作后,得到改进的欧几里得算法;
(4b)利用改进的欧几里得算法,对公钥指数进行模逆操作,将所得到的模逆值作为私钥指数。
步骤5,输出RSA密钥。
(5)输出RSA密钥:
输出模块分别输出模值、第一因子、第二因子、私钥指数。
参照附图3,对改进的欧几里得算法的具体步骤作进一步的描述。
第1步,令(X1,X2,X3)=(1,0,e),(Y1,Y2,Y3)=(0,1,Φ(n)),其中Φ(n)表示RSA模值n的欧拉函数;
第2步,判断X3是否为偶数,若是,则执行第3步,否则,执行第6步;
第3步,判断X1和X2的是否都是偶数,若是,则执行第4步,否则,执行第5步;
第4步,将X3末尾0的个数记为t,令执行第6步;
第5步,令(X1,X2,X3)=(X1+Φ(n),X2-e,X3),执行第3步;
第6步,判断Y3是否为偶数,若是,则执行第7步,否则,执行第10步;
第7步,判断Y1和Y2是否都是偶数,若是,则执行第8步,否则,执行第9步;
第8步,将Y3末尾0的个数记为s,令执行第10步;
第9步,令(Y1,Y2,Y3)=(Y1+Φ(n),Y2-e,Y3),执行第7步;
第10步,比较X3与Y3的大小,若X3>Y3,则执行第11步,否则,执行第12步;
第11步,令(X1,X2,X3)=(X1-Y1,X2-Y2,X3-Y3),执行第13步;
第12步,令(Y1,Y2,Y3)=(Y1-X1,Y2-X2,Y3-X3);
第13步,判断X3和Y3的值是否等于1。如果X3=1,则此时X1就是私钥指数d;如果Y3=1,则此时Y1就是私钥指数d;若X3和Y3的值都不等于1,则执行第2步。