進階篇:HTTPS之新的烏雲來襲

縱觀TCP/IP四層模型,我們花了很多章節將核心的基礎部分全部叨叨完了,只要主機接入互聯網,主機上都安裝TCP/IP驅動程序,我們就可以順利將消息從一端的應用程序順利傳達到世界上任何另一端的應用程式上,並且還可以藉助客戶端瀏覽器展示花花綠綠的美好世界。

我們彷彿置身於美麗而晴朗的天空下,愜意且得意,盡情地享受陽光的沐浴,可是,一片大大的烏雲公頃刻間來到了眼前:安全問題。


二、HTTP的弱點

HTTP協議,在設計之初並未考慮安全性問題,它的設計初衷是用來進行資料傳輸和共享。

隨著web應用的普及,有一小部分駭客借助HTTP的弱點進行攻擊,輕則獲取你的喜好或瀏覽記錄,重則盜取銀行帳號、販賣你的個人資料。

本系列主要關注中間人攻擊,所謂中間人就是在客戶端和伺服器之間有一雙無形黑手,對於客戶端和伺服器來說,根本不會意識到有中間人的存在,也沒有辦法進行防禦。

那麼HTTP到底有什麼弱點呢?

(1)第一個弱點是:資料未進行加密,一切資訊在網路上裸奔。

我們知道,從瀏覽器出發,到最終的伺服器,會經過大量中間節點,若資料未加密,可輕鬆在某個節點上進行截獲並結合工具理解其意義。

有的讀者朋友可能會問:我是否可以在程式碼層面使用各種加密演算法對內容進行加密和解密呢?即在應用程式層上對傳輸的資料本身進行加密。

這個沒有從根本上解決此問題,因為即便你可以對傳輸的資料進行加密,但是不能對HTTP頭部進行加密,而HTTP頭部資訊是否加密也是在安全考慮範圍內的。

同時此方案不具備通用性,例如伺服器對HTML資料進行加密後發給瀏覽器,而瀏覽器本身卻不會單獨適配你的服務端進行解密後再進行頁面渲染。

(2)第二個弱點是:無法驗證身份,對端跟你聊天的可能是一隻狗。

對於HTTP協定來說,只要傳輸的資訊符合HTTP規範即可,而不會確認雙方的身份,也沒有確認雙方身分的標準。

基於這個一點,很有可能實際訪問到的網站並不是官方的真實網站,原因可能是在你的電腦或中間DNS上被劫持到了騙子的網站上。

這點相信讀者朋友們會感覺後背發涼,當你付款的時候,都無法確認對方是誰,你還敢付錢嗎?連密碼都不敢輸入了,因為很有可能你的密碼和個人資料也被偷走。

真是可惡,防不勝防!

(3)第三個弱點是:數據被竄改,我愛你變成我恨你。

鑑於存在中間人攻擊,中間人在獲取到你的信息後,不僅可以隨心所欲看你的隱私,甚至還可以將你發送的信息進行篡改後再發送出去。

但由於客戶端和服務端並沒有資料是否被竄改的校驗機制,服務端無條件信任所有接收到的資訊。

好啊,殺人還誅心,這個破網是不能再上了!

三、密碼學初探

我的意中人是個蓋世英雄,有一天他會踩著七色的雲彩娶我。

意中人的名字叫做HTTPS,理解HTTPS之前必須掌握基本的密碼學知識,HTTPS本質上就是密碼學演算法的組合。

之所以這片烏雲這麼大,罪魁禍首就是牽涉到密碼學,而密碼學關係到數學,這一點要想深入下去,則又是一門學科了;而烏雲之所以這麼黑,是因為安全無小事,一旦出事就是大問題,這也是密碼學這麼深奧重要的原因。

目前流行的密碼學演算法實現是公開的,是經歷了長時間考驗的,是由佷多理具備深厚數學知識的數學家們所創造,對於開發者來說,即使不了解其背後原理,也可以容易地上手使用他們。

在使用他們的時候,我們必須抱持這樣的態度:

  • 世界上不存在一種密碼學演算法,能解決所有的安全問題,需要具體問題具體分析。
  • 世界上也沒有絕對安全的密碼學演算法,對於演算法應用者來說,確保目前使用的密碼學演算法是安全的就可以了。

所以我們最重要的任務是了解特定的一些密碼學演算法解決了何種問題、在正確的場景下能正確地使用他們。

四、密碼學目標

我們上面提三個HTTP的弱點,而引進密碼學就是為了解決問題,我們來看看密碼學的目標。

(1)機密性

解決資訊裸奔問題,密碼學最最核心的任務當然是負責資料加密,只要外人不知道金鑰,即使拿到密文資訊也毫無意義。

(2)完整性

解決資料竄改問題,即使是加密數據,如果資料被中間人竄改,應該可以透過某種策略知曉,保障收到的資料就是發送方發出來的原始資料。

在密碼學中,主要使用訊息驗證碼( MAC )演算法保證完整性。

(3)身份驗證與不可抵賴性

通訊雙方必須確保對端就是要通訊的對象。在密碼學中,一般使用數位簽章技術確認身分。

此外,數位簽章技術還能避免抵賴,舉個例子,A向B借錢了,並寫了張藉條,當B希望A還錢時,A抵賴說借條不是他寫的,理由就是有人冒充他寫了這張借條。

接下來我們再來抽絲剝繭,慢慢探索HTTPS是如何解決如上問題的。