公钥密码体制(RSA)算法及安全性
- 格式:pdf
- 大小:146.78 KB
- 文档页数:5
RSA是一种公钥密码体制,它是由三位计算机科学家(Ron Rivest、Adi Shamir和Leonard Adleman)于1977年提出的,也因此得名。
RSA算法基于两个大素数的乘积,利用了素数分解问题的难解性来保证其安全性。
RSA密钥密码体制包含以下几个关键要素:
1. 公钥(Public Key):公钥用于加密数据,可以公开传输给其他人使用。
公钥由两个部分组成,包括一个大素数对和一个公开的指数。
2. 私钥(Private Key):私钥用于解密数据,只能由密钥的持有者保管和使用。
私钥由两个部分组成,即与公钥中的素数对相对应的素数和一个私密的指数。
3. 加密(Encryption):使用公钥对数据进行加密的过程,只有对应的私钥才能解密。
4. 解密(Decryption):使用私钥对密文进行解密的过程,从而恢复原始数据。
RSA密钥密码体制的基本原理是,利用公钥加密的数据只能由私钥解密,而私钥只有密钥的持有者拥有,其他人无法直接获得私钥。
这个
非对称的加密方式在安全通信和数字签名等领域得到了广泛应用。
需要注意的是,RSA密钥密码体制的安全性是基于大素数分解问题的难解性,即通过已知的公钥无法有效地计算出对应的私钥。
随着计算机算力的提升,加密算法的研究也在不断发展,因此在实际应用中需要密钥的合适长度以确保安全性。
总的来说,RSA密钥密码体制以公钥和私钥的配对为基础,利用了数学上的难解问题来实现数据的加密和解密,为信息安全提供了一种重要的加密技术和框架。
密码基础知识(2)以RSA为例说明加密、解密、签名、验签⼀、RSA加密简介 RSA加密是⼀种⾮对称加密。
是由⼀对密钥来进⾏加解密的过程,分别称为公钥和私钥。
具体查看⼆,公钥加密算法和签名算法我们从公钥加密算法和签名算法的定义出发,⽤⽐较规范的语⾔来描述这⼀算法,以RSA为例。
2.1,RSA公钥加密体制RSA公钥加密体质包含如下3个算法:KeyGen(密钥⽣成算法),Encrypt(加密算法)以及Decrypt(解密算法)。
1)密钥⽣成算法以安全常数作为输⼊,输出⼀个公钥PK,和⼀个私钥SK。
安全常数⽤于确定这个加密算法的安全性有多⾼,⼀般以加密算法使⽤的质数p的⼤⼩有关。
越⼤,质数p⼀般越⼤,保证体制有更⾼的安全性。
在RSA中,密钥⽣成算法如下:算法⾸先随机产⽣两个不同⼤质数p和q,计算N=pq。
随后,算法计算欧拉函数接下来,算法随机选择⼀个⼩于的整数e,并计算e关于的模反元素d。
最后,公钥为PK=(N, e),私钥为SK=(N, d)。
2)加密算法以公钥PK和待加密的消息M作为输⼊,输出密⽂CT。
在RSA中,加密算法如下:算法直接输出密⽂为3)解密算法以私钥SK和密⽂CT作为输⼊,输出消息M。
在RSA中,解密算法如下:算法直接输出明⽂为。
由于e和d在下互逆,因此我们有: 所以,从算法描述中我们也可以看出:公钥⽤于对数据进⾏加密,私钥⽤于对数据进⾏解密。
当然了,这个也可以很直观的理解:公钥就是公开的密钥,其公开了⼤家才能⽤它来加密数据。
私钥是私有的密钥,谁有这个密钥才能够解密密⽂。
否则⼤家都能看到私钥,就都能解密,那不就乱套了。
2.2,RSA签名体制签名体制同样包含3个算法:KeyGen(密钥⽣成算法),Sign(签名算法),Verify(验证算法)。
1)密钥⽣成算法同样以安全常数作为输⼊,输出⼀个公钥PK和⼀个私钥SK。
在RSA签名中,密钥⽣成算法与加密算法完全相同。
2)签名算法以私钥SK和待签名的消息M作为输⼊,输出签名。
公钥密码系统及RSA公钥算法摘要:本文简单介绍了公开密钥密码系统的思想和特点,并具体介绍了RSA算法的理论基础,工作原理和具体实现过程,并通过一个简单例子说明了该算法是如何实现。
在本文的最后,概括说明了RSA算法目前存在的一些缺点和解决方法。
关键词:公钥密码体制,公钥,私钥, RSA中图分类号:TP309.7§1引言随着计算机联网的逐步实现,Internet前景越来越美好,全球经济发展正在进入信息经济时代,知识经济初见端倪。
计算机信息的保密问题显得越来越重要,无论是个人信息通信还是电子商务发展,都迫切需要保证Internet网上信息传输的安全,需要保证信息安全。
信息安全技术是一门综合学科,它涉及信息论、计算机科学和密码学等多方面知识,它的主要任务是研究计算机系统和通信网络内信息的保护方法以实现系统内信息的安全、保密、真实和完整。
其中,信息安全的核心是密码技术。
密码技术是集数学、计算机科学、电子与通信等诸多学科于一身的交叉学科。
它不仅能够保证机密性信息的加密,而且能够实现数字签名、身份验证、系统安全等功能。
是现代化发展的重要科学之一。
本文将对公钥密码系统及该系统中目前最广泛流行的RSA 算法做一些简单介绍。
§2公钥密码系统要说明公钥密码系统,首先来了解一下不同的加密算法:目前的加密算法按密钥方式可分为单钥密码算法和公钥密码算法。
2.1. 单钥密码又称对称式密码,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码)。
因此,通信双方都必须获得这把钥匙,并保持钥匙的秘密。
单钥密码系统的安全性依赖于以下两个因素:第一,加密算法必须是足够强的,仅仅基于密文本身去解密信息在实践上是不可能的;第二,加密方法的安全性依赖于密钥的秘密性,而不是算法的秘密性,因此,我们没有必要确保算法的秘密性(事实上,现实中使用的很多单钥密码系统的算法都是公开的),但是我们一定要保证密钥的秘密性。
[公钥密码体制总结及展望] 公钥加密体制摘要:计算机网络的发展突飞猛进,与此同时产生了公钥密码体制,本文重点介绍了当前公钥密码体制的几种常见的算法以及公钥密码体制的未来发展趋势。
关键词公钥密码体制RSADSAECDSASHA-1数字签名身份认证 1引言公开密钥密码体制的概念是1976年由美国密码学专家狄匪(Diffie)和赫尔曼(Hellman)[1]提出的,有两个重要的原则:第一,要求在加密算法和公钥都公开的前提下,其加密的密文必须是安全的;第二,要求所有加密的人和掌握私人秘密密钥的解密人,他们的计算或处理都应比较简单,但对其他不掌握秘密密钥的人,破译应是极困难的。
随着计算机网络的发展,信息保密性要求的日益提高,公钥密码算法体现出了对称密钥加密算法不可替代的优越性。
近年来,公钥密码加密体制和PKI、数字签名、电子商务等技术相结合,保证网上数据传输的机密性、完整性、有效性、不可否认性,在网络安全及信息安全方面发挥了巨大的作用。
本文详细介绍了公钥密码体制常用的算法及其所支持的服务。
2公钥密码算法公钥密码算法中的密钥依性质划分,可分为公钥和私钥两种。
用户或系统产生一对密钥,将其中的一个公开,称为公钥;另一个自己保留,称为私钥。
任何获悉用户公钥的人都可用用户的公钥对信息进行加密与用户实现安全信息交互。
由于公钥与私钥之间存在的依存关系,只有用户本身才能解密该信息,任何未受授权用户甚至信息的发送者都无法将此信息解密。
在近代公钥密码系统的研究中,其安全性都是基于难解的可计算问题的。
如:(1)大数分解问题;(2)计算有限域的离散对数问题;(3)平方剩余问题;(4)椭圆曲线的对数问题等。
基于这些问题,于是就有了各种公钥密码体制。
关于公钥密码有众多的研究,主要集中在以下的几个方面:(1)RSA公钥体制的研究;(2)椭圆曲线密码体制的研究;(3)各种公钥密码体制的研究;(4)数字签名研究。
公钥加密体制具有以下优点:(1)密钥分配简单;(2)密钥的保存量少;(3)可以满足互不相识的人之间进行私人谈话时的保密性要求;(4)可以完成数字签名和数字鉴别。
公钥密码体制(RSA)算法及安全性探析□宣克祥【摘要】作为现代经典加密技术,无论是数据加密标准(DES)还是高级加密标准(AES),都是一种私钥密码体制,其安全性是由其密钥的私密性来保证的;而RSA则是一种公钥密码体制,不仅加密算法本身可以公开,甚至加密用的密钥也可以公开。
本文对公钥密码体制RSA算法原理、具体实现过程及安全性进行深入探讨和分析。
【关键词】RSA算法;加密标准;信息安全【作者单位】宣克祥,解放军国际关系学院1976年,美国斯坦福大学的威特菲尔德·笛福(Whit-field Diffie)和马丁·赫尔曼(Martin Hellman)在题为《密码学的新方向》的论文中提出了一种崭新的思想,不仅加密算法本身可以公开,甚至加密用的密钥也可以公开,这种密码体制被称作非对称式公钥密码体制。
1978年,美国麻省理工学院的隆·里维斯特(Ronald L.Rivest)、阿迪·沙米尔(Adi Shamir)和雷奥纳德·阿德曼(Leonard M.Adleman)提出了迄今为止理论上最成熟、最成功的RSA公钥密码体制,它变革了已使用几千年的对称密钥技术。
在公开密钥加密技术中,加密密钥与解密密钥是不一样的。
如果要向对方发送消息,可以先用对方的公开密钥加密要发送的消息;对方收到消息后,可用自己的私钥解密。
加密密钥是公开的,谁都可以找到,然而,以其加密的消息却必须用接收者保留的私钥才能解密,因而别人无法阅读该消息。
一、RSA算法简介RSA公钥密码体制的安全性是基于数论中的大整数因子分解:两个大质数p和q相乘得到乘积n,在min(p,q)与(p-1)(q-1)之间选取另一个数d,该数与(p-1)(q-1)互质,即两者之间没有公因子,然后用如下公式计算出e:ed mod(p-1)(q-1)=1假如明文块用M表示,密文块用C表示,那么RSA的加密过程为:Me mod n=CRSA的解密过程即为:C d mod n=M假如选定了两个小的质数11和23,那么n=11ˑ23= 253。
接着,在11与220(10ˑ22)之间选取一个与220互质的数d,假设是19,则由19e mod220=1计算出e=139。
根据RSA公钥密码体制,n(253)和e(139)是公开的,而p (11)、q(23)和d(19)是保密的。
在ASCII码中,对于消息“Hi”,用16位二进制数表示为0100100001011001,将它置换为十进制数为72和105。
甲加密过程为:72139mod253=2105139mod253=101乙得到密文2和101后,用密钥d(19)解密:219mod253=7210119mod253=105由于e和n是公钥,可以公开,所以任何人都可以生成密文;但是d是密钥,与p、q一起都要保密。
要想找出d,必须知道p和q,也就是要将n进行因子分解。
但是,如果n很大,分解是十分困难的,现今所有的算法不可能在有效的时间里实现。
这样,情报的安全性就得到了保障。
二、RSA算法公钥和私钥的生成RSA算法实际上是对质数(prime)特性的一种利用。
所谓质数即这样的一种正整数,除了1和其自身外,不存在其它约数(非质数整数被称为合数)。
任何正整数都可能有多种形式被分解为若干整数的乘积,但只具有一种质因数分解形式。
数学家很早就发现了质数的这种特性,但没有加以应用。
RSA算法所使用的公钥必须能够分解成两个质数之乘积。
在目前条件下,分解一个较小的数字如6185371,数秒之-1与3-2,4-1与4-2。
在不同图组的显示图标中,每个热区域对应的显示图标应不同。
4.总分统计。
(1)擦除前图:添加计算图标,录入函数eraseall并添加显示图标,输入“您的总分为”;(2)录入函数“正确{x},错误{y},总分{z}”,完成整个游戏如图4所示。
三、结语利用“开发游戏”为手段进行authorware的教学,不但能够提高学生的学习兴趣,锻炼学生的动手能力,还对全部已学内容进行全面的复习与应用,使得学生记忆深刻,并收到不错的教学效果。
【参考文献】1.冯建平符策群等.中文authorware多媒体制作教程[M].北京:人民邮电出版社,20062.高新考试编委会.authorware6.5职业考试培训教程[M].北京:北京希望电子出版社,2004内就可以完成(6185371=1867ˑ3313);但是,如果这个整数很大,例如有50位的一个数,要把它分解成两个质数相乘的结果,所需要的时间就很长,运算方法也较复杂。
由于数字很大,在设计程序软件时,相关变量最好定义为长整型数据,如_int64类型;否则,当程序运行时,数字会增加很快,当变量取值超过其范围时,就会产生越界错误,出现不正确的结果。
在分析研究RSA 算法的时候,我们一般先选择两个质数p 和q ,从p 和q 计算出互质数d ,这三个数就是私钥;再由私钥推算出公钥n 和e 。
这里以产生质数p 为例,质数q 的产生过程与p 是一样的。
质数p 与质数q 必须不同,如果是相同的数,加密和解密就会产生错误。
//产生质数pvoid CRSADlg ::OnChoosenum1(){//TODO :Add your control notification handler code here _int64m ,j ,flag ,i ;char cBuffer [N ];//取edit3中的数作为初始数p m_edit3.GetWindowText (cstredit3,10);p =_atoi64(cstredit3);i =p ;//清空列表框m_listbox1.ResetContent ();//在从p 至p +50的范围里寻找质数for (;i <p +50;i ++){flag =1;m =(int )sqrt ((double )i );for (j =2;j <=m ;j ++){if (i%j ==0){flag =0;break ;}}//若i 为质数则写入列表框并显示在edit3中if (flag ==1){_i64toa (i ,cBuffer ,10);m_listbox1.AddString ((LPCTSTR )cBuffer );m_edit3.SetWindowText ((LPCTSTR )cBuffer );UpdateData (FALSE );}}}在两个质数p 和q 中取较小的一个,然后计算出(p -1)ˑ(q -1),互质数就是在此之间的一个数,它与(p -1)ˑ(q -1)没有公约数。
//产生互质数dvoid CRSADlg ::OnChoosenum3(){//TODO :Add your control notification handler code here _int64num3,num4,max ,flag ,temp ,i ;char cBuffer [N ];m_edit3.GetWindowText (cstredit3,10);m_edit4.GetWindowText (cstredit4,10);num3=_atoi64(cstredit3);num4=_atoi64(cstredit4);max =(num3-1)*(num4-1);if (num3<num4)temp =num3+1;elsetemp =num4+1;//初始d 从num3和num4两个质数中取较小者加1d =temp ;//清空列表框m_listbox3.ResetContent ();//在num3或num4加1--(num3-1)*(num4-1)的范围里//寻找与(num3-1)*(num4-1)互质的数//d 以前50个可能的数为限for (d =temp ;d <max &&d <temp +50;d ++){flag =1;for (i =2;i <d ;i ++){if (d%i ==0&&max%i ==0){flag =0;break ;}}//若为互质数,则加入列表框并显示于edit5中if (flag ==1){_i64toa (d ,cBuffer ,10);m_listbox3.AddString (LPCTSTR (cBuffer ));m_edit5.SetWindowText ((LPCTSTR )cBuffer );UpdateData (FALSE );}}}在知道了私钥p 、q 、d 之后,我们就可以计算出公钥n 和e 了。
在例子中,p 、q 、d 、n 和e 都设置成了全局变量,其值求出以后,在加密和解密函数中即能使用。
//推算公钥n 和evoid CRSADlg ::OnChoosenum5(){//TODO :Add your control notification handler code here char eBuf [N ];_int64m ;//取编辑框中的字符串m_edit3.GetWindowText (cstredit3,10);m_edit4.GetWindowText (cstredit4,10);m_edit5.GetWindowText (cstredit5,10);//转换为数字p =_atoi64(cstredit3);q =_atoi64(cstredit4);d =_atoi64(cstredit5);//计算出m 和n m =(p -1)*(q -1);n =p*q ;//计算出efor (e =1;e <m ;e ++){if (e*d%m ==1)break ;e ++;}//将n 和e 转换为字符串并显示于edit7和edit8_i64toa (n ,eBuf ,10);m_edit7.SetWindowText ((LPCTSTR )eBuf );_i64toa (e ,eBuf ,10);m_edit8.SetWindowText ((LPCTSTR )eBuf );UpdateData (FALSE );}选取并分解公钥是一个时间较长的过程,选取的公钥越大,分解所需要的时间越多。
因此,在这里特意设计了一个选取和分解公钥的过程。
先假设给定一个公钥nn ,由此产生两个数pp 和qq ;若公钥nn 等于pp ˑqq ,那么再测试pp 和qq 是不是质数;若同时都为质数,则nn 可作为我们要寻找的公钥。
测试一个数是否是质数的函数是_int64prime (_int64n )函数,若n 为质数,该函数的返回值为1,否则为0。
//选取并分解公钥nvoid CRSADlg ::OnChoosenum4(){//TODO :Add your control notification handler code here char eBuf [N ];char cBuffer [N ];_int64nn ,pp ,qq ;int flag =0;//先从edit7中的数开始m_edit7.GetWindowText (cstredit7,10);nn =_atoi64(cstredit7);//清空列表框m_listbox4.ResetContent ();flag =0;//每次寻找10个公钥while (flag <10){//质数pp 先取最小的质数3//并在3--nn /3的范围里++循环for (pp =3;pp <nn /3;pp ++){//质数qq 先取nn /pp//并在nn /pp --3的范围里--循环for (qq =nn /pp ;qq >2;qq --){//若nn 等于两个数的乘积if (nn ==pp*qq ){//判断这两个数是否都是质数,若是则//形成nn ==pp*qq 字符串并加入列表框//置n =nn ,并标明已找到1个质数if (prime (pp )&&prime (qq )){_i64toa (nn ,eBuf ,10);strcpy (cBuffer ,eBuf );strcat (cBuffer ,"=");_i64toa (pp ,eBuf ,10);strcat (cBuffer ,eBuf );strcat (cBuffer ,"*");_i64toa (qq ,eBuf ,10);strcat (cBuffer ,eBuf );m_listbox4.AddString ((LPCTSTR )cBuffer );n =nn ;UpdateData (FALSE );flag ++;}}}}//不管此轮找到质数与否,nn 均增加1nn ++;}//将最后找到的质数显示于edit7_i64toa (n ,eBuf ,10);m_edit7.SetWindowText ((LPCTSTR )eBuf );UpdateData (FALSE );}公钥和私钥的处理应注意以下几点:(一)RSA 算法所使用的公钥一般都很大,其安全性是因公钥很大而分解困难达成的。