理解公鑰和私鑰首先要區分
加密和
認證這兩個概念!
加密和認證:
加密是將數據資料加密,使別人即使獲取加密資料,也無法獲取正確的資料內容,重點在於數據的安全性。
認證是確定數據的真實發送方,使別人無法偽造或冒充,重點在於用戶的真實性。
公鑰和私鑰:
公鑰和私鑰就是俗稱的不對稱加密方式,是對稱加密(使用用戶名與密碼)方式的提高。
使用公鑰與私鑰的目的是為了安全的數據傳輸,必須實現如下目的:
- 我發送給你的內容必須加密,在數據傳輸過程中不能被別人看到真實數據內容。
- 接收數據方能確定是我發送的數據,不是別人冒充我的。
首先解釋公鑰和私鑰的意義和作用:
- 公鑰:是公布出去的給別人用的,可以被很多人獲取。用來加密和驗章。
- 私鑰:只能自己持有,並且不可以被其他人知道。用來解密和簽章。
公鑰與私鑰的作用是:用公鑰加密的內容只能用私鑰解密,用私鑰加密的內容只能用公鑰解密。
公鑰和私鑰有以下原則:(注意:密鑰包括公鑰和私鑰)
- 一個公鑰對應一個私鑰;
- 密鑰對中,讓大家都知道的是公鑰,不告訴大家,只有自己知道的,是私鑰;
- 如果用其中一個密鑰加密數據,則只有對應的那個密鑰才可以解密;
- 如果用其中一個密鑰可以進行解密數據,則該數據必然是對應的那個密鑰進行的加密;
要達到數據安全傳輸的目的,必須發送方和接收方都持有對方的公鑰和自己的私鑰,即任意一方持有自己的私鑰和對方的公鑰。
如 A 給 B 發送數據:
- 為了數據的安全性,A 需要使用 B 的公鑰來給數據加密,這樣只有 B 的私鑰才可以解密數據,別人無法解密,這樣保證了數據的安全性。這是數字簽名。
- 為了保證數據發送方的真實性,A 需要使用自己的私鑰來給數據加密,這樣其他人用 A 的公鑰進行解密,由於只有 A 的私鑰加密的數據,A 的公鑰才能解密,所以他人用 A 的公鑰若能解密此數據,則證實了此數據是由 A 發送的,若不能解密,則證明此數據不是用 A 的私鑰加密的,即不是 A 發送的,這樣保證了發送方的真實性。
證書:
證書是為公鑰做認證,為了使公鑰真實可信,防止他人偽造公鑰;證書頒發機構(證書中心CA)會用自己的私鑰對用戶的公鑰和相關信息進行加密,生成”數字證書“,然后證書中心會公布自己的公鑰給所有人,用來讓用戶使用此公鑰驗證”數字證書“是否由CA頒發,即是否真實可信,產生證書是因為如下場景:
A 給 B 發信息:
1. 首先 A 用 Hash 函數對要發送的數據實體生成摘要(digest),這個過程是不可逆的。
2. A 使用自己的私鑰對這個
摘要進行加密,生成數字簽名(signature),並將此簽名連同要發送的數據實體一起發送給 B 。
3. B 收到 A 發送過來的數據后,首先用 A 的公鑰對數字簽名進行解密,得到摘要,從而證明數據確實來自 A,因為只有 A 有私鑰。
4. B 再對接收到的數據實體進行 Hash 函數,如果得到的結果和上一步摘要一致,則證明數據實體沒有被篡改過。
如上,如果 C 偷偷將 B 持有的 A 公鑰換成自己的公鑰,而 B 不知道公鑰已被替換,那么以后 C 就可以使用冒充 A 來給 B 信息,而 B 會相信此信息是來自 A。
為了解決這一問題,需要對 B 持有的 A 公鑰做認證,從而確定此公鑰確實是 A 的公鑰,而不是其他人篡改過的!而這個認證機構必須是第三方可信賴的,就是CA!由此,發送過程變成如下:
A 發給 B 數據的時候,除了要發送簽名和數據實體,還要發送CA頒發的證書。
B 接收到 A 發送過來的數據后,首先用 CA 的公鑰去解密證書,如果能解,表明這個證書里的信息可信賴,從而得到證書里 A 的公鑰,然后 B 再用得到的公鑰去做下一步動作。
注意:
以上前提必須是 CA 是可信賴的,CA 證書是不可偽造的!
上邊 A 給 B 發送數據只實現了身份確認,數據未被修改過,但是沒有保證數據是安全的,即數據傳輸過程中可以被第三人看到數據內容,要想實現安全的數據傳輸,A 還要做一步工作,即用 B 的公鑰給數據加密,這樣只有 B才可以解密,從而保證了數據的安全性。
由上再次總結:
證書分為公鑰證書和私鑰證書,每個人的公鑰、私鑰證書是不一樣的,但是肯定是一一對應的。
加密技術:公鑰證書加密、私鑰證書解密;
簽名技術:私鑰證書加密、公鑰證書解密;
對於一方來說,持有對方公鑰(即證書,因為公鑰放在證書里),就可以驗證對方身份,並且保證發給對方數據的安全性。對方對己方要也想做到這一點,則也要持有己方的公鑰,即:
加密和簽名技術相結合才能實現,機密性、完整性、不可否認性。
證書是為了保證密鑰的真實性!沒有證書,談不上非對稱加密。