關於私鑰、公鑰、數字簽名、數字證書、https、RSA原理解釋

根據非對稱密碼學的原理,每個證書持有人都有一對公鑰和私鑰,這兩把密鑰可以互爲加解密。公鑰是公開的,不需要保密,而私鑰是由證書持人自己持有,並且必須妥善保管和注意保密。數字證書則是由證書認證機構(CA)對證書申請者真實身份驗證之後,用CA的根證書對申請人的一些基本信息以及申請人的公鑰進行簽名(相當於加蓋發證書機構的公章)後形成的一個數字文件。

首先要搞清楚三個概念,即加密,簽名和認證。 
一、公鑰加密,私鑰解密——用於加密信息

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

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

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

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

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

要做到數字簽名的第二部分,需要做的是:把你公告的原文做一次哈希(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一致,此時握手過程結束,之後所有的通信數據將由之前瀏覽器生成的隨機密碼並利用對稱加密算法進行加密。

HTTPS即加密的HTTP,HTTPS並不是一個新協議,而是HTTP+SSL(TLS)。原本HTTP先和TCP(假定傳輸層是TCP協議)直接通信,而加了SSL後,就變成HTTP先和SSL通信,再由SSL和TCP通信,相當於SSL被嵌在了HTTP和TCP之間。

接收到證書的客戶端可以使用數字證書認證機構的公開密鑰,對那張證書上的數字簽名進行驗證,一旦驗證通過,客戶端便可以明確兩件事:

一、認證服務器的公開密鑰的是真實有效的數字證書認證機構。

二、服務器的公開密鑰是值得信賴的。

此處認證機關的公開密鑰必須安全地轉交給客戶端。使用通信方式時,如何安全轉交是一件很困難的事,因此,多數瀏覽器開發商發佈版本時,會事先在內部植入常用認證機關的公開密鑰。

1. 服務器把自己的公開密鑰登錄至數字證書認證機構。

2. 數字證書認證機構用自己的私有密鑰向服務器的公開密碼署數字簽名並頒發公鑰證書。

3. 客戶端拿到服務器的公鑰證書後,使用數字簽名認證機構的公開密鑰,向數字證書認證機構驗證公鑰證書上的數字簽名,以確認服務器的公開密鑰的真實性。

4. 使用服務器的公開密鑰對報文加密後發送。

5. 服務器用私有密鑰對報文解密。

HTTPS的安全通信機制

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章