实验四 RSA算法实验四 RSA算法.doc
文本预览下载声明
实验四 RSA算法
1.实验目的
(1)了解RSA算法的特点
(2)掌握RSA算法的加解密原理
2.实验内容
阅读学习本实验第三部分(知识点),通过RSA算法实现的Flash短片,理解并掌握RSA算法的详细实现过程;在VC环境下,调试运行RSA算法,简单了解RSA算法的C++语言实现过程。
(1)RSA算法原理演示
步骤1:打开实验五文件夹中的“RSA.exe”文件(如图41所示);
图4-1 RSA算法演示文件
步骤2:依据演示文稿,逐步学习RSA算法。
(2)RSA算法的实现
该部分,主要通过在VC++6.0中,采用C++语言来编程实现RSA算法来更进一步的理解和掌握RSA算法。具体步骤如下:
步骤1:打开VC开发环境,打开RSA.cpp文件;
步骤2:依据RSA算法实现原理,阅读完善算法;
步骤3:编译运行程序,并进行具体测试。
3.知识点
1978年美国MIT的三名数学家R.Rivest(里维斯特),A.Shamir(沙摩尔)和L.Adleman(阿德尔曼)提出了著名的公钥密码体制:RSA算法,它的安全性依赖于大数分解。公钥和私钥都是两个大素数()的函数。据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积
密钥对的产生选择两个大素数,p 和q 计算: n = p * q ((n)=(p-1)(q-1),其中((n)是n的欧拉函数值;
● 选一整数e,满足1e ((n),且gcd(((n),e)=1;
● 计算d,满足de≡1 mod ((n),即d是e在模((n)下的乘法逆元;
● {e,n}为公钥, (d,n)为私钥。
② 加、解密过程
● 加密时首先将明文比特串分组,使得每个分组对应的十进制数小于n,即分组长度小于log2 n;
● 对每个明文分组m,作加密运算:
c≡me mod n
● 解密时对每个密文分组做如下计算:
m ≡ cd(mod n)
(2)RSA算法论证
证明:由加密过程 :
cd mod n ≡(me)d mod n ≡ m k ((n)+1 mod n (ed ≡ 1 mod (( n))
● 若m与n互素,由欧拉定理 m ((n)≡1 mod n
有 mk ((n)≡ 1 mod n,
mk((n)+1≡ m mod n
● 若m与n不互素,即 gcd(m, n) ≠1,则m必与两个素数p、q中的一个互素,假定与p互素,与q不互素,不妨设m=cq (c q),此时gcd(m, p)=1,由欧拉定理,
m ((p)≡1 mod p,[m ((p)]k ((q)≡1 mod p
即m k ((n) ≡1 mod p,
于是存在一整数r,使mk ((n) = 1+rp ,
两边同乘m=cq, 得 :
mk ((n)+1= (m+rcpq) = (m+rcn)
即mk((n)+1≡ m mod n
(3)RSA算法参数的选择
为了确保RSA密码的安全,必须认真选择密码参数
①p和q要足够大;
一般应用:p和q应512b 重要应用:p和q应1024b
②p和q应为强素数;
文献指出,只要(p-1)、(p+1)、(q-1)、(q+1)四个数之一只有小的素因子,n就容易分解。
③p和q的差要合适;
④ e的选择;
随机且含1多就安全,但加密速度慢。
⑤ d的选择;
d不能太小,要足够大。
⑥不要许多用户公用一个模n。
易受共模攻击
(4)快速指数运算(平方乘运算)
问题:求am mod n=?,其中a,m是正整数。
将m表示为二进制形式bkbk-1…b0,即:
m=bk2k+bk-12k-1+…+b12+b0
因此,
实现平方乘法运算的伪代码如下所示:
m=bk2k+bk-12k-1+…+b12+b0,求am mod n=?
d=1;
for i=k downto 0 {
d ≡(d×d) mod n;
if bi=1 then {
d ≡(d×a) mod n
}
}
return d
(5)Miller-Rabin素性检测算法
引理:若p是奇素数,则方程式:
x2 ( 1 (mod p)
只有两个解 x = +1 或 x = –1。该引理的逆命题就是:如果方程式x2 ( 1 (mod p)存在除了+1 和 –1 以外的其他解,n 就不是素数。上述引理的逆命题就是著名的Mi
显示全部