https 如何做到安全

浮x塵發表於2018-09-19

HTTPS

我們都知道 HTTPS 傳輸安全,為什麼安全呢?密碼學保證?下面介紹一些 HTTPS 用到的技術。

SSL/TLS

SSL(Secure Sockets Layer),中文叫安全套接層,是網景公司 90 年代中期設計來解決 HTTP 協議明文傳輸的缺點(嗅探、劫持、篡改)。

到 1999 年,IETF 把 SSL 標準化,標準化之後名稱改為 TLS(Transport Layer Security),中文叫傳輸層安全協議。

HTTPS

什麼是 HTTPS?

HTTPS = HTTP + SSL/TLS。

即不安全的 HTTP 協議加上 SSL/TLS 等於安全的 HTTPS。

加密解密

加密和解密是一對互逆的數學運算:

加密:明文 + 金鑰 = 密文

解密:密文 + 金鑰 = 明文

對稱加密

對稱加密的意思就是加密和解密使用相同的金鑰,例如在壓縮檔案上設定密碼,解密就需要輸入相同的密碼。

非對稱加密

非對稱加密則使用不同的金鑰(公鑰和私鑰)進行加密解密。

金鑰交換

網站和瀏覽器之間要實現安全的金鑰交換該如何實現?

方案一:使用對稱加密演算法

如果單純使用物件加密演算法,瀏覽器和網站之間必須要交換金鑰,金鑰直接用明文傳輸很容易被竊取,無法保證金鑰的安全性。

方案二:使用非對稱加密演算法

  1. 網站基於非對稱加密演算法隨機生成一對金鑰對 x,y,目前還很安全,只有網站知道
  2. 網站把 x 留在手裡,把 y 用明文傳輸到瀏覽器(y 有可能被竊取)
  3. 瀏覽器拿到 y 之後,先隨機生成第三個對稱加密的金鑰 z,然後用 y 加密 z 得到最新的 f(本質上就是用非對稱加密保證對稱加密的安全性),將 f 傳送到網站(因為 x,y 是成對的,只有 x 才能解密 y 加密的結果,所有 y 洩露也無法解密 k)
  4. 網站拿到 f 之後,用 x 解密得到 z,至此瀏覽器和網站都有對稱加密的金鑰 z,可以進行通訊加密

思考一下,方案二是否安全和完美?

依舊不安全,方案二可以在一定程度上防止嗅探,但無法防範網路資料篡改(中間人攻擊)。

在網站和瀏覽器交換金鑰的過程中,中間人接收網站傳送的金鑰 y 儲存下來,改用自己生成的金鑰對偽造成網站與瀏覽器互動,同時使用金鑰 y 偽造成瀏覽器與網站互動。

方案二不安全的根源是缺乏可靠的身份認證,瀏覽器無法鑑別自己收到的金鑰是不是來自網站。

因此需要引入 CA 證書機制(身份認證),基於 CA 證書進行金鑰交換(具體 CA 機制可檢視另一篇介紹 CA 的文章)。

此時得到方案三:

  1. 網站首先花錢從權威 CA 機構那裡購買一個數字證書,證書通常包含一個私鑰和一個公鑰證書檔案
  2. 瀏覽器訪問網站時將公鑰證書檔案傳送給瀏覽器
  3. 瀏覽器驗證收到的證書(權威機構擔保真假,主流瀏覽器和作業系統都會內建權威 CA 機構的根證書)
  4. 如果證書可信,就隨機生成一個對稱加密金鑰 k,使用公鑰加密 k,得到金鑰 c
  5. 將金鑰 c 傳送到網站,網站根據私鑰解密出金鑰 k,至此金鑰交換完成

這就是 HTTPS 加密傳輸的過程。

相關文章