RSA加密算法及实现.docx

上传人:b****0 文档编号:9818610 上传时间:2023-05-21 格式:DOCX 页数:15 大小:63.34KB
下载 相关 举报
RSA加密算法及实现.docx_第1页
第1页 / 共15页
RSA加密算法及实现.docx_第2页
第2页 / 共15页
RSA加密算法及实现.docx_第3页
第3页 / 共15页
RSA加密算法及实现.docx_第4页
第4页 / 共15页
RSA加密算法及实现.docx_第5页
第5页 / 共15页
RSA加密算法及实现.docx_第6页
第6页 / 共15页
RSA加密算法及实现.docx_第7页
第7页 / 共15页
RSA加密算法及实现.docx_第8页
第8页 / 共15页
RSA加密算法及实现.docx_第9页
第9页 / 共15页
RSA加密算法及实现.docx_第10页
第10页 / 共15页
RSA加密算法及实现.docx_第11页
第11页 / 共15页
RSA加密算法及实现.docx_第12页
第12页 / 共15页
RSA加密算法及实现.docx_第13页
第13页 / 共15页
RSA加密算法及实现.docx_第14页
第14页 / 共15页
RSA加密算法及实现.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

RSA加密算法及实现.docx

《RSA加密算法及实现.docx》由会员分享,可在线阅读,更多相关《RSA加密算法及实现.docx(15页珍藏版)》请在冰点文库上搜索。

RSA加密算法及实现.docx

RSA加密算法及实现

数学文化课程报告

 

题目:

RSA公钥加密算法及实现

 

RSA公钥加密算法及实现

摘要

公钥密码是密码学界的一项重要发明,现代计算机与互联网中所使用的密码技术都得益于公钥密码。

公钥密码是基于数学的上的困难问题来保证其性。

其中RSA加密算法是一项重要的密码算法,RSA利用大整数的质数分解的困难性,从而保证了其相对安全性。

但如果发现了一种快速进行质数分解的算法,则RSA算法便会失效。

本文利用C语言编程技术进行了RSA算法的演示[1]。

关键词:

C语言编程、RSA算法、应用数学。

RSApublickeyencryptionalgorithm

Abstract

Publickeycryptographyisanimportantinventionincryptography,thankstopublickeycryptography,anditisusedinmodernputerandInternetpasswordtechnology.Publickeycryptographyisbasedonthemathematicsdifficultproblemtoensureitsconfidentiality.TheRSApublickeyencryptionalgorithmisanimportantcryptographicalgorithm,RSAusingthedifficultythatlargeintegerishardtobefactorizedintoprimeNumberstoensureitsafety.Butifyoucanfindakindoffastalgorithmtodothefactorization,RSAalgorithmwillbefailure.InthispaperweusedClanguageprogrammingtechnologytodemonstratetheRSAalgorithm.

Keywords:

Clanguageprogramming、RSAalgorithm、Appliedmathematics

 

第1章引言

计算机与网络技术的高速发展,使密码技术成为信息安全技术的核心。

它主要由密码编码技术和密码分析技术两大分支组成。

密码编码技术的主要任务是寻求产生安全性高的有效密码算法和协议,以满足对消息进行加密或认证的要求。

密码分析技术的主要任务是破译密码或伪造认证信息,实现窃取信息或进行诈骗破坏话动。

这两个分支既相互对立又相互依存,正是由于这种对立统一关系,才推动了密码学自身的发展[2]。

公钥加密中,密钥分为加密和解密密钥两种,发送者用加密密钥对消息进行加密,解密者用解密密钥对明文解密,公钥和密钥是一一对应的,一对公钥和密钥称为密钥对,由公钥加密的密文必须由与该公钥配对的密钥解密。

密钥对中的两个密钥具有非常密切的关系,不能单独生成。

RSA公钥加密算法是1977年由罗纳德·维斯特(RonRivest)、阿迪·萨莫尔(AdiShamir)和伦纳德·阿德曼(LeonardAdleman)一起提出的。

1987年首次公布,当时他们三人都在麻省理工学院工作。

RSA就是他们三人姓氏开头字母拼在一起组成的。

RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。

今天只有短的RSA钥匙才可能被强力方式解破。

到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。

只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。

但在分布式计算和量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战。

RSA算法基于一个十分简单的数论事实:

将两个大质数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。

RSA是被研究得最广泛的公钥算法,从提出到现今的三十多年里,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一[3]。

第2章RSA公钥密码算法的基本理论知识

2.1模运算操作、费马小定理与欧拉定理

2.1.1模运算操作

对任意整数a和任意正整数n,存在唯一的整数q和r,满足。

0

值r=aroodn称为除法的余数,因此,对于任意整数,可表示为:

a=[a/n]+(amodn)(2.1)

且有(a*b)modc=((amodc)*(bmodc))modc(2.2)

费马定理和欧拉定理在公钥密码学中有重要的作用。

2.1.2费马小定理

如果P是素数,a是不能被P整除的正整数,则:

ap-1≡1modp(2.3)

2.1.3欧拉定理

对于任何互质的整数a和n,有在数论中,欧拉定理,(也称费马-欧拉定理)是一个关于同余的性质。

欧拉定理表明,若n,a为正整数,且n,a互质,φ(n)在1到n中为与n互质的数的个数,则:

aφ(n)=1modn(2.4)

欧拉定理证明:

将1~n中与n互质的数按顺序排布:

x1,x2……xφ(n)(显然,共有φ(n)个数)

我们考虑这么一些数:

m1=a*x1;m2=a*x2;m3=a*x3……mφ(n)=a*xφ(n)

1)这些数中的任意两个都不模n同余,因为如果有mS≡mR(modn)(这里假定mS更大一些),就有:

mS-mR=a(xS-xR)=qn,即n能整除a(xS-xR)。

但是a与n互质,a与n的最大公因子是1,而xS-xR

也就是说这些数中的任意两个都不模n同余,φ(n)个数有φ(n)种余数。

2)这些数除n的余数都与n互质,因为如果余数与n有公因子r,那么a*xi=pn+qr=r(……),a*xi与n不互质,而这是不可能的。

那么这些数除n的余数,都在x1,x2,x3……xφ(n)中,因为这是1~n中与n互质的所有数,而余数又小于n.

由1)和2)可知,数m1,m2,m3……mφ(n)(如果将其次序重新排列)必须相应地同余于x1,x2,x3……xφ(n).

故得出:

m1*m2*m3……mφ(n)≡x1*x2*x3……xφ(n)(modn)

或者说a^[φ(n)]*(x1*x2*x3……xφ(n))≡x1*x2*x3……xφ(n)

或者为了方便:

K{a^[φ(n)]-1}≡0(modn)这里K=x1*x2*x3……xφ(n)。

以上定理是我们证明RSA算法可行性的基础[4]。

2.2RSA算法的过程

N=p*q,其中p和q是素数,L为(p-1)和(q-1)的公倍数,L=lcm((p-1),(q-1))(由欧拉函数得出)。

E为与L互质的随机数,D是使得(D*E)modL=1的数。

M为明文,E为加密后的密文,{E,N}为公钥,可以公开,{D,N}为私钥由自己保管。

甲向乙发送自己的公钥,乙用公钥加密后,将密文发送给甲,甲用私钥解密,得到密文。

加密算法为:

E=MEmodN。

解密算法为:

M=EDmodN。

其中有M与E小于N,均大于0。

2.3RSA算法的可行性

RSA算法的可逆性表明其理论上的可行性,要证明可逆性即证明:

M=CD=(ME)D=Me*dmodn

因为E*D=1modL,这说明存在E*D=t*L+1,其中t为正整数且有t>=1。

所以:

ME*D=Mt*L+1modN=((Mt*LmodN)(MmodN))modN

因此可以通过证明Mt*L=1modN成立来证明。

欧拉定理证明有aL=1modn,所以:

Mt*L=1modN

从理论上证明算法可逆,

第3章RSA算法的演示

在编写程序之前先理清思路,设计关键的函数的入口、出口、功能、编写出伪代码。

之后,便是进行函数编写、调试阶段。

最后,便将函数组合在一起,使之成为一个完整的程序。

3.1RSA程序的设计

程序中有判断是否为质数、求两个数的公倍数、判断是否互质、求最大互质数、由E和L求出密钥D、加密算法和解密算法。

各函数算法见附录A。

3.2RSA算法的实现

RSA加密产生公钥和密钥过程可分为以下四步:

(1)得出公钥中的N:

随机取两个不同的素数,p和q,N=p*q。

(2)求出L:

L的值为(p-1)和(q-1)的最小公倍数,L=lcm((p-1),(q-1))。

(3)求出一个随机的公钥E:

求出一个与L互质的数E,有gcd(E,L)=1。

(4)求出一个随钥D:

密钥D应满足(D*E)modL=1;

主函数的代码如下:

intmain()

{

longintp,q,E,D,N,L,ming,mi;

display();

srand(time(NULL));

do

{

p=rand()%500;

}

while(p<100||!

(iszs(p)));

do

{

q=rand()%500;

}

while(!

(iszs(q))||p==q);

N=p*q;

L=lcm(p-1,q-1);

E=gcd(L);

D=qiuD(E,L);

if(D<=0||E<=0)return0;

printf("p=%ldq=%ldN=%ldL=%ldE=%ldD=%ld\n",p,q,N,L,E,D);

printf("{E=%ld,N=%ld},{D=%ld,N=%ld}\n",E,N,D,N);

printf("Let'sdoit!

\n");

do

{

do

{

printf("请输入一个小于N=%ld的正整数:

",N);

scanf("%ld",&ming);

getchar();

}

while(ming>N||ming<=0);

mi=Encryption(E,N,ming);

ming=Decryption(D,N,mi);

printf("公钥:

E=%ldN=%ld密文:

%ld\n密钥:

D=%ldN=%ld明文:

%ld\n",E,N,mi,D,N,ming);

printf("还想再来一次吗?

[y/n]:

");

}

while('y'==getchar());

printf("Seeyou!

\n");

return0;

}

3.3RSA算法的演示

完成编程后,便做了一次测试,测试结果如图3-1所示。

图3-1命令行中运行结果

 

第4章结果分析与讨论

RSA密码体制安全性

任何密码都没有绝对的安全性,RSA密码体制同样如此,但RSA密码经过了20年的考验,可以说,迄今为止,没有一种相对有效的方法去由公钥破解私钥,由公钥破解私钥等价于将公钥{E,N}中的N,分解为两个质数的积,从而算出私钥{D,N}。

将一个数有效分解为两个因子之积是数学上的一大难题,当N增大一位时,时间复杂度呈倍增长。

无论N有多长,总有一天能被质因数分解,1999年,512比特的整数由292台计算机花费5.2个月才完成。

RSA密码的优点与缺点

RSA算法理论非常简单,应用的数学原理,非常巧妙,但是其实现性不如对称密码容易。

RSA算法在实际过程中需要找到合适的p和q,得到一个合适的N,实际过程中,N有100位之多,甚至有1024位,但是如此之大的数给加密,解密都带来一定的困难,算法没有对称密码加密快[5]。

尽管如此,但是由于其相对较高的安全性使得其应用非常广泛。

于是出现了用硬件进行RSA算法计算,加快了处理速度[6]。

第5章结论

RSA密码算法在现在来说还是相当可靠的,因为迄今没有一个相当好的算法来分解一个大的整数。

此外,RSA算法可以和其他加密算法一起使用,或者用于数字签名。

通过不断的学习RSA算法的相关知识,完成了这篇论文,自身的知识有了很大的提高,了解了RSA算法的基本容后,对其进行编程测试,自身的能力也有所提高。

致谢

数学文化课的学习即将结束,在此,我要感谢费祥历老师的教育之恩。

本文离不开梁玉环老师在C语言课程中的教育,在此表示忠心的感谢。

 

参考文献

[1][日]结城浩,.图解密码技术[M].人民邮电,2015.1.

[2]周升力.RSA密码算法的研究与快速实现[J].

[3]XX百科.RSA算法_XX百科.baike.baidu./link?

url=Dplx6jG5wOijYLjKRn_eu_fSu0NhGYMa-1QS5UnsC30mdDcJ1O5jwkDFYmj-UxFd15PtUF3TxQh4T76fpj6tWupv-bp-a7mO0KC9wcH01ZDQUQ51uG8J2qrYvBZAZPbM

[4]XX百科.欧拉定理_XX百科.baike.baidu./link?

url=swLTWWnjw4aAyPFre6_Jsd9MqurjKXenfLyq6tjlm1mRSsqImRSTqDHf6i6GJpRTRWz1DU9Ot44EdLgLU3vNhn60ye6W06oB3miIoPBdYrU5STBo3C2jU4vbM3kFKfQq

[5][日]结城浩.图解密码技术[M].人民邮电,2015.1.

[6]嘉勇.应用密码学.[M].清华大学.

附录

附录A相关函数

/*判断是否为质数*/

longintiszs(longinta)

{

longintb=0;

if(a<=1)/*函数入口检查*/

{

return0;

}

for(b=sqrt(a)+1;b>=1;b--)

{

if(0==a%b)break;

}

if(1==b)

{

return1;

}

else

{

return0;

}

}

/*求两个数的公倍数L*/

longintlcm(intp,intq)

{

longinta=1,b=1,all=1;

if(q>0&&p>0)

{

if(p>q)

{

a=q;

}

else

{

a=p;

}

for(b=a;b>=2;b--)

{

if(p%b==0&&q%b==0)

{

p=p/b;

q=q/b;

all=all*b;

}

}

all=all*p*q;

returnall;

}

else

{

printf("ERRORinlcm!

\n");

return0;

}

}

/*判断是否互质*/

longintishz(intp,intq)

{

longintc;

if(p>1&&q>1)

{

do

{

c=p%q;

p=q;

q=c;

}

while(c>1);

if(q==1)

{

return1;

}

else

{

return0;

}

}

else

{

return0;

}

}

/*求最互质数E*/

longintgcd(intL)

{

longinta=2;

do

{

a++;

}

while(!

(1==ishz(L,a)));

returna;

}

/*由E和L求出密钥D*/

longintqiuD(intE,intL)

{

longintD;

for(D=1;D<1000000;D++)

{

if((D*E)%L==1)

{

returnD;

}

}

return-1;

}

/*加密算法*/

longintEncryption(longintE,longintN,longintming)

{

longintmi=ming;

inti;

for(i=1;i

{

mi=(ming*mi)%N;

}

returnmi;

}

/*解密算法*/

longintDecryption(longintD,longintN,longintmi)

{

longintming=mi;

longinti;

for(i=1;i

{

ming=(mi*ming)%N;

}

returnming;

}

对数学文化课程的建议

我对老师印象非常好,不过我自己认为数学之美的容偏少,可以增加一些,让同学们了解更多数学美的涵,并运用计算机技术发掘数学的美。

另外,可以线上线下同时学习,不过课时可能会增长很多,学生压力会增加。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2