公鑰、私鑰、數字簽名、數字證書、對稱與非對稱算法、HTTPS

對公鑰和私鑰有點稀裡糊塗的,搜索了一些資料,作一些整理吧,先看這個:

加密--公鑰

解密--私鑰

簽名--私鑰

驗證--公鑰

看了這個也許會對私鑰用於簽名不解,其實它等同於用私鑰加密,而公鑰驗證就是用公鑰解密,但是不能用於保密信息。因為公鑰是公開的。

再來一個:

1)公鑰和私鑰成對出現

2)公開的密鑰叫公鑰,只有自己知道的叫私鑰

3)用公鑰加密的數據只有對應的私鑰可以 解密

4)用私鑰加密的數據只有對應的公鑰可以解密

5)如果可以用公鑰解密,則必然是對應的私鑰加的密

6)如果可以用私鑰解密,則 必然是對應的公鑰加的密

公鑰和私鑰都可以用來加密或解密---只要能保證用A加密,就用B解密就行。至於A是公鑰還是私鑰,其實可以根據不同的用途而定。

一、公鑰加密,私鑰解密——用於保密信息

如果你想把某個消息秘密的發給某人,那你就可以用他的公鑰加密。因為只有他知道他的私鑰,所以這消息也就只有他本人能解開,於是你就達到了你的目的。

二、私鑰加密,公鑰解密——用於數字簽名

嚴格來說,這裡說的私鑰加密是用私鑰對摘要進行加密,接收方可以用公鑰解密,解密成功則可驗證信息的發送者是私鑰的擁有人。因為公鑰是公開的,所以起不了保密信息的作用。

如果你想發佈一個公告,需要一個手段來證明這確實是你本人發的,而不是其他人冒名頂替的。那你可以在你的公告開頭或者結尾附上一段用你的私鑰加密的內容(例如說就是你公告正文的一段話),那所有其他人都可以用你的公鑰來解密,看看解出來的內容是不是相符的。如果是的話,那就說明這公告確實是你發的---因為只有你的公鑰才能解開你的私鑰加密的內容,而其他人是拿不到你的私鑰的。

但這僅僅做到了數字簽名的第一部分:證明這消息是你發的。數字簽名還有第二部分:證明這消息內容確實是完整的---也就是沒有經過任何形式的篡改(包括替換、缺少、新增)。

要做到數字簽名的第二部分,需要做的是:把你公告的原文做一次哈希(md5或者sha1都行),然後用你的私鑰加密這段哈希作為簽名,並一起公佈出去。當別人收到你的公告時,他可以用你的公鑰解密你的簽名,如果解密成功,並且解密出來的哈希值確實和你的公告原文一致,那麼他就證明了兩點:這消息確實是你發的,而且內容是完整的。

三、對公鑰進行認證——數字證書

黑客可以替換你的公鑰,然後用他的私鑰做數字簽名給你發信息,而你用黑客偽造的公鑰能成功驗證,會讓你誤認為消息來源沒變。

這種情況下需要CA(證書中心certificate authority)對公鑰進行認證。證書中心用自己的私鑰,對信息發送者的公鑰和一些相關信息一起加密,生成"數字證書"(Digital Certificate)。

這個可以參考這篇文章:數字簽名是什麼? ,講得非常好,圖示很清楚。

通過在實際的使用中,公鑰也不會單獨出現,總是以數字證書的方式出現,以確保公鑰的安全性和有效性。

四、對稱與非對稱算法

對稱算法是說,加密過程和解密過程是對稱的,用一個 密鑰加密,可以用同一個密鑰解密。使用公私鑰的算法是非對稱加密算法。

HTTPS一般使用了以下算法,其中就包括非對稱和對稱加密算法:

非對稱加密算法:RSA,DSA/DSS

對稱加密算法:AES,RC4,3DES

HASH算法:MD5,SHA1,SHA256

其中非對稱加密算法用於在握手過程中加密生成的密碼,對稱加密算法用於對真正傳輸的數據進行加密,而HASH算法用於驗證數據的完整性。

五、HTTPS的工作原理

HTTPS在傳輸數據之前需要客戶端(瀏覽器)與服務端(網站)之間進行一次握手,在握手過程中將確立雙方加密傳輸數據的密碼信息。TLS/SSL協議不僅僅是一套加密傳輸的協議,更是一件經過藝術家精心設計的藝術品,TLS/SSL中使用了非對稱加密,對稱加密以及HASH算法。握手過程的簡單描述如下:

1.瀏覽器將自己支持的一套加密規則發送給網站。

2.網站從中選出一組加密算法與HASH算法,並將自己的身份信息以證書的形式發回給瀏覽器。證書裡面包含了網站地址,加密公鑰,以及證書的頒發機構等信息。

3.獲得網站證書之後瀏覽器要做以下工作:

a) 驗證證書的合法性(頒發證書的機構是否合法,證書中包含的網站地址是否與正在訪問的地址一致等),如果證書受信任,則瀏覽器欄裡面會顯示一個小鎖頭,否則會給出證書不受信的提示。

b) 如果證書受信任,或者是用戶接受了不受信的證書,瀏覽器會生成一串隨機數的密碼,並用證書中提供的公鑰加密。

c) 使用約定好的HASH計算握手消息,並使用生成的隨機數對消息進行加密,最後將之前生成的所有信息發送給網站。

4.網站接收瀏覽器發來的數據之後要做以下的操作:

a) 使用自己的私鑰將信息解密取出密碼,使用密碼解密瀏覽器發來的握手消息,並驗證HASH是否與瀏覽器發來的一致。

b) 使用密碼加密一段握手消息,發送給瀏覽器。

5.瀏覽器解密並計算握手消息的HASH,如果與服務端發來的HASH一致,此時握手過程結束,之後所有的通信數據將由之前瀏覽器生成的隨機密碼並利用對稱加密算法進行加密。


分享到:


相關文章: