1. 程式人生 > >RSA加密

RSA加密

計算機 美國 科學家 加密 如何

RSA背景

在1976年以前,傳統的加解密過程是:

1、A采用某種手段對數據進行加密。

2、數據傳輸到B的手中。

3、B逆向的實施A加密采用的步驟。

4、數據被還原。

這就是所謂的對稱加密。

解密和加密的互為彼此的逆過程。加密的人必定知道解密的手段。解密的人也必定知道加密的手段。

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

這就造成兩個問題:

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

2、如何安全的保存加解密規則。因為只要有一方將加解密規則泄露。那麽這種加密手段就可以說被破解了。

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

的形式進行加解密。

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

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

3、加密方使用公鑰將文件轉為密文

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

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

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

受這種思路的啟發,在次年,也就是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位,就可以說很難破解了。(但是據說量子計算機非常適合於計算因式分解,可惜現在還是雛形)

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

1、將原始信息轉化為數字:無論是ascii碼值,還是Unicode碼,或者是其他base64轉碼等等,生成數字序列之後。依次循環按照下文進行加密:

公鑰(n,e)、原文m

m^e ≡ c (mod n)

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

也就是計算出密文c

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

c^d ≡ m (mod n)公式

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

反向求出m即為明文

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

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

其它

另外最近流行面非常廣的病毒“永恒之藍”,始於歐洲,通過網絡傳播了半個世界的勒索病毒,其核心的思路就是將RSA公鑰傳播到本機,接著用RSA公鑰加密本地文件。使本地文件不可被正常使用,進而勒索機主。待勒索成功後,只要將私鑰文件再發送到本機對文件進行解密即可。思路簡單,但是非常有效,難以破解,每臺機器的私鑰文件也幾乎不會相同。

技術分享


RSA加密