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

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

加密--公鑰
解密--私鑰
簽名--私鑰
驗證--公鑰git

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

再來一個:瀏覽器

1)公鑰和私鑰成對出現
2)公開的密鑰叫公鑰,只有本身知道的叫私鑰
3)用公鑰加密的數據只有對應的私鑰能夠 解密
4)用私鑰加密的數據只有對應的公鑰能夠解密
5)若是能夠用公鑰解密,則必然是對應的私鑰加的密
6)若是能夠用私鑰解密,則 必然是對應的公鑰加的密安全

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

1、公鑰加密,私鑰解密——用於保密信息網站

若是你想把某個消息祕密的發給某人,那你就能夠用他的公鑰加密。由於只有他知道他的私鑰,因此這消息也就只有他本人能解開,因而你就達到了你的目的。加密

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

嚴格來講,這裏說的私鑰加密是用私鑰對摘要進行加密,接收方能夠用公鑰解密,解密成功則可驗證信息的發送者是私鑰的擁有人。由於公鑰是公開的,因此起不了保密信息的做用。.net

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

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

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


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

黑客能夠替換你的公鑰,而後用他的私鑰作數字簽名給你發信息,而你用黑客僞造的公鑰能成功驗證,會讓你誤認爲消息來源沒變。

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

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

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

4、對稱與非對稱算法

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

HTTPS通常使用瞭如下算法,其中就包括非對稱和對稱加密算法:
非對稱加密算法:RSA,DSA/DSS
對稱加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256
其中非對稱加密算法用於在握手過程當中加密生成的密碼,對稱加密算法用於對真正傳輸的數據進行加密,而HASH算法用於驗證數據的完整性。

5、HTTPS的工做原理
HTTPS在傳輸數據以前須要客戶端(瀏覽器)與服務端(網站)之間進行一次握手,在握手過程當中將確立雙方加密傳輸數據的密碼信息。TLS/SSL協議不只僅是一套加密傳輸的協議,更是一件通過藝術家精心設計的藝術品,TLS/SSL中使用了非對稱加密,對稱加密以及HASH算法。握手過程的簡單描述以下:
1.瀏覽器將本身支持的一套加密規則發送給網站。
2.網站從中選出一組加密算法與HASH算法,並將本身的身份信息以證書的形式發回給瀏覽器。證書裏面包含了網站地址,加密公鑰,以及證書的頒發機構等信息。
3.得到網站證書以後瀏覽器要作如下工做:
a) 驗證證書的合法性(頒發證書的機構是否合法,證書中包含的網站地址是否與正在訪問的地址一致等),若是證書受信任,則瀏覽器欄裏面會顯示一個小鎖頭,不然會給出證書不受信的提示。
b) 若是證書受信任,或者是用戶接受了不受信的證書,瀏覽器會生成一串隨機數的密碼,並用證書中提供的公鑰加密。
c) 使用約定好的HASH計算握手消息,並使用生成的隨機數對消息進行加密,最後將以前生成的全部信息發送給網站。
4.網站接收瀏覽器發來的數據以後要作如下的操做:
a) 使用本身的私鑰將信息解密取出密碼,使用密碼解密瀏覽器發來的握手消息,並驗證HASH是否與瀏覽器發來的一致。
b) 使用密碼加密一段握手消息,發送給瀏覽器。
5.瀏覽器解密並計算握手消息的HASH,若是與服務端發來的HASH一致,此時握手過程結束,以後全部的通訊數據將由以前瀏覽器生成的隨機密碼並利用對稱加密算法進行加密。


參考:

公鑰,私鑰,SSL(講的很生動) 

RSA的公鑰和私鑰到底哪一個纔是用來加密和哪一個用來解密?

利用openssl進行RSA加密解密

Android客戶端與PHP服務端RES公鑰私鑰互加解密
HTTPS那些事(一)HTTPS原理

相關文章
相關標籤/搜索