1. 程式人生 > >RSA演算法學習

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的計算速度一直是一個詬病。