公鑰加密演算法
在區塊鏈中,一般使用兩種主要的加密演算法:
- 公鑰/私鑰加密演算法:這種加密演算法使用一對公鑰和私鑰。公鑰可以公開分發,而私鑰需要保密。只有擁有私鑰的人才能解密使用公鑰加密的數據。這種加密方法被廣泛用於數字簽名和身份驗證,因為它可以確認數據的來源和完整性。在區塊鏈中,私鑰用於確認交易者的身份,而公鑰則被廣播給網路中的其他節點以驗證交易的有效性。
- RSA演算法:這是一種常用的公鑰/私鑰加密演算法,由Ron Rivest、Adi Shamir 和 Leonard Adleman於1978年發明。它是一種非對稱加密演算法,也就是說,用於加密的密鑰和用於解密的密鑰是不同的。
- ECDSA(橢圓曲線數字簽名演算法):這是一種基於RSA演算法的改進版,使用橢圓曲線密碼學,使得簽名過程更快速且更安全。在區塊鏈中,ECDSA被用於驗證交易的數字簽名。
拓展知識:
哈希函數是一種將任意長度的數據(如文本、數字等)轉換為固定長度(通常為256位或512位)的摘要的方法。它們非常快且非常安全,因為改變數據中的一小部分(即使是微小的改變)會導致哈希結果的變化非常大,甚至不可逆。這種特性使得哈希函數在區塊鏈中被廣泛使用,如區塊的merkle樹結構、交易的數字簽名以及密碼學錢包的存儲等。
比特幣區塊鏈主要使用SHA-256作為其哈希函數,這是由David Chaum和Mayra P. Chilomchik在1997年引入的一種演算法。SHA-256提供了一種非常安全的方式來創建區塊鏈並確保交易的安全性。此外,區塊鏈中的Merkle樹結構也是基於SHA-256的哈希函數來創建的。
以上兩種加密演算法和哈希函數在區塊鏈中都扮演著非常重要的角色,它們保證了交易的安全性、完整性和匿名性,同時也確保了區塊鏈網路的去中心化和不可篡改性。
同時,由於區塊鏈中的數據是以區塊的形式不斷增長的,這些加密演算法還被用於創建區塊頭和區塊間的鏈接,進一步提高了區塊鏈的性能和安全性。
B. 圖文徹底搞懂非對稱加密(公鑰密鑰)
前文詳細講解了對稱加密及演算法原理。那麼是不是對稱加密就萬無一失了呢?對稱加密有一個天然的缺點,就是加密方和解密方都要持有同樣的密鑰。你可以能會提出疑問:既然要加、解密,當然雙方都要持有密鑰,這有什麼問題呢?別急,我們繼續往下看。
我們先看一個例子,小明和小紅要進行通信,但是不想被其他人知道通信的內容,所以雙方決定採用對稱加密的方式。他們做了下面的事情:
1、雙方商定了加密和解密的演算法
2、雙方確定密鑰
3、通信過程中採用這個密鑰進行加密和解密
這是不是一個看似完美的方案?但其中有一個步驟存在漏洞!
問題出在步驟2:雙方確定密鑰!
你肯定會問,雙方不確定密鑰,後面的加、解密怎麼做?
問題在於確定下來的密鑰如何讓雙方都知道。密鑰在傳遞過程中也是可能被盜取的!這里引出了一個經典問題:密鑰配送問題。
小明和小紅在商定密鑰的過程中肯定會多次溝通密鑰是什麼。即使單方一次確定下來,也要發給對方。加密是為了保證信息傳輸的安全,但密鑰本身也是信息,密鑰的傳輸安全又該如何保證呢?難不成還要為密鑰的傳輸再做一次加密?這樣不就陷入了死循環?
你是不是在想,密鑰即使被盜取,不還有加密演算法保證信息安全嗎?如果你真的有這個想法,那麼趕緊復習一下上一篇文章講的杜絕隱蔽式安全性。任何演算法最終都會被破譯,所以不能依賴演算法的復雜度來保證安全。
小明和小紅現在左右為難,想加密就要給對方發密鑰,但發密鑰又不能保證密鑰的安全。他們應該怎麼辦呢?
有如下幾種解決密鑰配送問題的方案:
非對稱加密也稱為公鑰密碼。我更願意用非對稱加密這種叫法。因為可以體現出加密和解密使用不同的密鑰。
對稱加密中,我們只需要一個密鑰,通信雙方同時持有。而非對稱加密需要4個密鑰。通信雙方各自准備一對公鑰和私鑰。其中公鑰是公開的,由信息接受方提供給信息發送方。公鑰用來對信息加密。私鑰由信息接受方保留,用來解密。既然公鑰是公開的,就不存在保密問題。也就是說非對稱加密完全不存在密鑰配送問題!你看,是不是完美解決了密鑰配送問題?
回到剛才的例子,小明和下紅經過研究發現非對稱加密能解決他們通信的安全問題,於是做了下面的事情:
1、小明確定了自己的私鑰 mPrivateKey,公鑰 mPublicKey。自己保留私鑰,將公鑰mPublicKey發給了小紅
2、小紅確定了自己的私鑰 hPrivateKey,公鑰 hPublicKey。自己保留私鑰,將公鑰 hPublicKey 發給了小明
3、小明發送信息 「周六早10點soho T1樓下見」,並且用小紅的公鑰 hPublicKey 進行加密。
4、小紅收到信息後用自己的私鑰 hPrivateKey 進行解密。然後回復 「收到,不要遲到」 並用小明的公鑰mPublicKey加密。
5、小明收到信息後用自己的私鑰 mPrivateKey 進行解密。讀取信息後心裡暗想:還提醒我不遲到?每次遲到的都是你吧?
以上過程是一次完整的request和response。通過這個例子我們梳理出一次信息傳輸的非對稱加、解密過程:
1、消息接收方准備好公鑰和私鑰
2、私鑰接收方自己留存、公鑰發布給消息發送方
3、消息發送方使用接收方公鑰對消息進行加密
4、消息接收方用自己的私鑰對消息解密
公鑰只能用做數據加密。公鑰加密的數據,只能用對應的私鑰才能解密。這是非對稱加密的核心概念。
下面我用一個更為形象的例子來幫助大家理解。
我有下圖這樣一個信箱。
由於我只想接收我期望與之通信的朋友信件。於是我在投遞口加了一把鎖,這把鎖的鑰匙(公鑰)我可以復制n份,發給我想接受其信件的人。只有這些人可以用這把鑰匙打開寄信口,把信件投入。
相信通過這個例子,可以幫助大家徹底理解公鑰和私鑰的概念。
RSA 是現在使用最為廣泛的非對稱加密演算法,本節我們來簡單介紹 RSA 加解密的過程。
RSA 加解密演算法其實很簡單:
密文=明文^E mod N
明文=密文^D mod N
RSA 演算法並不會像對稱加密一樣,用玩魔方的方式來打亂原始信息。RSA 加、解密中使用了是同樣的數 N。公鑰是公開的,意味著 N 也是公開的。所以私鑰也可以認為只是 D。
我們接下來看一看 N、E、D 是如何計算的。
1、求 N
首先需要准備兩個很大質數 a 和 b。太小容易破解,太大計算成本太高。我們可以用 512 bit 的數字,安全性要求高的可以使用 1024,2048 bit。
N=a*b
2、求 L
L 只是生成密鑰對過程中產生的數,並不參與加解密。L 是 (a-1) 和 (b-1) 的最小公倍數
3、求 E(公鑰)
E 有兩個限制:
1<E<
E和L的最大公約數為1
第一個條件限制了 E 的取值范圍,第二個條件是為了保證有與 E 對應的解密時用到的 D。
4、求 D(私鑰)
D 也有兩個限制條件:
1<D<L
E*D mod L = 1
第二個條件確保密文解密時能夠成功得到原來的明文。
由於原理涉及很多數學知識,這里就不展開細講,我們只需要了解這個過程中用到這幾個數字及公式。這是理解RSA 安全性的基礎。
由於 N 在公鑰中是公開的,那麼只需要破解 D,就可以解密得到明文。
在實際使用場景中,質數 a,b 一般至少1024 bit,那麼 N 的長度在 2048 bit 以上。D 的長度和 N 接近。以現在計算機的算力,暴力破解 D 是非常困難的。
公鑰是公開的,也就是說 E 和 N 是公開的,那麼是否可以通過 E 和 N 推斷出 D 呢?
E*D mod L = 1
想要推算出 D 就需要先推算出 L。L 是 (a-1) 和 (b-1) 的最小公倍數。想知道 L 就需要知道質數 a 和 b。破解者並不知道這兩個質數,想要破解也只能通過暴力破解。這和直接破解 D 的難度是一樣的。
等等,N 是公開的,而 N = a*b。那麼是否可以對 N 進行質因數分解求得 a 和 b 呢?好在人類還未發現高效進行質因數分解的方法,因此可以認為做質因數分解非常困難。
但是一旦某一天發現了快速做質因數分解的演算法,那麼 RSA 就不再安全
我們可以看出大質數 a 和 b 在 RSA 演算法中的重要性。保證 a 和 b 的安全也就確保了 RSA 演算法的安全性。a 和 b 是通過偽隨機生成器生成的。一旦偽隨機數生成器的演算法有問題,導致隨機性很差或者可以被推斷出來。那麼 RSA 的安全性將被徹底破壞。
中間人攻擊指的是在通信雙方的通道上,混入攻擊者。他對接收方偽裝成發送者,對放送放偽裝成接收者。
他監聽到雙方發送公鑰時,偷偷將消息篡改,發送自己的公鑰給雙方。然後自己則保存下來雙方的公鑰。
如此操作後,雙方加密使用的都是攻擊者的公鑰,那麼後面所有的通信,攻擊者都可以在攔截後進行解密,並且篡改信息內容再用接收方公鑰加密。而接收方拿到的將會是篡改後的信息。實際上,發送和接收方都是在和中間人通信。
要防範中間人,我們需要使用公鑰證書。這部分內容在下一篇文章里會做介紹。
和對稱加密相比較,非對稱加密有如下特點:
1、非對稱加密解決了密碼配送問題
2、非對稱加密的處理速度只有對稱加密的幾百分之一。不適合對很長的消息做加密。
3、1024 bit 的 RSA不應該在被新的應用使用。至少要 2048 bit 的 RSA。
RSA 解決了密碼配送問題,但是效率更低。所以有些時候,根據需求可能會配合使用對稱和非對稱加密,形成混合密碼系統,各取所長。
最後提醒大家,RSA 還可以用於簽名,但要注意是私鑰簽名,公鑰驗簽。發信方用自己的私鑰簽名,收信方用對方公鑰驗簽。關於簽名,後面的文章會再詳細講解。
C. 公開密鑰密碼體系公開密鑰演算法
公開密鑰密碼體系是密碼學領域中的一種重要技術,它基於數學難題來確保安全。該體系由迪菲和赫爾曼於1976年首次提出,但最流行的RSA演算法則由Rivest、Shamir和Adleman在1977年共同開發。RSA演算法使用一對密鑰:一個公共密鑰和一個專用密鑰。用戶需保護專用密鑰的安全,而公共密鑰則可公開發布。這一特性使得公鑰加密演算法無需聯機密鑰伺服器,簡化了密鑰管理。
公鑰加密演算法也稱非對稱密鑰演算法,與傳統的對稱密鑰密碼體制不同,它要求密鑰成對出現,一個用於加密,另一個用於解密,且從一個無法推導出另一個。多數公鑰演算法的安全基礎基於一些數學難題,如因子分解問題,專家們認為短期內無法解決。由於這些難題的存在,使得公鑰演算法具有較高的安全性。
RSA公鑰加密演算法是最廣泛使用的公鑰演算法之一,它使用兩個密鑰進行加密和解密,其中一個是公共密鑰,另一個是專用密鑰。RSA演算法的安全性取決於密鑰的長度,通常密鑰長度從40位到2048位不等。隨著密鑰長度的增加,加密效果越好,但加密解密的開銷也更大。因此,在安全性和性能之間需要做出折衷考慮。例如,SSL(Secure Socket Layer)協議就廣泛使用了RSA演算法,尤其在美國和加拿大使用128位RSA演算法,而在中國等其他地區則使用40位版本。
RSA演算法的最初目標是解決DES(Data Encryption Standard)演算法在秘密密鑰分發過程中的難題,同時提供了數字簽名功能,用於保護數據信息的完整性、防止對數據的否認與抵賴。數字簽名還能夠幫助識別攻擊者對數據的非法篡改,確保數據的可控性。
公鑰加密技術在Web商務、信用卡購物等場景中具有重要應用價值,允許在伺服器認為可信的認證機構(CA)存在的情況下,進行安全通信。然而,目前全球范圍內尚缺乏被廣泛信賴的CA。RSA演算法通過數字簽名提供了一種有效的方式來保護數據信息的完整性,以及實現數據的保密性、可用性和可控性,成為解決信息安全問題的核心技術之一。
在實際應用中,公鑰加密技術與專用密鑰技術結合使用,以實現最佳性能。通常,使用公鑰加密技術在通信雙方之間傳輸專用密鑰,然後使用專用密鑰對實際傳輸的數據進行加密和解密。此外,公鑰加密技術還用於對專用密鑰進行加密。在眾多公開密鑰密碼演算法中,RSA演算法因其在數字簽名、數據完整性和可控性方面的應用而廣受歡迎,被PGP(Pretty Good Privacy)加密系統等工具軟體採用,顯示出其強大的應用潛力。
(3)公鑰加密演算法擴展閱讀
公開密鑰密碼體制是現代密碼學的最重要的發明和進展。一般理解密碼學(Cryptography)就是保護信息傳遞的機密性。
D. 常見的公鑰密碼演算法有rsa演算法
常見的公鑰密碼演算法有rsa演算法。常見的公鑰加密演算法有:RSA、ElGamal、背包演算法、Rabin(RSA的特例)、迪菲-赫爾曼密鑰交換協議中的公鑰加密演算法、橢圓曲線加密演算法(EllipticCurveCryptography,ECC),DSA數字簽名(又稱公鑰數字簽名),將摘要信息用發送者的私鑰加密,接收者用發送者的公鑰才能解密被加密的摘要信息,也屬於公開密鑰加密演算法。
E. 公鑰加密常見的公鑰加密演算法有
在公鑰加密的世界中,幾種常見的演算法為我們提供了安全的信息傳輸保障。首先,我們有RSA,由Rivest、Shamir和Adleman三位科學家的姓氏首字母命名,它是最廣為人知的公開密鑰加密演算法,因其高效和安全性深受信賴。
接著是ElGamal演算法,作為非對稱加密的一種,它同樣具有獨特的加密機制,被廣泛應用在數據加密和密鑰交換中。不同於RSA,ElGamal在加密過程中涉及更多的步驟,但這也為它提供了額外的安全層。
背包演算法和Rabin演算法也值得一提,Rabin演算法可以看作是RSA的一種簡化版本,特別適用於輕量級的加密需求。而Diffie-Hellman (D-H) 密鑰交換協議,雖然不是直接的加密演算法,但它的公鑰加密機制在保證安全通信中發揮著重要作用。
最後,我們有橢圓曲線加密演算法(ECC),這是一種基於數學中橢圓曲線理論的加密方法,尤其在資源有限的設備上,由於其高效的計算性能,ECC展現出了強大的競爭力。
總的來說,這些公鑰加密演算法各具特色,RSA、ElGamal以及ECC憑借其獨特的設計和廣泛應用,構成了現代加密技術的重要組成部分。它們在保護數據隱私和網路通信安全方面發揮著至關重要的作用。
(5)公鑰加密演算法擴展閱讀
中文名稱:公鑰加密