一种公开密钥RSA算法的实现

来源 :安徽理工大学学报·自然科学版 | 被引量 : 0次 | 上传用户:goodcareer
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  (安徽理工大学计算机科学与工程学院,安徽淮南232001)
  
  摘要: 主要针对公开密钥RSA算法在面向对象编程方法Visual C++ 6.0下的实现,系统地给 出了类的定义、核心函数的实现流程和使用的主要计算机算法。使算法实现较传统的实现 方法代码更容易重用、数据有更好的封装性和安全性、实现流程更清晰。通过算法的选取 和优化,获得了较传统实现方法更好的系统性能。
  关键词:公钥;私钥;RSA;面向对象编程方法
  中图分类号:TP301.6文献标识码:A[WT]文章编号:16721098(2008)02007003
  
  The Realization of RSA Algorithm for Public Encryption Key
  SHI Yingying,LI Tao
   (School of Computer Science and Engineering,Anhui University of Science and Tec hnology,Huainan Anhui 232001,China) Abstract: In the paper the realization of RSA algorithm for public encryption ke y based onVisual C++ 6.0 was presented. Class definition, flow charts of kerne l functions and the computer algorithm were given. Realization of RSA in OOP mak es the code easier to be reused, dataencapsulation better and safer, and flowcharts clearer than the previous realization methods. By optimized algorithm bet ter system performance than the previous realization methods was obtained.
  Key words:public encryption key; private key; RSA; object oriented programming
  
  随着计算机的普及和网络的飞速发展,数据的安全性问题显得日益重要,数据的破坏和泄密 会造成重大损失。数据加密算法可以很好地保护数据。加密算法可以分为两大类,对称加密 算法和公开密钥算法。公开密钥算法主要被用来解决网上密钥的交换问题和身份认证、数字 签名。
  公开密钥算法的概念是密码学发展史上具有里程碑意义的一件大事[1],与传统对 称密码体制(即加、解密密码相同)相同,公钥系统使用两个密钥:加密密码可以 公开,称为公钥;解密密钥保密为私钥。产生公钥体制的内在动力有两个:第一传统对称体 制下密码的分配问题;第二信息的数字签证问题,即如何为数字化的消息或文件提供一种类 似于为书面文件手写签证的方法。
  RSA算法已经经受了多年深入的密码分析,虽然密码分析者目前既不能证明其安 全性 但也不能否定其安全性,这恰恰说明该算法有很高的实用可信度。本文主要讨论RSA算 法在面向对象编程方法下的具体计算机算法实现。
  1RSA算法的基本原理简介
  在公钥系统观点之后,文献[2]提出了第一个比较完善的公钥密码算法,这就是著名的RSA 算法。RSA算法描述
  (1)选取两个大素数,pq;
  (2)计算,n=pq,φ(n)=(p-1)(q-1);
  (3)随机选择d∶1<d<φ(n),((d,φ(n))=1;
  (4)计算e∶ed≡1(mod φ(n));
  (5)加密运算对任意明文m∈zn={0,1,…,n-1},加密后的密文为c,这里c= memod n;
  (6)解密对密文c∈zn,明文m=cdmod n。
  在上面六个步骤中,n,e公开,n称为模数,e称为加密指数即公钥;p,q,φ(n),d保密 ,φ(n)为Euler函数,d称为解密指数,即私钥。解密的正确性证明[3]93略 。
  2RSA算法的安全性分析
  公钥体制的安全性是指计算上的安全性。RSA算法的安全性建立在大数的因数分解是困难的 这一现实之上,窃听者要解密密文c,除了穷举攻击外,只能是像合法用户一样拥有d,而 求d应先求φ(n),而求φ(n)应先求p和q,而求p和q就要分解n,因此破解RSA算法相当于 做大数的因数分解。
  3RSA算法的实现细节
  结合上面1中的六个步骤,下面讨论RSA的实现过程中应考虑的细节问题。
  3.1大素数和的选择
  (1) p和q多大合适从安全性角度考虑,选择多大的素数,取决于因数分解的能力。目 前已经能够分解130位的十进制数,所以用户应当选择p,q数为100位的十进制数,这样 n将达到200位,从而使现有的分解攻击失效。
  (2) 大素数的生成目前生成大素数的方法都是概率型的合数检测算法,其原理是 :对生成的随机数进行合数测试,若该数通过测试,说明其为合数,否则该数可能为素数, 当进行多次测试后,该数均未通过测试,那么这个数为素数的概率将非常大。
  既然是概率算法,就有可能有把一个合数当作一个素数用于RSA系统,此时所关心的问题 是:解密可否进行及系统的安全性会否降低[4]。因此,应该首选不受影响系统的 素数生成算法,如可选用SolovayStrassen算法、MillerRabin算法。
  (3) |p-q|要适当大因为[SX(](p+q)2[]4[SX)]-n=[SX(](p-q)2[]4[SX)] ,如果|p-q|较小,则[SX(](p-q)2[]4[SX)]也较小,因此[SX(](p+q)2[]4[SX)] 稍大于n,也即[SX(]p+q[]2[SX)]稍大于[KF(]n[KF)],可得如下分解n的步骤:① 顺 序检查大于[KF(]n[KF)]的每一个整数x,使得x2-n为某一整数y的完全平方,即 x2-n=y2;② 由x2-n=y2可得n的分解形式n=(x+y)(x-y),一般而言,p和q的二进制表示应当相差几个比特。
  (4) p-1和q-1都应当有大的素因子这一选择要求是针对RSA的模数n的Pollardp -1因子分解攻击和循环加密攻击。一般的解决方法是:先生成大素数p1,q1,然后 令p=2p1+1,q=2q1+1,这样生成的p,q均为素数且p-1和q-1都有大的素因子。
  (5) (p-1,q-1)应较小假若(p-1,q-1)较大,从而p-1和q-1的最小公倍数,记做u,将会较小;另外满足:ed≡ 1(mod φ(n))的d一定满足ed≡1(mod u),所以在u较小的情况下可以穷举方法找到d 。
  3.2d,e的选择
  d不能太小,以免穷举攻击。研究结果表明:一般e<n,d<[KF(S]4[]n[KF)]时,d是较 容易确定的,这也是实现RSA系统时应先选择d的原因,选择完d后,可以用扩展的欧几里 德算法计算出e,其依据是[5]:若(d,φ(n))=1,则存在整数s,t使得sd+tφ(n)=1 成立。d,e的选择要在安全性和系统性的有效性之间做出折中。
  3.3模指数运算
  在加、解密过程中要考虑形如:xr(mod n)的模指数运算,为提高运算速度和 节约存储空间,一般采用如下快速算法[3]124
  (1) a←x,b←r,c←1;
  (2) 如果b=0则输出c,结束;
  (3) 若b(mod2)≠0,则转(5);
  (4) b←[SX(]b[]2[SX)],a←(a•a)(mod n)转(3);
  ⑤ b←[SX(]b[]1[SX)],c←(c•a)(mod n)转(2)。
  3.4不同用户应当使用不同的模数
  这样要求的原因是存在着对RSA的如下攻击方法:设两个用户共用一个模数n,公钥分别为 e1,e2,且(e1,e2)=1,用RSA为他们加密同一消息m,则密文分别为c1=me1(mod n),c2=me2(mod n);窃听者截获密文c1,c2后,可 以 如下恢复出m:① 用扩展的欧几里德算法求出,满足re1+se2=1的两个整数r,s(不妨设r<0 以及c在(mod n)下的逆元c-11;② 计算(c-11)-rc s2(mod n)就可得到明文m。
  当用户的私钥d泄露后,不仅要更换d,而且要更换模数n。这是因为:如果某人获得了 一个求d的算法A,则可构造一个以A为子程序的算法[6] 来分解n,因此在泄露私钥d后仅仅简单的更换d而保留原来的n是不安全的。
  4主要成员函数实现流程及其算法
  求最大公约数可以使用欧几里德算法,它是幸存到现在的最古老的非凡算法,至今还是可用 的。下面给出算法的Visual C++语言描述:
  int god(int x,int y){
  int g;
  判断取相反数;
  if(x+y==0)
  ERROR;
  g=y;
  while(x>0){
  取模;}return g;}
  这个算法可以推广成返回由m个数组成的god数组。
  求模逆元问题等价于寻找一个x使得: (A•x)mod n=1,x就是A模n 的逆元。可用来求模逆 元的算法很多,使用扩展的欧几里德算法求模逆元。下面给出算法的Visual C++语言描述:
  main(int arg c,char **arg v){
  int a,b,god;
  if(arg c<3){判断输出;
  }int u=atoi(atg v[1]);int v=atoi(arg v[2]);
  判断输出;}ExtBinEuclid(&u,&v,&a,&b,&god);
  cout<<a<<"*"<<u<<"+(-"<<b<<")*<<v<<"="<<god<  if(god==1)
  输出结果;
  return 0;
  }此算法通过迭代运算来实现的,对于大的整数,其运行可能较慢。Knuth指出这个算法完成 的除法的平均数目是[7]0.843×log2 n+1.47。
  5总结
  面向对象的概念早在上个世纪60年代就已经被提出了,发展至今已经相当成熟。面向对象编 程方法提出了类的封装概念、代码重用的继承性和对象一致操作的多态性。这些特性使在实 现RSA算法时,可以更好地对敏感数据进行封装、代码得到重用、获得更清晰的程序流程。 从而使算法实现更加安全、更短的开发周期、更好的系统可展性。多态性可以对算法对象进 行一致性操作,使代码更规范、一致。
  一个密码系统的设计不仅要有好的算法,实现过程中的细节同样不可忽视。此外,在具体的 应用时还应当考虑到协议的设计细节,因为敌手除了攻击算法外,还可能攻击协议。密码学 是一个不断发展的学科,多年来加密算法设计者和密码分析家在不停地努力,促进密码科学 的进步。一个好的密码学算法可以经得起多年的密码分析,但如果没有一个好的实现方法, 其安全性也是无从谈起的。好的实现方法可以使用户得到近似密码算法理论上的安全性和更 高效的性能。
  
  参考文献:
  [1]周玉洁,冯登国.公开密钥算法及其快速实现[M].北京:国防工业出版社 ,2002:78.
  [2]R L RIVEST,A SHAMIR,L ADLEMAN.A Mehod for Obtaining DigitalSignatures and Publickey Cryptosystem[J].CommACM,1978,21(2):120126.
  [3]陈鲁生, 沈世镒. 现代密码学[M].北京:科学出版社,2002:5772.
  [4]ARTO SALOMAA.公钥密码学[M]. 吴世忠,译.北京: 国防工业出版社,1998:7096.
  [5]闵嗣鹤, 严士健. 初等数论[M].第2版.北京:高等教育出版社,1988 :3642.
  [6]冯登国, 林东岱, 吴文玲. 密码学导引[M].北京:科学出版社,1999:23 55.
  [7]BRUCE SCHNEIER(美),应用密码学[M].吴世忠,译.北京:机械工业出 版社,2006:102118.
  (责任编辑:李丽)
其他文献
摘 要:以感病马铃薯、番茄、烟草幼苗为材料,采用茎叶喷雾的方法进行试验,对比了13%氯吲哚酰肼·氨基寡糖素SC和0.5%氨基寡糖素AS防治病毒病的效果。结果表明,13%氯吲哚酰肼·氨基寡糖素SC对马铃薯病毒病及番茄黄化曲叶病毒病、烟草花叶病毒病均具有较好的防治效果。在发病初期,茎叶喷雾3次,每次间隔7d,能够较好地抑制病毒病的危害。  关键词:氯吲哚酰肼;病毒病;防治效果  中图分类号 S436
期刊
摘 要:该文主要概述了近年来土壤重金属元素分析的前处理技术研究进展,包括酸熔法(湿法消解、高压密封消解、微波消解)和碱熔法,并对各种方法的优缺点进行了总结和归纳,最后对前处理方法的发展方向进行了展望。  关键词:土壤;重金属;前处理  中图分类号 X53 文献标识码 A 文章编号 1007-7731(2017)18-0054-02  1 引言  近年来,随着工业化和城市化的快速发展,土壤污染特别是
期刊
摘 要:该文介绍了川百芷的生长习性,提出了其丰产栽培技术,主要包括:选地整地、播种、田间管理等。  关键词:川白芷;生长习性;栽培技术  中图分类号 S567 文献标识码 A 文章编号 1007-7731(2017)18-0082-02  川白芷是伞形科白芷[Angelica dahurica(Fisch.ex Hoffm.)Benth.et Hook.f.var.formosana(Boiss)
期刊
(安徽理工大学计算机科学与技术学院,安徽淮南232001)   摘要: 在RSA、DiffieHellman密码系统的算法中都要用到大整数乘法算术。介绍了Knu th经典乘法、Karatsuba乘法以及它们的计算时间复杂性,在此基础上提出了一个新的大整 数乘法技巧,并且在理论上和实践上被证明是有效的。实验结果也显示改进的大整数乘法算 法在实现大整数乘法运算时具有更高的效率。  关键词:Knuth乘
期刊
摘 要:2016年安徽省审定了绿雨7号、烟宏2000、安农大1216、阜麦9号、徽研22、华成麦1688、皖垦麦1221、山农102、徽研77、濉1216、乐麦207、皖麦203、安1243、亿麦11,共14个半冬性小麦新品种。通过对这14个审定品种在区域试验中的表现,该文从产量、品质、抗病性和特征特性等方面综合评价与分析。  关键词:半冬性小麦;产量;品质;抗病性  中图分类号 S512.1 文
期刊
摘 要:该研究以新鲜马铃薯为原料,通过单因素试验和正交试验确定马铃薯饮料的配方。结果表明:马铃薯饮料的最佳配方为:马铃薯原汁250mL/L,柠檬酸1.5g/L,白砂糖50g/L,蜂蜜6g/L,在该配方下饮料的酸度适宜,甜度可口,口感良好,组织状态均匀,感官评分最高。  关键词:马铃薯;配方;饮料  中图分类号 TS275 文献标识码 A 文章编号 1007-7731(2017)18-0090-03
期刊
摘 要:该研究借助信息技术手段,构建了一套环保信息、技术交换平台,包括2个数据库、2个功能模块和3种使用者角色,可以高效便捷地将产废企业和环保企业的供求信息组织起来,集中展示,便于双方快捷地获取所需要的信息,提高行业间信息交流的效率,促进区域环保行业的快速发展。  关键词:环保信息技术;交换平台;构建;南京市  中图分类号 X322 文献标识码 A 文章编号 1007-7731(2017)18-0
期刊
摘 要:景观水体是庭院中的重要组成元素,水体与植物的搭配,水系的方位布局,是整个庭院规划的点睛之处。该文介绍了景观水池的规划设计,应以自然生态学为原理,将水体自净化技术与植物、景观相结合,合理利用地形、水体、空间的层次变化,营造具有自净化、生态化的庭院水体景观。模拟人工湿地的修复原理,利用物理和生物修复技术实现水体的净化,并结合假山、喷泉、跌水和提升装置等元素,实现水体的循环流动。  关键词:景观
期刊
摘 要:杨柳实验站建设36年来,历经创建、快速发展、调整、探索运作和自我发展5个阶段。该文重点阐述了2012年秋转制以来,完善科研生产条件、搭建协同创新平台、深化试验研究、逐步走上自我发展之路,并对未来打造开放型研发平台、协同创新、再铸辉煌进行了展望。  关键词:野外实验站;转换机制;协同创新;发展模式  中图分类号 F324.3 文献标识码 A 文章编号 1007-7731(2017)18-00
期刊
摘 要:該研究利用MODIS与Landsat TM/OLI多源遥感资料获取的艾比湖地表温度和植被指数信息,进行陆面水热平衡过程研究,结合空间三角形法,根据水热平衡原理反演温度植被蒸散指数(TVETI),并选用MODIS蒸散发产品数据对反演结果进行线性回归分析与精度验证,结果表明:MODIS-TVETI与Landsat-TVETI都可以有效地反演陆面蒸散发;其中MODIS-TVETI最高相关性达到0
期刊