最新RSA算法公钥加密算法new.doc

上传人:1595****071 文档编号:33810522 上传时间:2022-08-12 格式:DOC 页数:15 大小:167KB
返回 下载 相关 举报
最新RSA算法公钥加密算法new.doc_第1页
第1页 / 共15页
最新RSA算法公钥加密算法new.doc_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《最新RSA算法公钥加密算法new.doc》由会员分享,可在线阅读,更多相关《最新RSA算法公钥加密算法new.doc(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精品资料RSA算法公钥加密算法new.RSA1978年,MIT的Rivest、Shamir、Adleman提出RSA算法非对称加密(公开密钥加密)密码学的一次革命,定义: KA KB , KA、E和D公开特点: 基于数论原理(大数分解难题) 是目前应用最广泛的公钥加密算法 属于块加密算法 在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。此函数以其首名研究者欧拉命名,它又称为Eulers totient function、函数、欧拉商数等。RSA算法原理l 定义:RSA加密算法确定密钥:1. 找到两个大质数,p,q2. Let n=pq3. let m=(p-1)(q-1);

2、Choose e and d such that de=1(%m).4. Publish n and e as public key. Keep d and n as secret key.加密:C=Me(%n)解密:M=(Cd)%n其中 C=Me(%n) 为 C%n=(Me)%n存在的主要问题是大数计算和大数存储的问题。什么是RSARSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RS

3、A的难度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何,而且密码学界多数人士倾向于因子分解不是NPC问题。RSA的缺点主要有:A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。B)分组长度太大,为保证安全性,n 至少也要 600 bits以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。目前,SET(Secure Electronic Transaction)协议中要求CA采用2048比特长的密钥,其他实体使用1024比特的密钥。这种算法1978年就出现了,它是第一个既

4、能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman。RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。 RSA的算法涉及三个参数,n、e1、e2。 其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。 e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod(p-1)*(q-1)=1。 (n及e1),(n及e2)就是密钥对

5、。 RSA加解密的算法完全相同,设A为明文,B为密文,则:A=Be1 mod n;B=Ae2 mod n; e1和e2可以互换使用,即: A=Be2 mod n;B=Ae1 mod n; 一、RSA 的安全性RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解 RSA就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。目前, RSA 的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现在,人们已能分解多个十进制位的大素数。因此,模数n 必须选大一些,因具体适用情况而定。二、RSA的速度由于进行的

6、都是大数计算,使得RSA最快的情况也比DES慢上倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。三、RSA的选择密文攻击RSA在选择密文攻击面前很脆弱。一般攻击者是将某一信息作一下伪装( Blind),让拥有私钥的实体签署。然后,经过计算就可得到它所想要的信息。实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保留了输入的乘法结构: ( XM )d = Xd *Md mod n 前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征-每个人都能使用公钥。但从算法上无法解决这一问题,主要措施有两条:一条是采用好的公钥协议,保证工作过程中实体不对其他实

7、体任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不对陌生人送来的随机文档签名,签名时首先使用One-Way HashFunction 对文档作HASH处理,或四、RSA的公共模数攻击若系统中共有一个模数,只是不同的人拥有不同的e和d,系统将是危险的。最普遍的情况是同一信息用不同的公钥加密,这些公钥共模而且互质,那末该信息无需私钥就可得到恢复。设P为信息明文,两个加密密钥为e1和e2,公共模数是n,则:C1 = Pe1 mod nC2 = Pe2 mod n密码分析者知道n、e1、e2、C1和C2,就能得到P。因为e1和e2互质,故用Euclidean算法能找到r和s,满足:r *

8、e1 + s * e2 = 1假设r为负数,需再用Euclidean算法计算C1(-1),则( C1(-1) )(-r) * C2s = P mod n 另外,还有其它几种利用公共模数攻击的方法。总之,如果知道给定模数的一对e和d,一是有利于攻击者分解模数,一是有利于攻击者计算出其它成对的e和d,而无需分解模数。解决办法只有一个,那就是不要共享模数n。 RSA的小指数攻击。 有一种提高 RSA速度的建议是使公钥e取较小的值,这样会使加密变得易于实现,速度有所提高。但这样作是不安全的,对付办法就是e和d都取较大的值。 RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被

9、研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何,而且密码学界多数人士倾向于因子分解不是NPC问题。 RSA的缺点主要有:A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。B)分组长度太大,为保证安全性,n 至少也要 600 bits 以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准

10、化。目前,SET( Secure Electronic Transaction )协议中要求CA采用比特长的密钥,其他实体使用比特的密钥。在许多应用领域, 公钥密码技术在保障安全方面起了关键的作用在某些场合由于不便频繁更换私人密钥如权威机构的证书密钥、金融机构的签名密钥等, 确保密钥的安全就至关重要防止密钥泄露的一项决定性措施是采用门限密码技术, , 它将一部分密码的功能分散给多人, 而只有一定数量的成员合作方可完成密码运算另外, 在一些特殊场合也须谨防密钥的持有者权力过于集中而滥用职权, 这也要求对密钥进行分散管理, 以克服权力过于集中的弊端实现密钥分散管理的门限密码, 需要解决秘密的分享、

11、密码算法以及结合这两者而设计出新的加密方式密码算法的研究一直是密码理论的主体, 目前已有许多算法可供选择使甩对秘密分享也早有雌, 它是指将系统的秘密s, 分解为N个部分秘密s1,s2,s3,sn, 系统的N个成员P1,P2,.Pn分别拥有各自的部分秘密, 使得任何少于T个成员都无法从他们的部分秘密得到任何关于系统秘密s信息;借助有效的算法, 任意T成员可从相应的部分秘密得到系统的秘密s.这就是所谓的, (T,N)一门限秘密分享系统在实际应用中,秘密分享系统存在着不可回避的问题, 即由谁来完成从部分秘密恢复系统秘密的工作因为不论是谁, 他一旦得到了个部分秘密, 就可导出系统的秘密而独享, 除非秘

12、密的恢复是由一个可信的“ 黑盒子”完成, 为了避免系统秘密的泄露, 文献2提出利用部分密钥将加密的部分结果发给指定的人或机器, 再由部分结果产生最终的结果, 而又不暴露系统的秘密目前, 门限密码已成为密码学中非常活跃的领域.RSA算法(转)2008-06-05 10:39基础RSA算法非常简单,概述如下:找两素数p和q取n=p*q取t=(p-1)*(q-1)取任何一个数e,要求满足et并且e与t互素(就是最大公因数为1)取d*e%t=1这样最终得到三个数: n d e设消息为数M (M n)设c=(M*d)%n就得到了加密后的消息c 设m=(c*e)%n则 m = M,从而完成对c的解密。注:

13、*表示次方,上面两式中的d和e可以互换。在对称加密中:n d两个数构成公钥,可以告诉别人;n e两个数构成私钥,e自己保留,不让任何人知道。给别人发送的信息使用e加密,只要别人能用d解开就证明信息是由你发送的,构成了签名机制。别人给你发送信息时使用d加密,这样只有拥有e的你能够对其解密。rsa的安全性在于对于一个大数n,没有有效的方法能够将其分解从而在已知n d的情况下无法获得e;同样在已知n e的情况下无法求得d。实践接下来我们来一个实践,看看实际的操作:找两个素数:p=47q=59这样n=p*q=2773t=(p-1)*(q-1)=2668取e=63,满足eperl -e foreach

14、$i (1.9999) print($i),last if $i*63%2668=1 847即d847最终我们获得关键的n=2773d=847e=63取消息M=244我们看看加密:c=M*d%n = 244*847%2773用perl的大数计算来算一下:C:Tempperl -Mbigint -e print 244*847%2773465即用d对M加密后获得加密信息c465解密:我们可以用e来对加密后的c进行解密,还原M:m=c*e%n=465*63%2773 :C:Tempperl -Mbigint -e print 465*63%2773244即用e对c解密后获得m=244 , 该值和原

15、始信息M相等。字符串加密把上面的过程集成一下我们就能实现一个对字符串加密解密的示例了。每次取字符串中的一个字符的ascii值作为M进行计算,其输出为加密后16进制的数的字符串形式,按3字节表示,如01F代码如下:#!/usr/bin/perl -w#RSA 计算过程学习程序编写的测试程序#watercloud 2003-8-12#use strict;use Math:BigInt;my %RSA_CORE = (n=2773,e=63,d=847); #p=47,q=59my $N=new Math:BigInt($RSA_COREn);my $E=new Math:BigInt($RSA_

16、COREe);my $D=new Math:BigInt($RSA_COREd);print N=$N D=$D E=$En;sub RSA_ENCRYPT my $r_mess = shift _; my ($c,$i,$M,$C,$cmess); for($i=0;$i new($c); $C=$M-copy(); $C-bmodpow($D,$N); $c=sprintf %03X,$C; $cmess.=$c; return $cmess;sub RSA_DECRYPT my $r_mess = shift _; my ($c,$i,$M,$C,$dmess); for($i=0;$i

17、 new($c); $C=$M-copy(); $C-bmodpow($E,$N); $c=chr($C); $dmess.=$c; return $dmess;my $mess=RSA 娃哈哈哈;$mess=$ARGV0 if ARGV = 1;print 原始串:,$mess,n;my $r_cmess = RSA_ENCRYPT($mess);print 加密串:,$r_cmess,n;my $r_dmess = RSA_DECRYPT($r_cmess);print 解密串:,$r_dmess,n;#EOF测试一下:C:Tempperl rsa-test.plN=2773 D=847

18、E=63原始串:RSA 娃哈哈哈加密串:5CB6CD6BC58A7709470AA74A0AA74A0AA74A6C70A46C70A46C70A4解密串:RSA 娃哈哈哈C:Tempperl rsa-test.pl 安全焦点(xfocus)N=2773 D=847 E=63原始串:安全焦点(xfocus)加密串:3393EC12F0A466E0AA9510D025D7BA0712DC3379F47D51C325D67B解密串:安全焦点(xfocus)提高前面已经提到,rsa的安全来源于n足够大,我们测试中使用的n是非常小的,根本不能保障安全性,我们可以通过RSAKit、RSATool之类的工

19、具获得足够大的N 及D E。通过工具,我们获得1024位的N及D E来测试一下:n=0x328C74784DF31119C526D18098EBEBB943B0032B599CEE13CC2BCE7B5FCD15F90B66EC3A85F5005DBDCDED9BDFCB3C4C265AF164AD55884D8278F791C7A6BFDAD55EDBC4F017F9CCF1538D4C2013433B383B47D80EC74B51276CA05B5D6346B9EE5AD2D7BE7ABFB36E37108DD60438941D2ED173CCA50E114705D7E2BC511951

20、d=0x10001e=0xE760A3804ACDE1E8E3D7DC0197F9CEF6282EF552E8CEBBB7434B01CB19A9D87A3106DD28C523C29954C5D86B36E943080E4919CA8CE08718C3B0930867A98F635EB9EA9200B25906D91B80A47B77324E66AFF2C4D70D8B1C69C50A9D8B4B7A3C9EE05FFF3A16AFC023731D80634763DA1DCABE9861A4789BD782A592D2B1965设原始信息M=0x11111111111122222222222

21、233333333333完成这么大数字的计算依赖于大数运算库,用perl来运算非常简单:A) 用d对M进行加密如下:c=M*d%n :C:Tempperl -Mbigint -e $x=Math:BigInt-bmodpow(0x11111111111122222222222233333333333, 0x10001, 0x328C74784DF31119C526D18098EBEBB943B0032B599CEE13CC2BCE7B5FCD15F90B66EC3A85F5005DBDCDED9BDFCB3C4C265AF164AD55884D8278F791C7A6BFDAD55EDBC4F

22、017F9CCF1538D4C2013433B383B47D80EC74B51276CA05B5D6346B9EE5AD2D7BE7ABFB36E37108DD60438941D2ED173CCA50E114705D7E2BC511951);print $x-as_hex0x17b287be418c69ecd7c39227ab681ac422fcc84bb35d8a632543b304de288a8d4434b73d2576bd45692b007f3a2f7c5f5aa1d99ef3866af26a8e876712ed1d4cc4b293e26bc0a1dc67e247715caa6b3028

23、f9461a3b1533ec0cb476441465f10d8ad47452a12db0601c5e8beda686dd96d2acd59ea89b91f1834580c3f6d90898即用d对M加密后信息为:c=0x17b287be418c69ecd7c39227ab681ac422fcc84bb35d8a632543b304de288a8d4434b73d2576bd45692b007f3a2f7c5f5aa1d99ef3866af26a8e876712ed1d4cc4b293e26bc0a1dc67e247715caa6b3028f9461a3b1533ec0cb476441465f1

24、0d8ad47452a12db0601c5e8beda686dd96d2acd59ea89b91f1834580c3f6d90898B) 用e对c进行解密如下:m=c*e%n :C:Tempperl -Mbigint -e $x=Math:BigInt-bmodpow(0x17b287be418c69ecd7c39227ab681ac422fcc84bb35d8a632543b304de288a8d4434b73d2576bd45692b007f3a2f7c5f5aa1d99ef3866af26a8e876712ed1d4cc4b293e26bc0a1dc67e247715caa6b3028f

25、9461a3b1533ec0cb476441465f10d8ad47452a12db0601c5e8beda686dd96d2acd59ea89b91f1834580c3f6d90898, 0xE760A3804ACDE1E8E3D7DC0197F9CEF6282EF552E8CEBBB7434B01CB19A9D87A3106DD28C523C29954C5D86B36E943080E4919CA8CE08718C3B0930867A98F635EB9EA9200B25906D91B80A47B77324E66AFF2C4D70D8B1C69C50A9D8B4B7A3C9EE05FFF3A1

26、6AFC023731D80634763DA1DCABE9861A4789BD782A592D2B1965, 0x328C74784DF31119C526D18098EBEBB943B0032B599CEE13CC2BCE7B5FCD15F90B66EC3A85F5005DBDCDED9BDFCB3C4C265AF164AD55884D8278F791C7A6BFDAD55EDBC4F017F9CCF1538D4C2013433B383B47D80EC74B51276CA05B5D6346B9EE5AD2D7BE7ABFB36E37108DD60438941D2ED173CCA50E114705

27、D7E2BC511951);print $x-as_hex0x11111111111122222222222233333333333(我的P4 1.6G的机器上计算了约5秒钟)得到用e解密后的m=0x11111111111122222222222233333333333 = MC) RSA通常的实现RSA简洁幽雅,但计算速度比较慢,通常加密中并不是直接使用RSA 来对所有的信息进行加密,最常见的情况是随机产生一个对称加密的密钥,然后使用对称加密算法对信息加密,之后用RSA对刚才的加密密钥进行加密。最后需要说明的是,当前小于1024位的N已经被证明是不安全的自己使用中不要使用小于1024位的RS

28、A,最好使用2048位的RSA算法的数学原理: 先来找出三个数, p, q, r, 其中 p, q 是两个相异的质数, r 是与 (p-1)(q-1) 互质的数。 p, q, r 这三个数便是 private key。接著, 找出m, 使得 rm = 1 mod (p-1)(q-1). 这个 m 一定存在, 因为 r 与 (p-1)(q-1) 互质, 用辗转相除法就可以得到了. 再来, 计算 n = pq. m, n 这两个数便是 public key。 编码过程是, 若资料为 a, 将其看成是一个大整数, 假设 a = n 的话, 就将 a 表成 s 进位 (s = n, 通常取 s = 2

29、t), 则每一位数均小於 n, 然後分段编码. 接下来, 计算 b = am mod n, (0 = b n), b 就是编码後的资料. 解码的过程是, 计算 c = br mod pq (0 = c pq), 於是乎, 解码完毕. 等会会证明 c 和 a 其实是相等的 :) 如果第三者进行窃听时, 他会得到几个数: m, n(=pq), b. 他如果要解码的话, 必须想办法得到 r. 所以, 他必须先对 n 作质因数分解. 要防止他分解, 最有效的方法是找两个非常的大质数 p, q, 使第三者作因数分解时发生困难. 若 p, q 是相异质数, rm = 1 mod (p-1)(q-1), a

30、 是任意一个正整数, b = am mod pq, c = br mod pq, 则 c = a mod pq 证明的过程, 会用到费马小定理, 叙述如下: m 是任一质数, n 是任一整数, 则 nm = n mod m (换另一句话说, 如果 n 和 m 互质, 则 n(m-1) = 1 mod m) 运用一些基本的群论的知识, 就可以很容易地证出费马小定理的. 因为 rm = 1 mod (p-1)(q-1), 所以 rm = k(p-1)(q-1) + 1, 其中 k 是整数 因为在 modulo 中是 preserve 乘法的 (x = y mod z and u = v mod z

31、 = xu = yv mod z), 所以, c = br = (am)r = a(rm) = a(k(p-1)(q-1)+1) mod pq 1. 如果 a 不是 p 的倍数, 也不是 q 的倍数时, 则 a(p-1) = 1 mod p (费马小定理) = a(k(p-1)(q-1) = 1 mod p a(q-1) = 1 mod q (费马小定理) = a(k(p-1)(q-1) = 1 mod q 所以 p, q 均能整除 a(k(p-1)(q-1) - 1 = pq | a(k(p-1)(q-1) - 1 即 a(k(p-1)(q-1) = 1 mod pq = c = a(k(p

32、-1)(q-1)+1) = a mod pq 2. 如果 a 是 p 的倍数, 但不是 q 的倍数时, 则 a(q-1) = 1 mod q (费马小定理) = a(k(p-1)(q-1) = 1 mod q = c = a(k(p-1)(q-1)+1) = a mod q = q | c - a 因 p | a = c = a(k(p-1)(q-1)+1) = 0 mod p = p | c - a 所以, pq | c - a = c = a mod pq 3. 如果 a 是 q 的倍数, 但不是 p 的倍数时, 证明同上 4. 如果 a 同时是 p 和 q 的倍数时, 则 pq | a = c = a(k(p-1)(q-1)+1) = 0 mod pq = pq | c - a = c = a mod pq Q.E.D. 这个定理说明 a 经过编码为 b 再经过解码为 c 时, a = c mod n (n = pq). 但我们在做编码解码时, 限制 0 = a n, 0 = c n, 所以这就是说 a 等於 c, 所以这个过程确实能做到编码解码的功能.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁