文档详情

实验四 RSA算法实验四 RSA算法.doc

发布:2017-01-02约字共5页下载文档
文本预览下载声明
实验四 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
显示全部
相似文档