RSA加密算法1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Unicode(统一码、万国码、单一码、标准万国码)
1.隨意選擇兩個大的質數p和q,p不等於q,計算N=pq。
2.根據歐拉函數,不大於N且與N互質的整數個數為(p-1)(q-1)
3.選擇一個整數e與(p-1)(q-1)互質,並且e小於(p-1)(q-1)
4.用以下這個公式計算d:d× e≡ 1 (mod (p-1)(q-1))
5.將p和q的記錄銷毀。
(N,e)是公鑰,(N,d)是私鑰。
(N,d)是秘密的。
Alice將她的公鑰(N,e)傳給Bob,而將她的私鑰(N,d)藏起來。
加密消息
假设Bob想给Alice送一个消息m,他知道Alice产生的N和e。
他使用起先与Alice 约好的格式将m转换为一个小于N的整数n,比如他可以将每一个字转换为这个字的Unicode码,然后将这些数字连在一起组成一个数字。
假如他的信息非常长的话,他可以将这个信息分为几段,然后将每一段转换为n。
用下面这个公式他可以将n加密为c:
计算c并不复杂。
Bob算出c后就可以将它传递给Alice。
解密消息
Alice得到Bob的消息c后就可以利用她的密钥d来解码。
她可以用以下这个公式来将c转换为n:
得到n后,她可以将原来的信息m重新复原。
解码的原理是
以及ed≡ 1 (mod p-1)和ed≡ 1 (mod q-1)。
由费马小定理可证明(因为p和q是质数)
和
这说明(因为p和q是不同的质数,所以p和q互质)
签名消息
RSA也可以用来为一个消息署名。
假如甲想给乙传递一个署名的消息的话,那么她可以为她的消息计算一个散列值(Message diget),然后用她的密钥(private key)加密这个散列值并将这个“署名”加在消息的后面。
这个消息只有用她的公钥才能被解密。
乙获得这个消息后可以用甲的公钥解密这个散列值,然后将这个数据与他自己为这个消息计算的散列值相比较。
假如两者相符的话,那么他就可以知道发信人持有甲的密钥,以及这个消息在传播路径上没有被篡改过。
安全
假设偷听者乙获得了甲的公钥N和e以及丙的加密消息c,但她无法直接获得甲的密钥d。
要获得d,最简单的方法是将N分解为p和q,这样她可以得到同余方程d× e≡ 1 (mod (p-1)(q-1))并解出d,然后代入解密公式
导出n(破密)。
但至今为止还没有人找到一个多項式時間的算法来分解一个大的整数的因子,同时也还没有人能够证明这种算法不存在(见因数分解)。
至今为止也没有人能够证明对N进行因数分解是唯一的从c导出n的方法,但今天还没有找到比它更简单的方法。
(至少没有公开的方法。
)
因此今天一般认为只要N足够大,那么駭客就没有办法了。
假如N的长度小于或等于256位,那么用一台个人电脑在几个小时内就可以分解它的因子了。
1999年,数百台电脑合作分解了一个512位长的N。
今天对N的要求是它至少要1024位长。
1994年彼得·秀爾(Peter Shor)证明一台量子计算机可以在多項式時間内进行因数分解。
假如量子计算机有朝一日可以成为一种可行的技术的话,那么秀爾的算法可以淘汰RSA和相关的衍生算法。
(即依赖于分解大整数困难性的加密算法)
假如有人能够找到一种有效的分解大整数的算法的话,或者假如量子计算机可行的话,那么在解密和制造更长的钥匙之间就会展开一场竞争。
但从原理上来说RSA在这种情况下是不可靠的。
实现细节
密钥生成
首先要使用概率算法来验证随机产生的大的整数是否質数,这样的算法比较快而且可以消除掉大多数非質数。
假如有一个数通过了这个测试的话,那么要使用一个精确的测试来保证它的确是一个質数。
除此之外这样找到的p和q还要满足一定的要求,首先它们不能太靠近,此外p-1或q-1的因子不能太小,否则的话N也可以被很快地分解。
此外寻找質数的算法不能给攻击者任何信息,这些質数是怎样找到的,尤其产生随机数的软件必须非常好。
要求是随机和不可预测。
这两个要求并不相同。
一个随机过程可能可以产生一个不相关的数的系列,但假如有人能够预测出(或部分地预测出)这个系列的话,那么它就已经不可靠了。
比如有一些非常好的随机数算法,但它们都已经被发表,因此它们不能被使用,因为假如一个攻击者可以猜出p和q一半的位的话,那么他们就已经可以轻而易举地推算出另一半。
此外密钥d必须足够大,1990年有人证明假如p大于q而小于2q(这是一个很经常的情况)而d < N1/4/3,那么从N and e可以很有效地推算出d。
此外e = 2永远不应该被使用。
速度
比起DES和其它对称算法来RSA要慢得多。
实际上Bob一般使用一种对称算法来加密他的信息,然后用RSA来加密他的比较短的对称密码,然后将用RSA加密的对称密码和用对称算法加密的消息送给Alice。
这样一来对随机数的要求就更高了,尤其对产生对称密码的要求非常高,因为否则的话可以越过RSA来直接攻击对称密码。
密钥分配
和其它加密过程一样,对RSA来说分配公钥的过程是非常重要的。
分配公钥的过程必须能够抵挡一个从中取代的攻击。
假设娥妹交给巴哥一个公钥,并使巴哥相信这是阿黄的公钥,并且她可以截下阿黄和巴哥之间的信息传递,那么她可以将她自己的公钥传给巴哥,巴哥以为这是阿黄的公钥。
可以将所有巴哥传递给阿黄的消息截下来,将这个消息用她自己的密钥解密,读这个消息,然后将这个消息再用阿黄的公钥加密后传给阿黄。
理论上阿黄和巴哥都不会发现娥妹在偷听他们的消息。
今天人们一般用数字认证来防止这样的攻击。
时间攻击
1995年有人提出了一种非常意想不到的攻击方式:假如娥妹对阿黄的硬件有充分的了解,而且知道它对一些特定的消息加密时所需要的时间的话,那么她可以很快地推导出d。
這種攻擊方式之所以會成立,主要是因為在進行加密時所進行的模指數運算是一個位元一個位元進行的,而位元為1所花的運算比位元為0的運算要多很多,因此若能得到多組訊息與其加密時間,就會有機會可以反推出私鑰的內容。
典型密钥长度
1997年后开发的系统,用户应使用1024位密钥,证书认证机构应用2048位或以上。
已公开的或已知的攻击方法
针对RSA最流行的攻击一般是基于大数因数分解。
1999年,RSA-155(512 bits)被成功分解,花了五个月时间(约8000 MIPS 年)和224 CPU hours 在一台有3.2G中央内存的Cray C916计算机上完成。
2002年,RSA-158也被成功因数分解。
RSA-158表示如下:
395058745832651445264197678006144819960207764603049364541393760515793 55626529450683609 727842468219535093544305870490251995655335710209799226484977949442955 603
= 338849583746672139436839320467218152281583036860499304808492584055528
1177×
116588234066712599031483765583832708181310122581463926004395209941313 44334162924536139
2009年12月12日,编号为 RSA-768 (768 bits, 232 digits)数也被成功分解[1]。
这一事件威胁了现通行的1024-bit密钥的安全性,普遍认为用户应尽快升级到
2048-bit或以上。
RSA-768表示如下:
123018668453011775513049495838496272077285356959533479219732245215172 640050726 365751874520219978646938995647494277406384592519255732630345373154826 850791702 612214291346167042921431160222124047927473779408066535141959745985690 2143413
= 334780716989568987860441698482126908177047949837137685689124313889828
83793878002287614711652531743087737814467999489×
367460436667995904282446337996279526322791581643430876426760322838157 39666511279233373417143396810270092798736308917。