RSA加密算法中获得强质数算法的改进

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

RSA 加 密 算 法 是 Ron R ivest、Adi Sham ir 和 Leonard Adleman于 1977年在美国麻省理工学院开 发出来的 ,次年首次对外公开宣布 ,是第一个既能用 于数据加密也能用于数字签名的算法 ,该算法利用 了数论领域的一个事实 ,即将两个大质数相乘生成 一个合数是件十分容易的事情 ,但要把一个合数分 解为两个质数却十分困难. 合数分解问题目前仍然 是数学领域尚未解决的一大难题 ,至今未寻找到高 效的分解方法. 算法的安全性取决于大数分解 ,即大 数分解质因数的困难性. 统计数据表明 , 512位 RSA 加密现在已经无法满足某些重要应用 ,需要增加到 1024位 ,而在不断增大位数的过程中 ,常规分解算 法的速度和效率却在大幅度下降. 本文介绍的改进 算法 ,就是在常规算法的基础上进行改进 ,利用数论 思想 ,给出的一个改进的算法.
int is_p robable_p rime_san ( const vlong &p ) { const rep = 4; / 3 测试次数 3 /
const unsigned any[ rep ] = { 2, 3, 5, 7 }; / 3 测试用的底数 3 / for ( unsigned i = 0; i < rep; i + = 1 ) if ( modexp ( any[ i] , p - vlong ( 1) , p ) ! = vlong ( 1) ) return 0; / 3 modexp 是幂模函数 3 / / 3 这里 modexp计算 any[ i ] p - 1mod p 3 / return 1; }
综上所述 ,总结素数寻找的流程 ,如图 1所示 :
图 1 寻找素数流程图
3 结论
RSA 算法的时间复杂性取决于它所设计的几 个基本运算的时间复杂性.
密钥生成过程时间主要是强质数获得的时间及 计算公钥和私钥的模乘法的时间. 强质数获得的时 间在于完成对随机大数的 Fermat测试的时间 , Fer2 mat测试的时间复杂度为 O ( ( log2 n ) 3 ) , n 所测试的 整数. 模乘法的计算方法采取先计算两个数的乘积 , 再取模 n ,时间复杂性为 O ( ( log2 n ) 2 ) . RSA 加密解 密计算的时间主要是模幂运算的时间 ,即形式为 xc mod n的函数的运算时间. 模幂算法采取平方乘算 法 ,设 l是 c的长度 ,则计算 xc mod n至多需要 2 l次 模乘法 ,因为 l&#61603; [ log2 n ] + 1 ,所以模幂运算 能在时间 O ( ( log2 n ) 3 ) 内完成. 因此 , RSA 的加密和 解密均可在多项式时间内完成. 在 RSA 相关的各种 运算中 ,寻找素数对时间的消耗最大. 经过对常规算 法的改进 ,提高了寻找素数的速度和概率 ,使 RSA 算法能够更好的应用.
·21·
2 常规强质数算法改进算法
首先 ,在需要寻找素数的整数范围内对整数进 行筛选 ,把所有确知为合数的整数排除出去. 程序中 构造了一个数组 b [ ] ,大小为一轮素数搜索的范 围 ,记搜索范围大小为 SS. b [ 0 ]到 b[ SS ] 分别对应 大数 start到 start + SS. b [ ]中所有元素先初始化为 1,如果对应的大数确定为合数 ,就将 b [ ]中对应的 元素置为 0. 最后 ,只需对那些 b [ ]中为 1的元素对 应的大数进行比较确切的素数测试即可 ,只要被测 试的数是素数概率达到一定门限 ,就判这个数为素 数. 这样做既保证了这段程序可以在短时间内执行 完 ,又保证了可以以比较高的准确度得到素数. 函数 find_p rime先把 b [ ]的所有元素赋值为 1,然后按参 数 start给标记数组 b [ ]的各元素赋 0值. 下面描述 标记数组 b [ ]的赋 0值算法. 首先 ,在类 Prime_fac2 tory_san被构造的时候 ,构造函数中从 2开始搜寻一 些小素数 ,记录在数组 pl [ ]中 ,共记录 N P 个. 这些 小素数用来当作因子 ,他们的倍数将被从大素数搜 索范围内剔除 (即把数组 b [ ]的对应元素标记为 0) ,剔除的程序代码如下 :
关键词 : RSA 算法 ;强质数 ;加密 中图分类号 : TP301. 6 文献标识码 : A 文章编号 : 1008 - 7974 (2007) 10 - 0021 - 02 收稿日期 : 2007 - 09 - 10 作者简介 :王淑霞 (1972 - ) ,女 ,吉林集安人 ,通化师范学院计算机科学系讲师 ,主要从事计算机应用研究.
第 28卷第 10期 2007年 10月
通化师范学院学报 JOURNAL OF TONGHUA TEACHERS COLLEGE
Vol. 28 №10 Oct. 2007
R SA 加密算法中获得强质数算法的改进
王淑霞 , 赵洪岩
(通化师范学院 计算机科学系 ,吉林 通化 134002)
摘 要 : RSA 是既能用于数据加密也能用于数字签名的算法 ,强质数获得算法是 RSA 加密算法的核心. 该文介绍了 RSA 算法 的加密过程 ,重点讨论了强质数获得的常规算法以及该算法中存在的缺点和不足. 并在常规算法的基础上 ,结合素数查找算法 ,对 强质数获得算法进行了优化 ,给出了算法实现过程. 实验表明 ,优化后的算法可以提高素数查找速度和查找概率.
rsa加密算法是ronrivestadishamir和leonardadleman于1977?在美国麻省?工学院开发出来的次?首次对外公开宣布是第一个既能用于数据加密也能用于数字签名的算法该算法利用了数论领域的一个事实即将两个大质数相乘生成一个合数是件十分容?的事情但要把一个合数分解为两个质数却十分困难
[ 2 ] 卢开澄. 计算机密码学. 计算机网络中的数据保密与安全 (第 3版 ) [M ]. 北京 :清华大学出版社 , 2004. [ 3 ] 段钢. 加密与解密 (第 2版 ) [M ]. 北京 :电子工业出版社 , 2003 . [ 4 ] W illiam Stallings. 密码学与网络安全原理与实践 (第 2版 ) [M ]. 北京 :清华大学出版社 , 2002. [ 5 ] W enbo Mao. 现代密码学理论与实践 (第 1版 ) [M ]. 北京 :电子工业出版社 , 2004.
将 e 用 2进制表示 Ek Ek - 1 Ek - 2 . . . E1 E0 E i ∈{0, 1} 0 < = i < = k , C = 1
for i = k to 0了 C = C^2 mod n 若 Ei = 1 则 C = C3 (M mod n)
因为幂剩余函数具有特殊的周期性 ,反复运算 X = ( X ^e) mod n , t次后将还原为最初的 X . 早期 的 RSA 算法就曾被人用这种方法破译. 所以在生成 密匙时 ,应采用“强质数 ”,使 t足够大. 而按照常规 的质数获得办法想要获得一个足够大的质数几乎是 不可能的. 一般来说要得到 100%准确的大质数 ,都 是通过查已经计算好的质数表的方式. 但是质数表 的方式也给 RSA 的安全性带来了隐患 ,因为攻击者 如果得到密钥生成时所使用的质数表 ,攻破 RSA 加 密的难度将会大大降低 ,一般采用自动生成质数. 短 时间内如果要得到一个 100%准确的大质数是很困 难的 ,只能以尽可能高的概率得到一个大质数.
·22·
for ( i = 0; i < np; i + + )
{ unsigned p = p l[ i] ;
unsigned r = start % vlong ( p ) ;
if ( r) r = p - r;
while ( r < SS )
{ b[ r] = 0;
r + = p; }
}
接下来 ,对可能为素数的数 (即标记数组 b [ ] 中值为 1的元素对应的数 )进行素数测试. 数论学 家利用费马小定理研究出了多种素数测试方法 ,本 程序使用一种最简单的方式 ,直接应用费马小定理. 取一个与 p互素的整数 A ,对于大素数 p来说应该 满足 Ap- 1 mod p = 1,但是我们把 p代入一个大整数 , 满足这个关系的数不一定是素数. 这时可以改变 A ,进行多次测试 ,如果多次测试都通过 ,这个数是 素数的概率就比较大. 按这种原理 ,编写素数测试函 数如下 :
1 常规强质数及其获得算法
1. 1 RSA 算法加密过程 RSA 算法是最流行的公钥密码算法 ,是使用长
度可以ห้องสมุดไป่ตู้化的密钥. RSA 是第一个既能用于数据加 密也能用于数字签名的算法.
RSA 算法原理如下 : ①随机选择两个大质数 p和 q, p不等于 q,计算 N = pq; ②选择一个大于 1小于 N 的自然数 e, e必须 与 ( p - 1) ( q - 1) 互素 ; ③用公式计算出 d: d ×e = 1 (mod ( p - 1) ( q - 1) ) ; ④销毁 p和 q. 最终得到的 N 和 e就是“公钥 ”, d就是“私钥 ”, 发送方使用 N 去加密数据 , 接收方只有使用 d才能 解开数据内容. 由算法过程我们也可以知道 ,这里的 大质数是整个算法的关键 ,通常状态下我们使用强
质数来定义和实现该大质数. 1. 2 常规强质数获得算法
所谓强质数 p,满足 : p是个位数足够大的随机 质数 ; p - 1 含有一个大的质数因子 r; p + 1 含有一 个大的质数因子 ; r - 1 含有一个大的质数因子 t. 常规强质数获得算法如下 :
①首先选择两个指定长度的奇数 a, b; ②再在 a 附近产生随机质数 s , 在 b 附近产生随机质数 t; ③再由 t产生质数 r, r = 1 + 2 t,若 r非质数 ,则 r = r + 2 t直到 r是质数 ; ④由 r, s生成 p, p = ( s^( r - 1) - r^( s - 1) ) mod ( r3 s) , 若 p 为偶数 , 则 p = p + r3 s, 否则 p = p + 2 rs直到 p是质数. ⑤高次幂的求 模算法 ( C = (M ^e) mod n ) 步骤如下 :
参考文献 :
[ 1 ] R. R ivest, A. Sham ir, L. Adleman. A Method for Obtaining D igital Signatures and Public - Key Cryp tosystem s[ J ]. Communications of the ACM , 1978, 21 ( 2) : 120 - 126.
相关文档
最新文档