1. 程式人生 > >密碼學_RSA演算法原理詳解

密碼學_RSA演算法原理詳解

1.RSA演算法簡介:

      RSA公鑰加密演算法是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。1987年首次公佈,當時他們三人都在麻省理工學院工作。RSA就是他們三人姓氏開頭字母拼在一起組成的。
RSA是目前最有影響力的公鑰加密演算法,它能夠抵抗到目前為止已知的絕大多數密碼攻擊,已被ISO推薦為公鑰資料加密標準。
      今天只有短的RSA鑰匙才可能被強力方式解破。到2008年為止,世界上還沒有任何可靠的攻擊RSA演算法的方式。只要其鑰匙的長度足夠長,用RSA加密的資訊實際上是不能被解破的。但在分散式計算和量子計算機理論日趨成熟的今天,RSA加密安全性受到了挑戰。
      RSA演算法基於一個十分簡單的數論事實:將兩個大質數相乘十分容易,但是想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密金鑰。
(PS. 以上直接複製的百度百科的內容)。

2.RSA演算法原理簡介:


3.RSA演算法原理補充知識:

相信很多同學看了這個原理簡介還是很懵逼的,尤其是一些沒有學過離散數學,對數論沒有一點概念的同學更是如此,小編這裡對這個原理進行詳細的解釋,考慮到很多沒有數論基礎的同學對一些名詞可能會很陌生,以下小編會盡量的用一些通俗的語言對RSA演算法的原理進行一個詳細的解釋。

(1) 尤拉函式:

首先小編介紹尤拉函式,尤拉函式,用φ(n)表示,代表的是從1~n-1中與n互質(公因數只有1)的數的個數。

i) 那麼很顯然,如果n是一個質數,那麼φ(n) = n-1,因為很顯然比n小的數都和n互質。

ii)
如果一個數是一個質數p的冪,即n = p^k,則φ(n) = p^k-p^(k-1) = (p-1)*p^(k-1),證明:n只與是p的倍數的數互質,n = p^k = p*p^(k-1),也就是說在1~n的範圍內有k-1個數是p的倍數,所以φ(n) = p^k-p^(k-1) = (p-1)*p^(k-1)。

iii) 尤拉函式是一個積性函式,當n,m互質的時候,φ(n*m) = φ(n)*φ(m)。

(2) 單位元,逆元:

關於單位元和逆元,這兩個東西是群論中非常重要的兩個關鍵詞,考慮到很多同學沒有學過離散群論,這裡也不太需要,那麼這裡小編也只介紹乘法逆元,以下的單位元就是1,也不再對單位元和逆元最總體的概念做介紹。
首先,如果我們已知A,C,知道A*B = C,那麼我們求B的方法很簡單,就是C/A。但是,如果我們已知A,C,M,知道A*B mod M = C,這個時候求B,我們就不能直接做除法了,因為很顯然,除法是不滿足同餘的,這樣的話我們就需要逆元,假設A關於M的逆元是P,那麼A*P mod M = 1,這就是逆元的概念,相乘對M取模得到的是單位元1,有了逆元P,我們求解B就可以用C*P就可以得到B。

(3) 尤拉-費馬定理:

如果a與n互質,那麼一定有a^φ(n) mod n = 1φ(n)就是前面介紹的尤拉函式。由於尤拉-費馬定理的證明過程比較繁瑣,且內容涉及到的數論知識很多,考慮到很多同學對數論知識瞭解比較少,這裡小編知識給出這個定理的公式,不再給予證明。

4.RSA演算法原理詳解:

在理解了這些補充知識後,現在小編就一步一步的給大家解釋這個原理的詳細過程。 首先,我們隨機選取兩個質數p,q,取N = p*q,根據前面小編介紹到的尤拉函式的性質,因為p,q都為質數,所以其尤拉函式就是(p-1),(q-1),所以φ(N) = (p-1)*(q-1)。接下來我們再選擇一個與φ(N)互質的數e,求出e關於φ(N)的逆元d,那麼這個時候準備工作就好了,把e和N公佈為公鑰,使用者保留d和N作為金鑰。然後就是加密和解密的過程了,設A為我們的明文,C為我們的密文,加密的過程就是C = A^e mod N,解密過程就是A = C^d mod N,關鍵是解密過程可能有些同學會看不懂,小編這裡證明一下,C^d mod N = (A^e)^d mod N = A^(e*d) mod N = A*A^(e*d-1) mod N,證明到這裡需要小編之前介紹到的尤拉-費馬定理和逆元,因為d為e關於φ(N)的逆元,所以e*d mod φ(N) =  1,意思就是說e*d除N餘1,那麼這個式子可以寫成另一種形式:e*d = k*φ(N) + 1(k為常數),所以我們的原式就變成了A*A^(k*φ(N)+1-1) mod N = A*A^(k*φ(N)) mod N = A mod N。 以上就是對RSA原理通俗但是詳細的全部分析詳解(完)                                                                                                      -------by Ra's Al Ghul