HTTPS的故事:將網絡活動中的其他基本元素擬人化
本文其實總體算是一篇譯文,原作在此 HTTPS explained with carrier pigeons, 看完不禁感嘆作者的思路清奇,于是跟風把原文重新“詮釋”一下 ...
你在 Internet 上的所有活動,其實都可以歸類為 往服務器發送數據 以及 從服務器接受數據,也就是你與服務器的通信。原文作者對這個行為給了一個神奇的比喻:有一只信鴿在你與服務器之前傳送消息。
同理,我們也把網絡活動中的其他基本元素擬人化,這樣這個故事才會完美 ...
LiLei 跟 HanMeimei 通信,情敵 Jim Green 是個 hacker, 當然,信使自然就是 Polly 了。
接下來,請開始你的表演 ...
情竇初開
李雷想告訴韓梅梅:“I LOVE U”,于是李雷寫好情書,綁在 Polly 的腿上,讓 Polly 去韓梅梅家,韓梅梅拿到情書,呵呵一笑,哦不,嬌羞一笑,OK,一次信息傳遞成功。

有人使壞
然而,喜歡韓梅梅的不止李雷,還有 Jim Green,他半路截取了 Polly,看到“ I LOVE U”,頓生醋意,憤而把消息改成 "F**K OFF" ... 當韓梅梅收到信時,愛情的萌芽必然就被扼殺了,因為韓梅梅并不知道李雷發來的消息被半路攔截并篡改了。

加密消息
上次的事情后,李雷花了用了 1024 天向韓梅梅解釋,最終讓韓梅梅相信是有人在背后搗鬼,于是,他倆這次學乖了,決定把消息加密,倆人約定好,發送時把消息中的字母都向字母表后移 1 位,也就是發送 “J MPWF V”,這時就算 Jim Green 把 Polly 截了也不知道他們的消息是什么意思,只有韓梅梅知道消息解碼的規則,她將每個字母對應字母表前移一位就知道原始消息是“ I LOVE U”,掩面嬌羞...

插播科普 上面這種加密消息的方式就是對稱加密,你知道如何加密,也知道如何解碼。然后李雷跟韓梅梅用的字母表偏移的加密方法叫 Caesar cipher, 凱撒加密。現實世界中用的加密算法會更復雜,但是基本原理相同。
假如他們之前沒見過
對稱加密在只有發送和接收方知道加密算法和密鑰的時候,是安全的。但是問題是,如果李雷和韓梅梅在通信之前都沒見過,那他們就沒法約定加密算法和密鑰了。
旁白:那可以先通信一次把通信方式和密碼發過去,然后再發消息唄?
然而,Jim Green 又不是傻,看見 Polly 第一次飛過去,攔下來,哦,原來你們要用凱撒加密,密鑰是 1 ... 上面說了,加密方式只有發送方和接受者知道時是安全的,現在第三個人知道了,不安全了。
他們的通信需要更安全的加密系統 ...
PS:在現實中,如果使用對稱加密,客戶端和服務端都需要保存大量的加密算法和對應的密鑰,管理成本巨大且容易泄漏。
讓 Polly 抱個密碼箱
李雷和韓梅梅想出來了一個復雜的通信流程:
- 李雷先讓 Polly 不帶情書飛到韓梅梅家;
- 韓梅梅在 Polly 身上綁一個開著的密碼箱,密碼只有韓梅梅知道,然后讓 Polly 飛回去;
- 李雷在 Polly 回來的時候,把情書放進去,把密碼箱鎖起來,讓 Polly 再飛到韓梅梅家;
- 韓梅梅拿到密碼箱,打開,拿到情書,掩面嬌羞;
Polly 內心旁白,MMP,你們談個戀愛累死老子了 ...
就通過這樣的流程,他們安全的談情說愛,Jim Green 無計可施 ...
插播科普 上面這種加密方式是非對稱加密,非對稱的含義相對于對稱來說,就是你即使知道怎么加密的的方式,也不知道怎么解密,對應上面的流程就是李雷鎖的密碼箱卻沒辦法打開。
術語來講的話,就是我們熟知的公鑰和私鑰,服務端將公鑰(密碼箱)發送給客戶端,客戶端使用公鑰加密信息(鎖箱子),服務端接受消息后使用私鑰(僅韓梅梅知道的密碼)解密。
密碼箱安全嗎
然而問題還沒有結束 ...
李雷拿到開著的密碼箱,如何確定這個密碼箱就是韓梅梅讓 Polly 帶過來的?Jim Green 能截消息,也能截密碼箱然后換成自己知道知道密碼的密碼箱呀,這樣的話,通信同樣不安全(即公鑰來源的安全性)。
李雷必須要知道箱子是不是韓梅梅的,于是韓梅梅想到一個辦法,她在密碼箱上簽上自己的名字,當李雷拿到盒子的時候,就可以看簽名是不是韓梅梅的從而決定是否安全。
然而,還又同樣的問題,Jim Green 同樣也能偽造簽名呀 ...
惡魔李雷:媽蛋的,這戀愛老子不談了!
天使李雷:山無棱天地合乃敢與君絕
天使戰勝了惡魔,故事繼續 ...
公信
我們需要一個有公信力的人 -- 鄭叔 -- 來代替簽名,他是大家公認的好人,只會給認證過的合法的人簽名,簽名的密碼箱的來源都確實就是需要簽名的本人。
這樣,Jim Green 就不能換箱子和偽造簽名了,一旦沒有鄭叔的認證,李雷就可以斷定這不是韓梅梅的箱子,不安全。
同樣,術語上,鄭叔就是 Certification Authority,認證機構,有權利頒發證書(簽名)。
在這個關系鏈中,信任 CA 是基礎,因為,其實也會有 CA 告訴你他自己是安全的,他會給自己頒發證書。對應例子中,就是如果 Jim Green 也是個有公信力的人然后給自己簽名那就沒得玩了,但是我們“相信” CA 都不會做這樣的壞事,所以 Jim Green 不會是 CA.
Polly 好累
對比最初的消息,我們為了安全,本來只用送一封信,卻加了一個密碼箱和一個簽名,運輸成本重多了,Polly 累了,不開心了 ...
于是,他們決定,消息體還是以凱撒加密的方式傳輸,然后偏移步長用鄭叔簽名的保險箱發送,這樣就可以平衡消息的安全性和傳輸的成本問題。
術語解釋就是非對稱加密會影響傳輸速度,因為消息體變大了,所以通常綜合性能和安全性考慮,會用對稱加密消息體,非對稱加密用來編碼對稱加密的密鑰。
結語
故事中通信的過程其實就是原始的 HTTP 到 HTTPS 的演進過程,當然隱藏了真實通信的很多細節,比如三次握手 ... 但是大體上描述了原理和部分細節。
去探索更多關于 HTTPS 的原理 & 申請證書改造你的網站吧 ...