也許,這樣理解HTTPS更容易
阿新 • • 發佈:2018-12-23
摘要:本文嘗試一步步還原HTTPS的設計過程,以理解為什麼HTTPS最終會是這副模樣。但是這並不代表HTTPS的真實設計過程。在閱讀本文時,你可以嘗試放下已有的對HTTPS的理解,這樣更利於“還原”過程。
我們先不了聊HTTP,HTTPS,我們先從一個聊天軟體說起,我們要實現A能發一個hello訊息給B:
如果我們要實現這個聊天軟體,本文只考慮安全性問題,要實現
A發給B的hello訊息包,即使被中間人攔截到了,也無法得知訊息的內容
如何做到真正的安全?
這個問題,很多人馬上就想到了各種加密演算法,什麼對稱加密、非對稱加密、DES、RSA、XX、噼裡啪啦~
而我想說,加密演算法只是解決方案,我們首先要做的是理解我們的問題域
我個人的理解是:
A與B通訊的內容,有且只有A和B有能力看到通訊的真正內容
好,問題域已經定義好了(現實中當然不止這一種定義)。對於解決方案,很容易就想到了對訊息進行加密。
題外話,但是隻有這一種方法嗎?我看未必,說不定在將來會出現一種物質打破當前世界的通訊假設,實現真正意義上的保密。
對於A與B這樣的簡單通訊模型,我們很容易做出選擇:
這就是對稱加密演算法,其中圖中的金鑰S同時扮演加密和解密的角色。具體細節不是本文範疇。
只要這個金鑰S不公開給第三者,同時金鑰S足夠安全,我們就解決了我們一開始所定問題域了。因為世界上有且只有A與B知道如何加密和解密他們之間的訊息。
但是,在WWW環境下,我們的Web伺服器的通訊模型沒有這麼簡單:
如果伺服器端對所有的客戶端通訊都使用同樣的對稱加密演算法,無異於沒有加密。那怎麼辦呢?即能使用對稱加密演算法,又不公開金鑰?請讀者思考21秒鐘。