淺談RSA加密

RSA背景算法

在1976年之前,傳統的加解密過程是:安全

一、A採用某種手段對數據進行加密。網絡

二、數據傳輸到B的手中。加密

三、B逆向的實施A加密採用的步驟。spa

四、數據被還原。code

這就是所謂的對稱加密。blog

解密和加密的互爲彼此的逆過程。加密的人一定知道解密的手段。解密的人也一定知道加密的手段。ci

這種加解密手段的最大特色就是對稱(易於操做),但這也正是它的最大缺點。由於加密方,必須將加密規則告知解密方。get

這就形成兩個問題:博客

一、加解密規則按期就要更新,如何將加解密規則順利的告訴對方。

二、如何安全的保存加解密規則。由於只要有一方將加解密規則泄露。那麼這種加密手段就能夠說被破解了。

基於此,在1976年由兩位美國計算機科學家提出了一種全新的思路("Diffie-Hellman密鑰交換算法"),即採用公鑰-私鑰對的形式進行加解密。

一、解密方生成一對密鑰:公鑰-私鑰對。二者不存在互相推導出彼此的可能。

二、公鑰隨普通網絡到達加密方,私鑰則始終保留在解密者手中。

三、加密方使用公鑰將文件轉爲密文

四、將密文傳輸給解密方。

五、解密方使用私鑰將密文轉爲明文,完成解密。

六、(防盜鏈接:本文首發自http://www.cnblogs.com/jilodream/ )

因爲公鑰和私鑰在邏輯上沒法互相推算出彼此。這樣只要私鑰不被泄露,那麼密文就不會解密。基於此對稱加密的第一個問題的風險被解決,第二個問題的風險被縮小了一半。

受這種思路的啓發,在次年,也就是1977年,由三位數學家(Rivest、Shamir 和 Adleman )聯合發表了RSA算法,算法名稱的來源是三位科學家的首字母的和。在隨後的幾十年,RSA加密算法,在密碼領域中大放異彩,成爲非對稱加密的表明加密算法。而且隨着密鑰長度的不斷增長,以當下的計算機運算水平,是不可能在有限的時間下,暴力破解出密鑰,而攻破該算法的。

RSA加密算法的實現邏輯

在RSA算法中,須要存在五個重要的數字元素:

  p、q:這是隨機選取的兩個不相等質數

  n:n=p*q,也就是p和q的乘積

  φ(n):φ(n) = (p-1)(q-1) ,也就是p-1和q-1的乘積

  e:隨機選取一個和φ(n)互質的正整數。而且保證 e < φ(n)

d:根據ed ≡ 1 (mod φ(n)),計算出對於φ(n)的模反元素d

ed ≡ 1 (mod φ(n)) 的含義是,ed整除φ(n)以後,餘數爲1。

也就是ed=k*φ(n)+1

能夠看做

ed=φ(n)x+1最終利用展轉相除法(看了一下網上的推導邏輯,以爲純數學領域了,純記住意義不大),能夠計算出一組知足的解(d,x)。

這樣(n,e)是公鑰,(n,d)是私鑰。

因爲e,d的推導是依賴的φ(n)的,而φ(n)的值來自於p、q。p、q儘管是隨機取得的,可是能夠由n因式分解而成。所以n的因式分解速度就成爲整個解密的瓶頸。n的因式分解換言之,相似於判斷n是不是質數,目前除去不斷的暴力嘗試,並無好的辦法。目前已知的最大分解數目的量級是10^232,佔768bit位,因此一旦n突破了768位,就能夠說很難破解了。(可是聽說量子計算機很是適合於計算因式分解,惋惜如今仍是雛形)

知道了,公鑰和私鑰的生成後。來看下公鑰私鑰是如何使用的:

一、將原始信息轉化爲數字:不管是ascii碼值,仍是Unicode碼,或者是其餘base64轉碼等等,生成數字序列以後。依次循環按照下文進行加密:

公鑰(n,e)、原文m

m^e ≡ c (mod n)

換言之c等於m^e除以n的餘數

也就是計算出密文c

二、將密文發送給解密者,解密者依次按照下文進行還原

c^d ≡ m (mod n)公式

換言之m等於c^d除以n的餘數

反向求出m即爲明文

證實過程這裏就忽略了,有興趣的能夠看下阮一峯寫的RSA加密博客。裏邊的算式推理比較嚴謹。

此外有一點須要說明的是,在公鑰加密的過程當中,須要m小於n,若是在加密的過程當中,發現有元素比公鑰的n還要大,則須要將原文進行切割成更小的元素,而後再進行加密。

其它

另外最近流行面很是廣的病毒「永恆之藍」,始於歐洲,經過網絡傳播了半個世界的勒索病毒(防盜鏈接:本文首發自http://www.cnblogs.com/jilodream/ ),其核心的思路就是將RSA公鑰傳播到本機,接着用RSA公鑰加密本地文件。使本地文件不可被正常使用,進而勒索機主。待勒索成功後,只要將私鑰文件再發送到本機對文件進行解密便可。(此段文字描述的不清楚,請看以下流程圖)思路簡單,可是很是有效,難以破解,每臺機器的私鑰文件也幾乎不會相同。

相關文章
相關標籤/搜索