RSA加密算法——密码学笔记(四)
一、數(shù)學知識
1.?質(zhì)數(shù)
質(zhì)數(shù),又稱素數(shù),指在一個大于1的自然數(shù)中,除了1和此整數(shù)自身外,不能被其他自然數(shù)整除的數(shù)。
2. 互質(zhì)數(shù)
百度百科上的解釋是:公因數(shù)只有1的兩個數(shù),叫做互質(zhì)數(shù)。
維基百科上的解釋是:互質(zhì),又稱互素。若N個整數(shù)的最大公因子是1,則稱這N個整數(shù)互質(zhì)。
常見的互質(zhì)數(shù)判斷方法主要有以下幾種:
兩個不同的質(zhì)數(shù)一定是互質(zhì)數(shù)。例如,2與7、13與19。
一個質(zhì)數(shù),另一個不為它的倍數(shù),這兩個數(shù)為互質(zhì)數(shù)。例如,3與10、5與 26。
相鄰的兩個自然數(shù)是互質(zhì)數(shù)。如 15與 16。
相鄰的兩個奇數(shù)是互質(zhì)數(shù)。如 49與 51。
較大數(shù)是質(zhì)數(shù)的兩個數(shù)是互質(zhì)數(shù)。如97與88。
小數(shù)是質(zhì)數(shù),大數(shù)不是小數(shù)的倍數(shù)的兩個數(shù)是互質(zhì)數(shù)。例如 7和 16。
2和任何奇數(shù)是互質(zhì)數(shù)。例如2和87。
1不是質(zhì)數(shù)也不是合數(shù),它和任何一個自然數(shù)在一起都是互質(zhì)數(shù)。如1和9908。
輾轉(zhuǎn)相除法。
3.?模運算
模運算:即求余運算,“模”是“mod”的音譯。和模運算緊密相關的一個概念是“同余”,當兩個整數(shù)除以同一個正整數(shù),若得相同余數(shù),則稱這兩個整數(shù)同余。
如:兩個整數(shù)a、b,若它們除以正整數(shù)m所得的余數(shù)相同,則稱a、b對于模m同余,記為a=b(mod m),讀為a與b關于模m同余。例如26=14(mod 12)
二、RSA加密算法原理
1. RSA加密
通式:?
即RSA加密就是對明文進行E次方后除以N后求余數(shù)的過程。其中,E是加密(Encryption)的首字母,N是數(shù)字(Number)的首字母。
由此可知,只要知道E、N就可以進行RSA加密,所以說E、N就是RSA加密的密鑰,E和N的組合就是公鑰,記為
公鑰=(E,N)
2.?RSA解密
通式:
即RSA解密就是對密文進行D次方除以N后求余數(shù)的過程。其中,D是解密(Decryption)的首字母。
由此可知,只要知道D、N就可以進行RSA解密,所以說D、N就是RSA解密的密鑰,D和N的組合就是私鑰,記為
3. 生成密鑰對
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 密鑰對=(E,D,N)
(1)求N
準備兩個質(zhì)數(shù)p、q(注意不能太小,否則容易破解),求
N=p*q
(2)求E
建立一個中間數(shù)L,使得L是p-1和q-1的最小公倍數(shù),即
L=(p-1)*(q-1)
滿足以下兩個條件的數(shù)即為E:
gcd(E,L)=1
其中,需要滿足E和L的最大公約數(shù)為1是為了保證一定存在D。
(3)求D
滿足以下兩個條件的數(shù)即為D:
E*D mod L?=?1或E*D=1 (mod L)
E*D mod L=1D等價于E*D-1=kL,k為常數(shù),由此可解出D。
密鑰對的求法 | |
求N | N=p*q;p,q為質(zhì)數(shù),且p不等于q |
求L | L=(p-1)(q-1) |
求E | 1 < E < L,gcd(E,L)=1;E,L最大公約數(shù)為1(E和L互質(zhì)) |
求D | 1 < D < L,E*D mod L = 1 |
假設Alice想要通過一個不可靠的媒體接收Bob的一條私人訊息。她以以上的方式來產(chǎn)生一個公鑰和一個私鑰:
(1)隨意選擇兩個大的質(zhì)數(shù)p和q,p不等于q,計算N=p*q。比如選取61和53,則N=61*53=3233,化為二進制則是110010100001,一共12位,所以這個密鑰就是12位,實際應用中,RSA密鑰一般是1024位,重要場合則是2048位。
(2)求得L?=lcm(p-1,q-1)
(3)求E:1 < E < L,gcd(E,L)=1(即L和E互質(zhì))
(4)求D:1 < D < L,E*D mod L = 1
(5)將 p 和 q 的記錄銷毀,得到公鑰=(E,N),私鑰=(D,N),Alice將她的公鑰傳給Bob,而將她的私鑰藏起來。
假設Bob想給Alice送一個消息m,他知道Alice產(chǎn)生的N和E,就以下加密通式對明文進行加密,得到密文后就傳遞給Alice:
Alice得到Bob發(fā)送過來的密文后就可以利用以下解密通式,結(jié)合自己保存的密鑰來進行解密:
RSA也可以用來為一個消息署名。假如甲想給乙傳遞一個署名的消息的話,那么她可以為她的消息計算一個散列值(Message digest),然后用她的密鑰(private key)加密這個散列值并將這個“署名”加在消息的后面。這個消息只有用她的公鑰才能被解密。乙獲得這個消息后可以用甲的公鑰解密這個散列值,然后將這個數(shù)據(jù)與他自己為這個消息計算的散列值相比較。假如兩者相符的話,那么他就可以知道發(fā)信人持有甲的密鑰,以及這個消息在傳播路徑上沒有被篡改過。 ?
三、RSA加密算法的特點
1. RSA算法的特點
這種算法非常可靠,密鑰越長,它就越難破解。根據(jù)已經(jīng)披露的文獻,目前被破解的最長RSA密鑰是768個二進制位。也就是說,長度超過768位的密鑰,還無法破解(至少沒人公開宣布)。因此可以認為,1024位的RSA密鑰基本安全,2048位的密鑰極其安全。
2. RSA加密算法的安全性
已知公鑰=(E,N)公開,私鑰=(D,N)保密,假設在已知E,N的情況下,能否推出D?
分析:
(1)由E*D mod L=1可知,只有知道E和L,才能算出D。
(2)由L=lcm(p-1,q-1)可知,只有知道p和q,才能算出L。
(3)由N=p*q可知,在知道N的情況下,只有將N因數(shù)分解,才能算出p和q。
結(jié)論:若N可以被因數(shù)分解,D就可以被算出,即私鑰被破解。由于對極大整數(shù)進行因數(shù)分解的難度很大,這就決定了RSA算法的安全性。
當p和q是一個大素數(shù)的時候,從它們的積pq去分解因子p和q,這是一個公認的數(shù)學難題。然而,雖然RSA的安全性依賴于大數(shù)的因子分解,但并沒有從理論上證明破譯RSA的難度與大數(shù)分解難度等價。
1994年彼得·秀爾(Peter Shor)證明一臺量子計算機可以在多項式時間內(nèi)進行因數(shù)分解。假如量子計算機有朝一日可以成為一種可行的技術的話,那么秀爾的算法可以淘汰RSA和相關的衍生算法。(即依賴于分解大整數(shù)困難性的加密算法)
另外,假如N的長度小于或等于256位,那么用一臺個人電腦在幾個小時內(nèi)就可以分解它的因子了。1999年,數(shù)百臺電腦合作分解了一個512位長的N。1997年后開發(fā)的系統(tǒng),用戶應使用1024位密鑰,證書認證機構(gòu)應用2048位或以上。
3. RSA加密算法的缺點
雖然RSA加密算法作為目前最優(yōu)秀的公鑰方案之一,在發(fā)表三十多年的時間里,經(jīng)歷了各種攻擊的考驗,逐漸為人們接受。但是,也不是說RSA沒有任何缺點。由于沒有從理論上證明破譯RSA的難度與大數(shù)分解難度的等價性。所以,RSA的重大缺陷是無法從理論上把握它的保密性能如何。在實踐上,RSA也有一些缺點:
(1)產(chǎn)生密鑰很麻煩,受到素數(shù)產(chǎn)生技術的限制,因而難以做到一次一密;
(2)分組長度太大,為保證安全性,n 至少也要 600 bits 以上,使運算代價很高,尤其是速度較慢。 ? ??
總結(jié)
以上是生活随笔為你收集整理的RSA加密算法——密码学笔记(四)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基础知识——密码学笔记(一)
- 下一篇: 序列密码体制——密码学笔记(三)