公钥加密算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五公钥加密算法—RSA

一、实验目的

通过使用RSA算法对实验数据进行加密和解密,掌握公钥加密算法的基本原理,熟练掌握RSA算法各功能模块的工作原理和具体运算过程。

二、实验原理

RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

1. RSA的密钥生成

RSA的算法涉及三个参数,n、e、d。

其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。鉴于现代对于大整数分解的水平不断增强,一般P、Q的取值都要求在1024位以上。

e和d是一对相关的值,e可以任意取,但要求e与(p-1)*(q-1)互质;再选择d,要求:

(e*d)mod((p-1)*(q-1))=1。

就是密钥对。一般将前者当作公钥,后者作为私钥使用。

2. RSA加密/解密过程

RSA加解密和解密的算法完全相同,设A为明文,B为密文,则:

A=B^e mod n;B=A^d mod n;

e和d可以互换使用,即:

A=B^d mod n;B=A^e mod n;

三、实验环境

运行Windows或Linux操作系统的PC机,具有gcc(Linux)、VC(Windows)等C语言编译环境。

四、 实验内容和步聚

1.根据本讲义提供的RSA程序,分析RSA算法的实现过程:

(1).利用:void GenerateKey(RSA_Key& PublicKey,RSA_Key& PrivateKey,unsigned int

iKeySize)函数根据实际需要生成符合要求长度的公钥和私钥,大致步骤如下:

a) 随机生成两个指定长度的大素数P,Q。

b) 计算N=P*Q,以及N的欧拉函数φ(N)=(P-1)*(Q-1)。

c) 随机生成一个与φ(N)互素的大整数E(公钥)。

d) 根据公式ed≡1(modΦ(N)),利用函数multi_inverse(1, Big*, Big, Big*)计算出

私钥D。

(2).将某个大整数赋值给一个Big型变量M(明文)。

(3).调用函数powmod(..,..,..,..)对明文M加密得到密文C。

(4).调用函数powmod(..,..,..,..)对密文C解密得到明文D。

(5).比较M与D是否一致,判断实验结果是否正确。

(6).调换公钥、私钥后重复以上步骤,验证e、d的可互换性,并思考为什么可以这样

做。

2.使用实例分析

取p=11,q=13。

首先计算:

n=pq=11×13=143

φ(n)=(p-1)(q-1)=(11-1) ×(13-1)=120

然后选择e=17,满足gcd(e,φ(n))=gcd(17,120)=1,然后根据ed≡1(modφ(N))计算d=113。则:公钥:<17,143>、私钥:<113, 143>。

设明文信息:m=24。对明文信息加密,得密文为:

c≡m^e % N=24^17%143=7

密文c经过公开信道发送到接收方后,接收方用私钥d对密文进行解密:

m≡c^d % N=7^113%143=24

从而正确地恢复出明文。

五. 实验报告要求

1.阐明RSA密钥生成以及加密、解密流程。

2.使用提供的模块编写RSA加密程序对数据进行加密和解密,提交程序代码和执行结果。

相关文档
最新文档