來自公眾號:車小胖談網路
記得小時候,敞篷卡車從果園拉著一車車的蘋果,運到碼頭上,然後再裝載到萬噸貨輪上運往上海。但運往碼頭的最後一公里,道路坑坑窪窪,卡車會放慢速度,這時就會有一些青少年爬上貨車,從袋子裡拿蘋果吃,每次都會有一袋或幾袋被開包,為此運輸公司非常苦惱。
後來為了減少損失,運輸公司使用了封閉的集裝箱,裝載好蘋果再將車廂鎖起來,到達目的地再開啟,這樣即使有人想從車廂裡拿蘋果,也無從下手。
以上敞篷卡車所對應的就是TCP,蘋果對應的是HTTP,由於敞篷卡車無法保證在傳輸路途上,蘋果是否被竊取、調包、所以最終有多少貨物到達目的地,那完全要看壞小子的心情,如果壞小子只是插入一些廣告,使用者的瀏覽器最多彈出一些廣告頁面。
更甚一步,竊取使用者cookie,登入使用者賬戶做非法的勾當。還可以透過明文http植入木馬,可以遠端控制使用者電腦,竊取使用者敏感資訊。
集裝箱代表TCP + TLS(Transport Layer Security),從果園運輸的十噸蘋果能夠原封不動地到達目的地,既不會多也不會少。
明文HTTP讓壞人有機可乘
為了實現網路的高度安全,需要很多環節協同工作,只要有一個環節有漏洞,就有可能被利用,而為了提高網路的相對安全性,最高優先順序就應該從HTTP下手,因為這個使用者使用的最頻繁。
目前幾乎所有的個人電腦都處於路由器NAT保護之下,如果使用者不主動訪問Internet,別人無從對NAT後個人電腦下手。
一旦使用者主動訪問Internet,就相當於在NAT城門上啄了一個小洞,這個小洞就是一個NAT對映表,如果沒有流量掃清,300秒之後小洞就會關閉。
在小洞存活的300秒以內,允許外部主機來訪問個人電腦,而明文的HTTP就是最好的載體。一旦個人電腦被植入了木馬,木馬程式就會主動週期性發訊息給Internet的控制終端,這樣NAT小洞會一直敞開大門(週期性訊息掃清定時器),給遠端控制提供了便利。
HTTPS提供了端到端的安全加密
不僅提供資料機密性(加密),還提供資料完整性(不篡改資料)保護、防重放(把捕獲的報文再發一次無效),這樣壞小子就很難下手,沒有session key 很難去偷窺並篡改使用者的資料,更無法依賴HTTPS這個載體植入木馬。
一定有同學會有疑問,為何明文傳輸的HTTP可以被劫持,篡改網頁內容,而加密傳輸的HTTPS卻不可以?
那是因為HTTP被劫持篡改頁面,重新計算TCP checksum,使用者電腦是無法判別是否被篡改,只好被動接收。
而加密傳輸之後,有了HMAC保護,任何篡改頁面的嘗試,由於沒有session key,無法計算出和篡改網頁一致的HMAC,所以資料接收端的SSL/TLS會輕易地識別出網頁已被篡改,然後丟棄,既然無法劫持,也就沒有篡改的衝動了,所以HTTPS可以很好地對付網頁劫持。
HTTPS並不是100%絕對可靠
斯諾登暴露出,針對IPsec,TLS的金鑰交換所依賴的Diffie-Hellman演演算法攻擊,即透過離線的超級計算機預先計算出海量的公鑰、私鑰對,一旦嘗試出私鑰就會得到Master Key,進而推匯出session key,這樣歷史資料、現在、將來的資料全可以解密。
以上是被動攻擊方式,針對數字證書欺騙則屬於主動攻擊,可以實時地解密使用者資料。但種種主、被動攻擊難度都很高,往往是以國家意志為源動力,而不是一些小團體所能完成的。
有讀者肯定會心生疑惑,既然HTTPS不是絕對可靠,那依靠HTTPS工作的網銀安全嗎?安全,放心使用!
銀行在轉賬時,通常需要使用者私鑰簽名確認,而私鑰就嵌入在USB Token裡,類似下圖中的硬體裝置。只要使用者不要把這個借給別人使用,轉賬可以確保安全。
電腦網銀使用者一般都有一個USB Token,裡面有使用者數字證書私鑰(Private Key),網銀轉賬一定要有使用者數字證書私鑰簽名的轉賬確認,而這個私鑰只有使用者的Token唯一擁有,而銀行擁有使用者數字證書公鑰(Public Key),可以成功解密出使用者私鑰(Private Key)簽名的轉賬確認,以此確信轉賬指令是由擁有USB Token的使用者發出來的,這樣會進一步提高網銀的安全性。
手機銀行一般都是APP,可以強制使用(Public Key Pinning )特定根證書作為證書信任鏈的頂端,可以避免客戶端使用誤安裝的偽造證書,所以APP不會與假的伺服器建立TLS連線,只會與真正的伺服器建立安全隧道,一旦隧道成功建立,通訊就是安全的,即使轉賬也是安全的。轉賬之前透過手機驗證碼確認,又多了一層安全保護。
朋友會在“發現-看一看”看到你“在看”的內容