網絡安全 學習之 https

通過對 羅劍鋒的《 透視HTTP協議》 進行了學習之後,記錄相關知識點

一個安全的協議是基於

  1. 機密性(Secrecy/Confidentiality)是指對數據的“保密”,只能由可信的人訪問,對其他人是不可見的“祕密”,簡單來說就是不能讓不相關的人看到不該看的東西。
  2. 完整性(Integrity,也叫一致性)是指數據在傳輸過程中沒有被篡改,不多也不少,“完完整整”地保持着原狀。
  3. 身份認證(Authentication)是指確認對方的真實身份,也就是“證明你真的是你”,保證消息只能發送給可信的人。
  4. 不可否認

1、機密性

對稱加密

“對稱加密”就是指加密和解密時使用的密鑰都是同一個,是“對稱”的。只要保證了密鑰的安全,那整個通信過程就可以說具有了機密性。

但是如何保證 傳輸的 密鑰的安全,就成了一個問題

非對稱加密

  1. 它有兩個密鑰,一個叫“公鑰”(public key),一個叫“私鑰”(private key)。
  2. 兩個密鑰是不同的,“不對稱”,公鑰可以公開給任何人使用,而私鑰必須嚴格保密,默認只有持有人知道。
  3. 公鑰和私鑰有個特別的“單向”性,雖然都可以用來加密解密,但公鑰加密後只能用私鑰解密,反過來,私鑰加密後也只能用公鑰解密。
  4. 但是公私鑰 加密、解密的過程實在是太複雜,計算機計算需要相對較長的時間,對於性能上不太友好

混合加密

  1. 在通信剛開始的時候使用非對稱算法
  2. 然後用隨機數產生對稱算法使用的“會話密鑰”(session key),再用公鑰加密
  3. 對方拿到密文後用私鑰解密,取出會話密鑰。這樣,雙方就實現了對稱密鑰的安全交換,後續就不再使用非對稱加密,全都使用對稱加密

2、完整性

摘要算法

實現完整性的手段主要是摘要算法(Digest Algorithm),也就是常說的散列函數、哈希函數(Hash Function)。

  1. 加密後的數據無法解密,不能從摘要逆推出原文。
  2. 將原文 加密 後的 摘要 和原文是完全 等價的,但是摘要由於 無法解密,也就無法修改
  3. 只要對原文進行同樣的摘要算法之後,通過對比 傳輸過來的摘要,就能夠知道 原文有沒有被篡改了
  4. 但是這個加密方法不具有機密性,也就是說,黑客可以把原本改了之後,自己加密一份,然後再傳輸給客戶端或者服務端
  5. 真正的完整性必須要建立在機密性之上,在混合加密系統裏用會話密鑰加密消息和摘要,這樣黑客無法得知明文,也就沒有辦法動手腳了

3、身份認證

加密像之前說的那樣,在傳輸過程中已經是比較完全的了,但是如果遇到了 服務器 的僞裝,或者客戶端的僞裝呢?也就是說,不修改中間的傳輸過程,直接修改信息傳輸的源頭

數字簽名

  1. 想要對服務器的身份做驗證,最妥善的方法,就是使用誰都不能冒充的東西,那就是 服務端的 私鑰
  2. 使用 私鑰 對 原文的摘要 進行加密,這樣客戶端使用 公開的 公鑰進行解密,然後通過上面講的 摘要算法,確認 原文完整性,就能夠確認這個,就是對的 服務器
  3. 上面的加密和解密的過程,就叫做 簽名驗籤
  1. 這裏就會誕生一個新的問題,那就是 公鑰 怎麼證明是正確的呢?
  2. 中間人攔截了 傳輸過來的信息,裏面包括了 公鑰和 原文、摘要,然後使用 公鑰解密,再使用自己的私鑰 加密,修改原文,摘要算法重新算一遍,然後把這個再傳給 客戶端
  3. 客戶端傻乎乎地拿到了東西之後,加密、解密、完整性 都沒問題,那麼就會完全信任 這個中間人,這樣加密就變成了一個笑話

4、不可否認 + 身份認證

CA(Certificate Authority,證書認證機構)

它就像網絡世界裏的公安局、教育部、公證中心,具有極高的可信度,由它來給各個公鑰簽名用自身的信譽來保證公鑰無法僞造,是可信的

  1. 包含序列號、用途、頒發者、有效時間、公鑰等等,把這些打成一個包再簽名,完整地證明公鑰關聯的各種信息,形成“數字證書”
  2. 操作系統和瀏覽器都內置了各大 CA 的根證書,上網的時候只要服務器發過來它的證書,就可以驗證證書裏的簽名,順着證書鏈(Certificate Chain)一層層地驗證,直到找到根證書,就能夠確定證書是可信的,從而裏面的公鑰也是可信的
  3. 服務器會在握手的時候返回整個證書鏈,瀏覽器自下向上層層解析到根證書
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章