RSA算法课程设计报告Word文档格式.docx
- 文档编号:22513100
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:15
- 大小:53.03KB
RSA算法课程设计报告Word文档格式.docx
《RSA算法课程设计报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《RSA算法课程设计报告Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
产生公钥和密钥
加密与解密
总结错误!
致谢错误!
1课题综述
课题来源
随着电子信息技术的迅速发展,人类已步入信息社会。
但是由于整个社会形成了一个巨大的计算机网络,任何一个计算机网络出现的安全问题,都会影响整个国家的网络安全,所以信息安全、计算机网络安全问题已引起了人类的高度重视。
无论是在局域网还是在广域网中,都存在着自然和人为等诸多因素的脆弱性和潜在威胁。
故此,网络的安全措施应是能全方位地针对各种不同的威胁和脆弱性,这样才能确保网络信息的保密性、完整性和可用性。
现代密码学已成为信息安全技术的核心,密码学是以研究通信安全保密的学科,即研究对传输信息采用何种秘密的变换以防止第三者对信息的窃取。
公钥密码体制的特点是:
接收方B产生一对密钥(PK和
SK);
PK公开,SK保密;
从PK推出SK是很困难的;
A、E双方通信时,A通过任何途径取得E的公钥,用E的公钥加密信息,加密后的信息可通过任何不安全信道发送。
E收到密文信息后,用自己私钥解密恢复出明文。
公钥密码体制已成为确保信息的安全性的关键技术。
RSA公钥密
码体制到目前为止还是一种被认可为安全的体制。
课题意义
RSA公钥加密算法是第一个既能用于数据加密也能用于数字签名的算法。
它易于理解和操作,也十分流行。
算法的名字以发明者的姓氏首字母命名:
RonRivest,AdiShamir和LeonardAdleman。
虽然自1978年提出以来,RSA的安全性一直未能得到理论上的证明,但它经历了各种攻击,
至今未被完全攻破。
随着越来越多的商业应用和标准化工作,RSA已经成
为最具代表性的公钥加密技术。
VISA、MasterCard、IBM、Microsoft等公司协力制定的安全电子交易标准(SecureElectronicTransactions,SET)就采用了标准RSA算法,这使得RSA在我们的生活中几乎无处不在。
网上交易加密连接、网上银行身份验证、各种信用卡使用的数字证书、智能移动电话和存储卡的验证功能芯片等,大多数使用RSA技术。
应用了RSA加
密体制保证了秘密信息的安全。
预期目标
在充分理解RSA加密体制概念和原理的基础上,用MicrosoftVisual
C++实现RSAffl密与解密,演示公钥与密钥的生成及加密与解密的过程。
2系统分析
基础知识
2.1.1素数
称整数p(p>
1)是素数,如果p的因子只有士1,士p。
称c是两个整数a、b的最大公因子,如果
1c是a的因子也是b的因子,即c是a、b的公因子。
2a和b的任一公因子,也是c的因子。
表示为c=gcd(a,b)由于要求最大公因子为正,所以gcd(a,b)=gcd(a,-b)=gcd(-a,b)=gcd(-a,-b)。
一般gcd(a,b)=gcd(|a|,|b|)。
由任一非0整数能整除0,可得gcd(a,0)=|a|。
如果将a,b都表示为素数的乘积,则gcd(a,b)极易确定。
一般由c=gcd(a,b)可得:
对每一素数p,cp=min(ap,bp)。
由于确定大数的素因子不很容易,所以这种方法不能直接用于求两个大数的最大公因子,如何求两个大数的最大公因子在下面介绍。
如果gcd(a,b)=1,则称a和b互素。
2.1.2模运算
设n是一正整数,a是整数,如果用n除a,得商为q,余数为r,则
a二qn+r,0<
r<
n,
其中x为小于或等于x的最大整数。
用amodn表示余数r
如果(amodn)=(bmodn),则称两整数a和b模n同余,记为a三bmodn。
称与a模n同余的数的全体为a的同余类,记为[a],称a为这个同余类的十一.r十表示元素。
2.2.3欧拉函数和欧拉定理
欧拉函数:
设n是一正整数,小于n且与n互素的正整数的个数称为n
的欧拉函数,记为©
(n)
若n是素数,则显然有©
(n)=n-1。
若n是两个素数p和q的乘积,则©
(n)=©
(p)x©
(q)=(p-1)x(q-1)。
欧拉定理:
若a和n互素,贝卩a©
(n)三1modn。
2.1.4欧几里德算法
欧几里得(Euclid)算法是数论中的一个基本技术,是求两个正整数的最大公因子的简化过程。
而推广的Euclid算法不仅可求两个正整数的最大公因子,而且当两个正整数互素时,还可求出其中一个数关于另一个数的乘法逆元。
1.求最大公因子:
Euclid算法是基于下面一个基本结论:
对任意非负整数a和正整数b,有gcd(a,b)=gcd(b,amodb)。
2.求乘法逆元:
如果gcd(a,b)=1,则b在moda下有乘法逆元(不妨设b<
a),即存在一x(x<
a),使得bx三1moda。
2.1.5RSA算法中的计算问题
1.RSA的加密与解密过程
RSA的加密、解密过程都为求一个整数的整数次幕,再取模。
如果按其含义直接计算,则中间结果非常大,有可能超出计算机所允许的整数取值范围。
如上例中解密运算6677mod119,先求6677再取模,则中间结果就已远远超出了计算机允许的整数取值范围。
而用模运算的性质:
(axb)modn二[(amodn)x(bmodn)]modn
就可减小中间结果再者,考虑如何提高加、解密运算中指数运算的有效性。
例如求x16,直接计算的话需做15次乘法。
然而如果重复对每个部分结果做平方运算即求x,x2,x4,x8,x16则只需4次乘法。
2.RSA密钥的产生
产生密钥时,需要考虑两个大素数p、q的选取,以及e的选取和d的计算。
因为n=pq在体制中是公开的,因此为了防止敌手通过穷搜索发现p、q,这两个素数应是在一个足够大的整数集合中选取的大数。
如果选取p和q为10100左右的大素数,那么n的阶为10200,每个明文分组可以含有664位(10200〜2664),即83个8比特字节,这比DES的数据分组(8个8比特字节)大得多,这时就能看出RSA算法的优越性了。
因此如何有效地寻找大素数是第一个需要解决的问题。
寻找大素数时一般是先随机选取一个大的奇数(例如用伪随机数产生器),然后用素性检验算法检验这一奇数是否为素数,如果不是则选取另一大奇数,重复这一过程,直到找到素数为止。
素性检验算法通常都是概率性的,但如果算法被多次重复执行,每次执行时输入不同的参数,算法的检验结果都认为被检验的数是素数,那么
就可以比较有把握地认为被检验的数是素数。
2.1.6公钥密码体制的基本概念
在公钥密码体制以前的整个密码学史中,所有的密码算法,包括原始手工计算的、由机械设备实现的以及由计算机实现的,都是基于代换和置换这两个基本工具。
而公钥密码体制则为密码学的发展提供了新的理论和技术基础,一方面公钥密码算法的基本工具不再是代换和置换,而是数学函数;
另一方面公钥密码算法是以非对称的形式使用两个密钥,两个密钥的使用对保密性、密钥分配、认证等都有着深刻的意义。
可以说公钥密码体制的出现在密码学史上是一个最大的而且是惟一真正的革命。
公钥密码体制的概念是在解决单钥密码体制中最难解决的两个问题时提出的,这两个问题是密钥分配和数字签字。
单钥密码体制在进行密钥分配时(看第5章),要求通信双方或者已经有一个共享的密钥,或者可籍助于一个密钥分配中心。
对第一个要求,常常可用人工方式传送双方最初共享的密钥,这种方法成本很高,而且还完全依赖信使的可靠性。
第二个要求则完全依赖于密钥分配中心的可靠性。
第二个问题数字签字考虑的是如何为数字化的消息或文件提供一种类似于为书面文件手书签字的方法。
1976年和对解决上述两个问题有了突破,从而提出了公钥密码体制。
总体方案
要实现生成公钥和密钥的功能,必须先生成两个大素数。
方法是先设定随机种子为系统当前时间,然后随即生成两个100以内的随机数,并判断其是否为素数,取出这两个素数。
然后通过调用函数生成公钥对和密钥对,
同时显示出结果到屏幕上。
随后可以用公钥对明文进行加密,将加密后的秘闻显示出来。
然后可以演示用密钥对密文进行解密,并将结果显示到屏幕上
功能模块
本系统含有两个功能模块:
(1)公钥和密钥生成模块:
可以生成个100以内的素数p和q,以及n、
e、d;
(2)加密和解密模块:
可以显示加密后的数据,点击解密可显示解密后数据。
系统功能界面图如下:
加密咖皙区
I
[M]
IFdilL
|EdLt
t
■
ICN1H=
百■穆qjiEd.xt.
i
|Edi1_
力口空空址月
|EdiH
!
折称7晞書耳
Eg
Ikdil
Si初生威
Jjtl®
I
世田I
图2-1系统功能界面图
3系统设计
算法描述
RSA算法描述:
(1)密钥的产生
1选两个保密的大素数p和q。
2计算n=pxq,©
(n)=(p-1)(q-1),其中©
(n)是n的欧拉函数值。
3选一整数e,满足1<
e<
©
(n),且gcd(©
(n),e)=1。
4计算d,满足d•e三1mod©
(n),即d是e在模©
(n)下的乘法逆元,
因e与©
(n)互素,由模运算可知,它的乘法逆元一定存在。
5以{e,n}为公开钥,{d,n}为秘密钥。
(2)加密
加密时首先将明文比特串分组,使得每个分组对应的十进制数小于n,即
分组长度小于Iog2n。
然后对每个明文分组m作加密运算:
c=memodn
(3)解密
对密文分组的解密运算为:
cdmodn
下面证明RSA算法中解密过程的正确性。
证明:
由加密过程知c三memodn,所以
cdmodn三medmodn^mlmod©
(n)modn三mk©
(n)+1modn
要获得两个随机的小于100的素数,可以首先将系统当前时间设置为
随机数种子,然后对生成的随机数取100模,然后调用判断素数的函数。
要判断一个属实否为素数,可以判断数n从2到n的开方,是否能整除n。
伪代码如下:
for(i从2到n的开方;
i++)
{
if(n被i整除)
则n不是素数终止循环;
if(i>
n的开方)
返回n为宿舍;
}
求最大公因子的算法:
Euclid算法就是用这种方法,因gcd(a,b)=gcd(|a|,|b|),因此可假定算法的输入是两个正整数,设为d,f,并设f>
d。
Euclid(f,d)
1Xf;
Y—d;
2ifY=0thenreturnX=gcd(f,d);
3R=XmodY;
4X=Y;
5Y=R;
6goto②。
求乘法逆元:
推广的Euclid算法先求出gcd(a,b),当gcd(a,b)=1时,则返回b的逆元。
ExtendedEuclid(f,d)(设f>
d)
①(X1,X2,X3)—(1,0,f);
(Y1,Y2,Y3)
—(0,1,d);
②ifY3=0thenreturnX3=gcd(f,d)
;
noinverse;
③ifY3=1thenreturnY3=gcd(f,d)
Y2=d-1modf;
④Q=X3Y3;
5(T1,T2,T3)—(X1-QY1,X2-QY2,X3-QY3);
6(X1,X2,X3)—(Y1,Y2,Y3);
7(Y1,Y2,Y3)—(T1,T2,T3);
8goto②。
处理明文:
将明文的每个字符提取出来将其装换为数字。
进行加密处理,
将处理后的数字字符用“+”号相连。
其中加密的算法为:
求am可如下进
行,其中a,m是正整数:
将m表示为二进制形式bkbk-1…bO,即
m二bk2k+bk-12k-1+…+b12+b0
因此:
例如:
19=1X24+OX23+OX22+1x21+1X20,所以
a19=((((a1)2aO)2aO)2a1)2a1
从而可得以下快速指数算法:
c=0;
d=1;
Fori=kdownto0d0{
c=2xc;
d=(dxd)modn;
ifbi=1then{
c=c+1;
d=(dxa)modn
returnd.其中d是中间结果,d的终值即为所求结果。
c在这里的作用是表示指数的部分结果,其终值即为指数mc对计算结果无任何贡献,算法中完全可将之去掉。
解密过程:
将“+”连接的数字字符转换为数字并相加,用密钥做与加密相同的算法,即可得出明文。
流程图
图3-1生成公钥和私钥流程图
将明文转换为数
J
图3-2明文加密流程图
取得密文
将密文转换为明
图3-3密文解密流程图
4代码编写
在中声明成员变量:
int
m_p;
m_q;
m_n;
m_code;
m_decode;
CString
m_dtxt;
m_etxt;
m_ptxt;
1.产生公钥和密钥:
密明文:
voidCRSADlg:
:
OnButtonProduce()
OnCode()密密文
OnDecode()他函数:
明文
解密后明倉
加密|解密|逞出I
击加
密,运行效果如下图:
图5-2加密效果图
2•点击解密,运行效果如下图:
图5-3解密效果图
总结
通过这次课程设计,我对RSA加密体制有了更进一步的了解。
遇到的
主要问题是如何将明文按照比特分组并对其实现RSA加密,以及对大素数
的处理。
最终大素数的处理得以实现,但明文分组并没有找到合适的方法,这就要求我在课程设计后去学习怎样为明文分组机密。
要想学好现代密码学不仅要学习好密码学相关知识,还要有很好的数学基础,还有很强的编程能力,这个课程设计是用MicrosoftVisualC++的开发环境写的,这对编程要求很高,不仅要会密码学中RSA的加密机制,算法还要熟知VC++的编程方法,要对微软的MFC勺基本编程方法要熟悉。
课程设计时对学生个人综合能力的检验。
任何知识和技术都不是孤立的。
要学习好密码学要牵扯到线性代数,离散数学,概率统计等数学知识,为了验证加密解密算法的正确性,还要动手编制程序,这就要求学生要对至少一种编程技术有所熟知。
对RSA加密体制还可以运用到手机等终端设备的加密,也可嵌入到其他小型化的设备中去,下一步我们讲进一步对这些方向进行研究。
致谢
感谢老师给了这次机会给我们做这次课程设计,让我们能够把平时所学的东西用上,不至于让我们觉得平时学的东西没什么用,在这短短的时间里完成了本次课程设计,要感谢朋友们的帮忙,在我困惑的时候要不是你们,我可能早就放弃了,因为你们的帮忙,我才能顺利的完成这次系统其实最辛苦的还是老师,请允许我向你们说声谢谢,感谢你们对我们的教诲。
在这次课程设计的过程中,我觉得我真的是获得了很多的东西,不仅仅是动手能力及编程能力得到了很大的提高,也不仅仅是在修改程序错误方面,主要是在程序编写过程中获得了大量的宝贵的经验。
此外,在这次实践过程中发现数据库是一门十分实用的课程,也体会到学好数据库对我们以后的学习,工作是十分重要的。
因而在此,我要感谢那些在实践过程中给过我帮助和鼓励的人。
最后对所有在课程设计中帮助过我的老师和同学说一声谢谢。
参考文献
1杨波.现代密码学.第2版.北京:
清华大学出版社,2008
2谷利泽,郑世慧,杨义先.现代密码学教程.北京:
北京邮电大学出版社,2009
3丁存生,肖国镇.流密码学及其应用.北京:
国防工业出版社,1994
4冯登国,吴文玲.分组密码的设计与分析.北京:
清华大学出版社,2000
5张焕国.计算机安全保密技术.北京:
机械工业出版社,1995
6朱文余,孙琦.计算机密码应用基础.北京:
科学出版社,2000
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RSA 算法 课程设计 报告