公钥加密算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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加密程序对数据进行加密和解密,提交程序代码和执行结果。