3.2 公開金鑰演算法

xiaohuanglv發表於2018-08-25

3.2.1 兩把鑰匙:公鑰和私鑰

公鑰和私鑰是現代密碼學分支非對稱性加密裡面的名詞,對於一段需要保護的資訊,通常使用公鑰加密,用私鑰解密,這種加密方法也稱為公開金鑰演算法。

在諜戰劇裡,發電報那種一般都是使用對稱加密演算法。這種加密方式缺點是顯而易見的,如果被人知道了金鑰和加密方 法,按照加密方法反著來就能解密。一直到非對稱加密演算法的出現,這種情況才有所改觀。公鑰就是可以對全世界公開的金鑰,比如你和Google通訊時,你可 以使用Google公開提供的1024位的公鑰加密資訊,加密後的密文只有使用Google私藏的私鑰才可以做解密,這就保證了通訊安全。

一般來說,公開金鑰演算法對於大篇幅的原始資料加密的效能不會很高,因此如果是用於大段資料的加密與解密,通常還是會使用強度比較高的對稱加密演算法,而公開金鑰演算法會用於在網路中傳輸對稱加密演算法的金鑰,兩者結合使用,發揮各自的優點。

自從非對稱加密演算法誕生以來,人們發現一些數學函式極其適用於這種演算法,比如橢圓曲線加密演算法。這些數學函式具有 某種困難度:由輸入算輸出很容易,但是從輸出計算輸入則幾乎不可能。比特幣是使用橢圓曲線加密演算法作為公共金鑰編碼的基礎的,事實上在很多區塊鏈系統中都 是使用橢圓曲線加密演算法。

3.2.2 RSA演算法

RSA以它的三個發明者Ron Rivest、Adi Shamir和Leonard Adleman的名字首字母命名。RSA加密演算法是最常見的非對稱加密演算法。它既能用於加密,也能用於數字簽名,是目前最流行的公開金鑰演算法。RSA安全 基於大質數分解的難度,RSA的公鑰和私鑰是一對大質數,從一個公鑰和密文恢復明文的難度,等價於分解兩個大質數之積,這是公認的數學難題。

RSA的安全基於大數的因子分解,但並沒有從理論上證明破譯RSA的難度與大數分解難度等價,RSA的重大缺陷是無法從理論上把握它的保密效能如何。只不過RSA從提出到現在20多年,經歷了各種攻擊的考驗,被普遍認為是目前最優秀的公鑰方案之一。RSA的缺點是:

·產生金鑰很麻煩,受限於質數產生的技術;

·分組長度太大,運算代價高,速度慢。

我們通過一個例子來理解RSA演算法。假設Alice要與Bob進行加密通訊,她該怎麼生成公鑰和私鑰呢?

1)選擇兩個質數。通常是隨機選擇兩個不同的質數,我們不妨稱為p和q,本例中Alice選擇了61和53,當然實際應用中,這兩個質數越大越好,這樣就越難破解。

2)計算p和q的乘積n。Alice把61和53相乘:n=61×53=3233。

n的長度就是金鑰長度,3233寫成二進位制是110010100001,一共有12位,所以這個金鑰就是12位,實際應用中,RSA金鑰一般是1024位,重要場合則為2048位,還是那句話,越長越好。

3)計算n的尤拉函式Φ(n)。

根據公式:φ(n)=(p-1)(q-1),Alice算出φ(3233)等於60×52,即3120,實際上就是兩個質數分別減1後的乘積。

4)選擇一個整數e。

這個整數是隨機選擇的,並且有個條件,條件是1<e<Φ(n),且e與Φ(n)互質。Alice就在1到3120之間,隨機選擇了17,實際應用中,常常選擇65537。

5)計算e對於Φ(n)的模反元素d。

所謂“模反元素”就是指有一個整數d,可以使得e*d被φ(n)除的餘數為1,表示式

如下:

e*d≡1(modφ(n))

這個式子等價於

e*d-1=kφ(n)

於是找到模反元素d,實質上就是對下面這個二元一次方程求解:

e*x+φ(n)y=1

已知e=17,φ(n)=3120,則17x+3120y=1。

這個方程可以用“擴充套件歐幾里得演算法”求解,此處省略具體過程。總之,Alice算出一組整數解為(x,y)=(2753,-15),即d=2753。

6)產生公鑰和私鑰。

將n和e封裝成公鑰,n和d封裝成私鑰,在Alice的例子中,n=3233,e=17,d=2753,所以公鑰就是(3233,17),私鑰就是(3233,2753)。

至此所有計算就完成了,可以看到RSA的演算法過程其實還是很簡單的,最關鍵的就是找到兩個足夠大的質數。

3.2.3 橢圓曲線密碼演算法

橢圓曲線是滿足一個特殊方程的點集,注意,不要跟標準橢圓方程混淆,那根本就是兩回事,看一個標準的橢圓曲線方程:

y2=x3+ax+b

在幾何意義上,它通常是這樣的一個圖形,如下所示:

image.png

如上圖所示,一個橢圓曲線通常是滿足一個變數為2階,另一個變數為3階的二元方程。按照這樣的定義,橢圓曲線是有很多種的,而橢圓曲線密碼演算法是基於橢圓曲線數學的一種公鑰密碼演算法,其主要的安全性在於利用了橢圓曲線離散對數問題的困難性。

在區塊鏈中,常用的是ECDSA(橢圓曲線數字簽名演算法),這是利用橢圓曲線密碼(ECC)對數字簽名演算法 (DSA)的模擬。ECDSA於1999年成為ANSI標準,並於2000年成為IEEE和NIST(美國國家標準與技術研究院)標準。橢圓曲線密碼演算法 實現了資料加解密、數字簽名和身份認證等功能,該技術具有安全性高、生成公私鑰方便、處理速度快和儲存空間小等方面的優勢。相對於RSA演算法,在實際的開 發使用中,橢圓曲線加密使用得更廣泛,比如比特幣就是使用了橢圓曲線中的SECP256k1,可以提供128位的安全保護。橢圓曲線具體的數學原理,其過 程證明比較晦澀枯燥,這裡不再贅述,感興趣的朋友可以去查閱一些相關的數學資料。

來源:我是碼農,轉載請保留出處和連結!

本文連結:http://www.54manong.com/?id=103

'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();

相關文章