RSA加解密过程及实现

RSA加解密过程及实现
RSA加解密过程及实现

********************

本科生作业

********************

兰州理工大学

计算机与通信学院

2017年春季学期

信息安全课程

专业:物联网工程

姓名:

学号:

授课教师:郭显

成绩:

RSA 加解密过程及其实现

概述

RSA 算法

RSA 加密算法是一种最常用的非对称加密算法,CFCA 在证书服务中离不了它。在公钥加密标准和电子商业中,RSA 被广泛使用。 RSA 算法使用乘方运算,明文以分组为单位进行加密,每个分组的二进制值均小于n ,也就是说,分组的大小必须小于或等于1)(log 2+n 位,在实际应用中,分组的大小i 位,其中12

2+≤

程如下: n M C e mod =

n M n M n C M ed d e d m od m od )(m od ===

其中收发双方均已知n ,发送方已知e ,只有接收方已知d ,因此公钥加密算法的公钥为PU={e,n},私钥为PR={d,n}。该算法要能做公钥加密,必须满足以下条件:

(1)可以找到e,d,n,使得对所有的M

ed =mod 。 (2)对所有的M

(3)由e 和n 确定d 是不可行的。

公钥与私钥

(1)随意选择两个大素数p 和q ,p 不等于q ,计算pq n =。

(2)根据欧拉函数,不大于n 且与n 互素的整数个数为)1)(1(--q p

(3)选择一个整数e 与)1)(1(--q p 互素,并且e 小于)1)(1(--q p

(4)用以下这个公式计算d : ))1)(1mod((1--≡q p de

(5)将p 和q 的记录销毁。),(e n 是公钥,),(d n 是私钥。),(d n 是秘密的。Alice 将她的公钥),(e n 传给Bob ,而将她的私钥),(d n 藏起来。

图1 RSA 加密过程

2.实例描述

(1)选择两个素数,11,17==q p 。

(2)计算1871117=?==pq n 。

(3)计算1601016)1)(1()(=?=--=q p n φ。

(4)选择e 使其与160)(=n φ互素且小于)(n φ,这里选择7=e 。

(5)确定d 使得160mod 1≡de 且160

d 可利用扩展的欧几里得算法来计算。

所得的公钥}187,7{=PU 、私钥}187,23{=PR 。该例说明了输入明文177=M 时这些密

钥的使用情况。加密时需计算187mod 1777

=C 。利用模算术的性质,我们如下计算: 187m od )]187m od 177()187m od 177()187m od 177[(187m od 177247??=

177187mod 177=

100187mod 31329187mod 1772==

89187mod 981506241187mod 1774==

12187m od 1575300187m od )89100177(187m od 1777==??=

解密时,我们计算187mod 1223

=M 187m od )]187m od 12()187m od 12()187m od 12()187m od 12()187m od 12[(187m od 12884223????=12187mod 12=

144187mod 122=

166187mod 20736187mod 124==

67187mod 429981696187mod 128==

177187m od 1287660672187m od )676716614412(187m od 1123==????= 算法的安全性

在RSA 密码应用中,公钥PU 是被公开的,即e 和n 的数值可以被第三方窃听者得到。破解RSA 密码的问题就是从已知的e 和n 的数值(n 等于pq ),想法求出d 的数值,这样就可以得到私钥来破解密文。从上文中的公式:)))1)(1(m od((1

--≡-q p e d 或))1)(1mod((1--≡q p de 我们可以看出。密码破解的实质问题是:从pq 的数值,去求出)1(-p 和)1(-q 。换句话说,只要求出p 和q 的值,我们就能求出d 的值而得到私钥。当p 和q 是一个大素数的时候,从它们的积pq 去分解因子p 和q ,这是一个公认的数学难题。比如当pq 大到1024位时,迄今为止还没有人能够利用任何计算工具去完成分解因子的任务。然而,虽然RSA 的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA 的难度与大数分解难度等价。即RSA 的重大缺陷是无法从理论上把握它的保密性能如何。此外,RSA 的缺点还有:

A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。

B)分组长度太大,为保证安全性,n 至少也要 600 bits 以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。因此,使用RSA 只能加密少量数据,大量的数据加密还要靠对称加密算法。

4.程序代码

#include <>

int rsa(int a,int b,int c)

{ int r=1;

b=b+1;

while(b!=1)

{

r=r*a;

r=r%c;

b--;

}

printf("%d\n",r);

return r;

}

void main()

{

int p,q,e,d,m,n,t,c,r;

char s;

printf("请输入 p,q: ");

scanf("%d%d",&p,&q);

n=p*q;

printf(" n 的值是 %4d\n",n);

t=(p-1)*(q-1); 序测试结果

图2 RSA加密

图3 RSA解密

总结:通过c语言的程序实现对RSA算法的理解加深了。

相关主题