前些天逛技術網,偶爾看到一篇國外關於密鑰的通俗易懂的詳解文章,當時對具體的細節仍是有點模糊搞不清楚,so昨天惡補了一下,今天簡單整理一下本身的收穫,以備之後回顧。git
1.鮑勃有兩把鑰匙,一把是公鑰,另外一把是私鑰。算法
2.鮑勃把公鑰送給他的朋友們—-帕蒂、道格、蘇珊—-每人一把。瀏覽器
3.蘇珊給鮑勃寫信,寫完後用鮑勃的公鑰加密,達到保密的效果。安全
4.鮑勃收信後,用私鑰解密,看到信件內容。服務器
5.鮑勃給蘇珊回信,寫完後用Hash函數,生成信件的摘要(digest)。函數
6.而後,鮑勃使用私鑰,對這個摘要加密,生成」數字簽名」(signature)。加密
7.鮑勃將這個簽名,附在信件下面,一塊兒發給蘇珊。blog
8.蘇珊收信後,取下數字簽名,用鮑勃的公鑰解密,獲得信件的摘要。由此證實,這封信確實是鮑勃發出的。字符串
9.蘇珊再對信件自己使用Hash函數,將獲得的結果,與上一步獲得的摘要進行對比。若是二者一致,就證實這封信未被修改過。get
10.複雜的狀況出現了。道格想欺騙蘇珊,他偷偷使用了蘇珊的電腦,用本身的公鑰換走了鮑勃的公鑰。所以,他就能夠冒充鮑勃,寫信給蘇珊。
11.蘇珊發現,本身沒法肯定公鑰是否真的屬於鮑勃。她想到了一個辦法,要求鮑勃去找」證書中心」(certificate authority,簡稱CA),爲公鑰作認證。證書中心用本身的私鑰,對鮑勃的公鑰和一些相關信息一塊兒加密,生成」數字證書」(Digital Certificate)。
12.鮑勃拿到數字證書之後,就能夠放心了。之後再給蘇珊寫信,只要在簽名的同時,再附上數字證書就好了。
13.蘇珊收信後,用CA的公鑰解開數字證書,就能夠拿到鮑勃真實的公鑰了,而後就能證實」數字簽名」是否真的是鮑勃籤的。
14.下面,咱們看一個應用」數字證書」的實例:https協議。這個協議主要用於網頁加密。
15.首先,客戶端向服務器發出加密請求。
16.服務器用本身的私鑰加密網頁之後,連同自己的數字證書,一塊兒發送給客戶端。
17.客戶端(瀏覽器)的」證書管理器」,有」受信任的根證書頒發機構」列表。客戶端會根據這張列表,查看解開數字證書的公鑰是否在列表以內。
18.若是數字證書記載的網址,與你正在瀏覽的網址不一致,就說明這張證書可能被冒用,瀏覽器會發出警告。
19.若是這張數字證書不是由受信任的機構頒發的,瀏覽器會發出另外一種警告。
20.若是數字證書是可靠的,客戶端就可使用證書中的服務器公鑰,對信息進行加密,而後與服務器交換加密信息。
想更好地理解上面這篇形象生動的技術文章,你還須要理解一些概念和術語
公鑰密碼體制分爲三個部分,公鑰、私鑰、加密解密算法,它的加密解密過程以下:
公鑰密碼體制的公鑰和算法都是公開的(這是爲何叫公鑰密碼體制的緣由),私鑰是保密的。你們都以使用公鑰進行加密,可是隻有私鑰的持有者才能解密。在實際的使用中,有須要的人會生成一對公鑰和私鑰,把公鑰發佈出去給別人使用,本身保留私鑰。
在對稱加密算法中,加密使用的密鑰和解密使用的密鑰是相同的。也就是說,加密和解密都是使用的同一個密鑰。所以對稱加密算法要保證安全性的話,密鑰要作好保密,只能讓使用的人知道,不能對外公開。這個和上面的公鑰密碼體制有所不一樣,公鑰密碼體制中加密是用公鑰,解密使用私鑰,而對稱加密算法中,加密和解密都是使用同一個密鑰,不區分公鑰和私鑰。
// 密鑰,通常就是一個字符串或數字,在加密或者解密時傳遞給加密/解密算法。前面在公鑰密碼體制中說到的公鑰、私鑰就是密鑰,公鑰是加密使用的密鑰,私鑰是解密使用的密鑰
不少時候若是要徹底程的安全通訊,須要對稱加密和非對稱加密一塊兒使用。
目前很流行加密算法 即 RSA算法,它是基於一個十分簡單的數論事實:將兩個大素數相乘十分容易,可是想要對其乘積進行因式分解卻極其困難,所以能夠將乘積公開做爲加密密鑰。