RSA演算法學習
一、 RSA密碼體制背景
以前的加密都是對稱性加密(Symmetric-key algorithm),即加密規則和解密規則相同。
這種加密最大的缺點就是對應的規則需要告訴其他人,否則無法解密。儲存和傳遞這個規則是個難題。1974年瑞夫·墨克(Ralph C. Merkle)提出了一種新的構想:可以公開加密規則,然後可以在不傳遞解密規則的情況下完成解密。1976年惠特菲爾德·迪菲(BaileyWhitfield Diffie)和馬丁·赫爾曼(MartinEdward Hellman)找到一種演算法實現了這種構思。這個方法稱為Diffie–Hellman–Merkle金鑰交換。在Diffie 和Hellman 提出公鑰密碼體制的設想後,Merkle 和Hellman 首先共同提出MH 揹包公鑰加密體制後, 隨後Rivest、Shamir、Adleman聯合提出RSA公鑰加密體制。
二、 RSA加解密過程
1. 金鑰生成過程
(1) 選取兩個安全大素數p和q(“大”指其長度要足夠長,目前推薦長度至少為1024位元)
(2) 計算乘積n=p*q, ,其中 為n的尤拉函式;
(3) 隨機選取整數e (1<e< )作為公鑰,要求滿足gcd(e, ) = 1,即e與 互素;
(4) 用Euclid擴充套件演算法計算私鑰d,以滿足d*e ,即d ,則e和n是公鑰,d是私鑰。
注意加解密演算法中的兩個素數p和q不再需要,可以銷燬。
2.加密過程
加密時首先將明文位元串分組,使得每個分組對應的十進位制數小於n,即分組長度小於log2n。然後對每個明文m,作加密運算:c≡ (mod n)明文要求:小於n的正整數
3.解密過程
對密文分組的解密運算為:m≡ (mod n)
三、 RSA數論基礎
1.單向陷門函式
RSA加密體制與陷門單向函式有關,要滿足上述公鑰加密體制的要求,最終可以歸結為設計一個單向陷門函式。單向陷門函式滿足下列條件:
(1) 正向計算容易,即如果知道金鑰k 和訊息 ;
(2) 在不知道金鑰S 的情況下,方向計算不可行,即如果只知道加密後的訊息C而不知道金鑰S, 則計算 不可行;
(3) 在知道金鑰S的情況下,反向計算容易,即如果同時知道加密後的訊息C和金鑰S,則計算 是容易額,這裡的金鑰S 相當於陷門,他和P配對使用。
2.演算法正確性
有公式 :
四、RSA例項
設接受方B選擇p = 43,q = 59, e = 13,傳送方A有訊息m = cyber,按英文字母表順序a = 00, b =01……z=25進行編碼。A欲用RSA公鑰體制加密後傳送給B,求B的私鑰並描述加解密過程
金鑰生成:n = p * q = 3 * 59 = 2537,
e =13, 則根據d = ,得 d = 937
則公鑰(n = 2537, e = 13), 私鑰d = 937
A的加密過程:先將訊息分塊為cy,be,r
分組明文:cy = 0224 be =0104 r = 17
利用公鑰(n = 2537, e =13)和加密演算法c = 進行加密
對第一個分組m的加密過程為
C2 =
C3 =
解密過程:解密訊息時用私鑰d = 937 和解密演算法 m 進行解密,對第一組密文c1
解密過程: ,0224對應明文分組為m1 = cy,
以密文c1對應的明文為cy
同理可得其他明文, 最終明文為 cyber
五、RSA侷限性(攻擊方法)
RSA系統是第一個將安全性植基於因子分解的系統。很明顯地,在公開金鑰(e,N)中,若N能被因子分解,則在模N中所有元素價的最小公倍數(即所謂陷門)T=φ(N)=(p-1)(q-1)即無從隱藏。使得解密金鑰d不再是祕密,進而整個RSA系統即不安全。雖然迄今人們尚無法“證明”,破解RSA系統等於因子分解。但一般“相信”RSA系統的安全性,等價於因子分解。即:若能分解因子N,即攻破RSA系統;
若能攻破RSA系統,即分解因子N(相信,但未證明)
因此,在使用RSA系統時,對於公開金鑰N的選擇非常重要。必須使得公開N後,任何人無法從N得到T。此外,對於公開金鑰e與解密金鑰d,亦需有所限制。否則在使用上可能會導致RSA系統被攻破,或應用在密碼協議上不安全。
經過分析,我們知道RSA系統安全性與系統的引數有很大關係,X.931標準對此提出以下幾點:
如果公鑰e是奇數,e應與p-1,q-1互質;
如果公鑰e是偶數,e必須與(p-1)/2,(q-1)/2互質,且poq mod 8不成立;
模數的長應該為1024+256x,x=0,1 ;
質數p,q應通過質數檢測,使出錯的概率小於;
p-1,q-1,p+1,q+1應有大質數因子;
gcd(p-1,q-1)應該小;
p/q不應靠近兩個小整數比值,且 ;
|p-q|應有大質數因子。(來源與《現代密碼學》)
六、 學習問題
1. 對於RSA的侷限性中的引數選擇問題的理解較難以接受,
2. 對於RSA安全問題比較燒腦:
(1) 二次篩法:
(2) 共模攻擊
(3) 低指數攻擊
3. 對於尤拉函式的分解素數
RSA是非對稱密碼體制,是基於大數分解困難的數學難題所構建起來的密碼體制。因為安全性的原因。其次RSA的攻擊方法其實是有很多的,比如廣為流傳的:二次篩法分解因子,共模攻擊分解模式n,低指數攻擊獲取金鑰,連分式攻擊獲得n的尤拉函式值。這些攻擊方法使得RSA的安全金鑰大大增加至少1024位以上。但是這又帶來了其他難題,RSA的乘法和模運算,其實是加大了計算的難度,因為若要保證RSA的安全是要使金鑰長度達到1024位,試想進行1024次方的大數計算,這是十分消耗時間的,但是我們又不能降低金鑰長度來加快速度。所以RSA的計算速度一直是一個詬病。