3.2 公開金鑰演算法
公鑰和私鑰是現代密碼學分支非對稱性加密裡面的名詞,對於一段需要保護的資訊,通常使用公鑰加密,用私鑰解密,這種加密方法也稱為公開金鑰演算法。
在諜戰劇裡,發電報那種一般都是使用對稱加密演算法。這種加密方式缺點是顯而易見的,如果被人知道了金鑰和加密方 法,按照加密方法反著來就能解密。一直到非對稱加密演算法的出現,這種情況才有所改觀。公鑰就是可以對全世界公開的金鑰,比如你和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
在幾何意義上,它通常是這樣的一個圖形,如下所示:
如上圖所示,一個橢圓曲線通常是滿足一個變數為2階,另一個變數為3階的二元方程。按照這樣的定義,橢圓曲線是有很多種的,而橢圓曲線密碼演算法是基於橢圓曲線數學的一種公鑰密碼演算法,其主要的安全性在於利用了橢圓曲線離散對數問題的困難性。
在區塊鏈中,常用的是ECDSA(橢圓曲線數字簽名演算法),這是利用橢圓曲線密碼(ECC)對數字簽名演算法 (DSA)的模擬。ECDSA於1999年成為ANSI標準,並於2000年成為IEEE和NIST(美國國家標準與技術研究院)標準。橢圓曲線密碼演算法 實現了資料加解密、數字簽名和身份認證等功能,該技術具有安全性高、生成公私鑰方便、處理速度快和儲存空間小等方面的優勢。相對於RSA演算法,在實際的開 發使用中,橢圓曲線加密使用得更廣泛,比如比特幣就是使用了橢圓曲線中的SECP256k1,可以提供128位的安全保護。橢圓曲線具體的數學原理,其過 程證明比較晦澀枯燥,這裡不再贅述,感興趣的朋友可以去查閱一些相關的數學資料。
來源:我是碼農,轉載請保留出處和連結!
本文連結:http://www.54manong.com/?id=103
相關文章
- 公開金鑰演算法-RSA-note演算法
- RSA公開金鑰系統
- 金鑰,私鑰,公鑰的區分
- SSH-keygen rsa 金鑰對根據私鑰生成公鑰
- C#和JAVA的RSA金鑰、公鑰轉換C#Java
- 關於https 證明公開金鑰正確性的證書HTTP
- 公鑰私鑰
- Diffie-Hellman金鑰協商演算法演算法
- 圖解 ECDHE 金鑰交換演算法圖解演算法
- 非對稱加密演算法RSA中的公鑰和私鑰加密演算法
- office 2010 金鑰 office 2010永久的金鑰
- vmware金鑰最新版 vmware金鑰大全
- C# Rsa加密(私鑰加密、公鑰解密、金鑰格式轉換、支援超大長度分段加密)C#加密解密
- 谷歌雙因素驗證金鑰套裝公開發售 現價50美元谷歌
- 惡意軟體開發者公佈金鑰並宣佈退出江湖
- Nodejs進階:使用DiffieHellman金鑰交換演算法NodeJS演算法
- easywechat 對接企業打款到銀行卡金鑰引數不是有效的公鑰
- server2003安裝金鑰 server金鑰序列號Server
- office產品金鑰大全 office產品金鑰分享
- vs2015金鑰專業版企業版金鑰大全 visual studio產品金鑰2015
- openSSL生成公鑰和私鑰
- 公鑰密碼學演算法型別綜述密碼學演算法型別
- bandizip註冊產品金鑰 bandizip金鑰使用步驟
- bitlocker如何恢復金鑰 bitlocker恢復金鑰的方法
- 橢圓曲線加密演算法中公鑰與私鑰互換性分析加密演算法
- php使用openssl生成公鑰私鑰PHP
- 私鑰與公鑰有何不同?
- SSH 公鑰私鑰的生成管理
- 生成 Git 公鑰Git
- 本地金鑰的安全
- oracle 隱式金鑰Oracle
- gitlab配置ssh金鑰Gitlab
- 生成RSA金鑰對
- 【ubuntu】金鑰儲存在過時的 trusted.gpg 金鑰環中UbuntuRust
- vs2012產品金鑰最新 vs2012金鑰使用教程
- git生成ssh金鑰詳細步驟 git如何生成ssh金鑰Git
- 使用openssl生成rsa公鑰和私鑰
- OpenSSL 公鑰私鑰加解密封裝解密封裝