天天看點

即時通訊安全篇(十):IM聊天系統安全手段之通信連接配接層加密技術

本文由融雲技術團隊分享,原題“網際網路通信安全之端到端加密技術”,内容有修訂和改動。

1、引言

随着移動網際網路的普及,IM即時通訊類應用幾乎替代了傳統營運商的電話、短信等功能。得益于即時通訊技術的​​實時性​​優勢,使得人與人之間的溝通和交流突破了空間、時間等等限制,讓資訊的傳遞變的無處不在。

但網際網路為我們的生活帶來極大便利的同時,使用者的隐私和通信安全問題也随之而來。

對于IM應用開發者來說,資訊溝通的開放性也意味着風險性,使用者與網絡和移動裝置的高度依賴,也為不法之徒提供了可乘之機。是以,提升即時通訊應用的安全性尤其重要。

本篇文章将圍繞IM通信連接配接層的安全問題及實作方案,聚焦IM網絡“鍊路安全”,希望能帶給你啟發。

即時通訊安全篇(十):IM聊天系統安全手段之通信連接配接層加密技術

學習交流:

- 移動端IM開發入門文章:《​​新手入門一篇就夠:從零開發移動端IM​​》

- 開源IM架構源碼:​​https://github.com/JackJiang2011/MobileIMSDK​​(​​備用位址點此​​)

(本文已同步釋出于:​​http://www.52im.net/thread-4015-1-1.html​​)

2、系列文章

本文是IM通訊安全知識系列文章中的第10篇,此系列總目錄如下:

  • 《​​即時通訊安全篇(一):正确地了解和使用Android端加密算法​​》
  • 《​​即時通訊安全篇(二):探讨組合加密算法在IM中的應用​​》
  • 《​​即時通訊安全篇(三):常用加解密算法與通訊安全講解​​》
  • 《​​即時通訊安全篇(四):執行個體分析Android中密鑰寫死的風險​​》
  • 《​​即時通訊安全篇(五):對稱加密技術在Android平台上的應用實踐​​》
  • 《​​即時通訊安全篇(六):非對稱加密技術的原理與應用實踐​​》
  • 《​​即時通訊安全篇(七):如果這樣來了解HTTPS原理,一篇就夠了​​》
  • 《​​即時通訊安全篇(八):你知道,HTTPS用的是對稱加密還是非對稱加密?​​》
  • 《​​即時通訊安全篇(九):為什麼要用HTTPS?深入淺出,探密短連接配接的安全性​​》
  • 《​​即時通訊安全篇(十):IM聊天系統安全手段之通信連接配接層加密技術​​》(* 本文)
  • 《即時通訊安全篇(十一):IM聊天系統安全手段之傳輸内容端到端加密技術》(稍後釋出...)

3、即時通訊面臨的安全問題

1)竊取内容:如果在整個即時通訊的通信過程中,其資料内容是未加密或弱加密的,那麼其資訊被截獲後就可以直接被讀取出來。

那麼,這就會導緻使用者資料(包括個人隐私資料)的洩露,甚至可能危害使用者的财産安全(比如微信這類IM中,紅包、錢包都會涉及财産安全)。如果在辦公場景下,被竊取的還可能是公司商業機密,那勢必将會造成更大的經濟損失。

2)篡改内容:如果通信内容被截獲後,對其進行修改再發送,會破壞資訊的正确性和完整性(此消息已非彼消息)。

3)僞造内容:如果使用者通信憑證(比如token)被竊取或在通信過程中穿插其他資訊,就可能為冒用使用者身份騙取與之通信者的信任創造可能,埋下更大的安全隐患。

4)傳播不法内容:基于即時通訊系統的消息推送能力,不法分子除了可能傳播涉黃、涉賭、暴恐或危害國家安全的資訊外,還可能傳播計算機muma bingdu等,可能帶來的危害範圍将進一步擴大。

4、常用的網際網路gongji手段

網絡通信過程中常見的gongji手段:

即時通訊安全篇(十):IM聊天系統安全手段之通信連接配接層加密技術

1)移植muma:過在終端移植muma,截獲或篡改資訊。

2)僞造應用:通過僞造 APP 或在 APP 中添加後門等方式,使終端使用者誤以為是正常應用進行使用,進而達到其不法目的。

3)網絡抓包:通過在網絡裝置上進行抓包,擷取使用者通信内容。

4)中間人gongji:通過劫持 DNS 等手段,使使用者通信連接配接經過gongji者的裝置,進而達到竊取、篡改等目的。

5)漏洞挖掘:服務端或終端除了自有的程式以外還包含了各種三方元件或中間件,通過挖掘其上的漏洞,達到不法目的。

從上圖和手段可知,聊天資訊從應用經過網絡到達服務端,這期間的任何一個環節都有可能被人利用。是以,在“危機四伏”的網際網路絡通信中,“安全”必須重視。

5、密碼學在即時通訊系統中的應用

5.1 基本常識

針對前述的安全問題和gongji手段,将密碼學應用在即時通訊系統連接配接上,對通信資料進行加密就變得尤為重要。

密碼學解決資訊安全的三要素(CIA)即:

  • 1)機密性(Confidentiality):保證資訊不洩露給未經授權的使用者;
  • 2)完整性(Integrity):保證資訊從真實的發信者傳送到真實的收信者手中,傳送過程中沒有被非法使用者添加、删除、替換等;
  • 3)可用性(Availability):保證授權使用者能對資料進行及時可靠的通路。

以上表述,好像有點繞口,我們換個通俗一點的表述。。。

密碼學在網絡通信中的三大作用就是:

  • 1)加密:防止壞人擷取你的資料;
  • 2)認證:防止壞人修改了你的資料而你卻并沒有發現;
  • 3)鑒權:防止壞人假冒你的身份。

除 CIA 外,還有一些屬性也是要求達到的,如可控性(Controllability)和不可否認性(Non-Repudiation)。

5.2 在即時通訊中的應用

作為即時通訊中的關鍵組成,IM即時通訊系統為了實作消息的快速、​​實時​​送達,一般需要用戶端與伺服器端建立一條socket長連接配接,用以快速地将消息送達到用戶端。

通常即時通訊用戶端會以 ​​TCP​​ 或 ​​UDP​​ 的方式與伺服器建立連接配接,同時某些場景下也會使用 HTTP 的方式從伺服器擷取或送出一些資訊。

整個過程中所有的資料都需進行加密處理,簡單的資料加密和解密過程可以歸納為:發送方輸入明文 -> 加密 -> 生成密文 -> 傳輸密文 -> 接收方解密 -> 得到明文。

這其中,會涉及:

  • 1)對稱加密算法(詳見《​​對稱加密技術在Android平台上的應用實踐​​》)
  • 2)非對稱加密算法(詳見《​​非對稱加密技術的原理與應用實踐​​》);
  • 3)資訊摘要算法(詳見《​​常用加解密算法與通訊安全講解​​》)。

這其中,我國也有一套自有的密碼算法(國密算法):國密算法,即國家商用密碼算法,是由國家密碼管理局認定和公布的密碼算法标準及其應用規範,其中部分密碼算法已經成為國際标準。如 SM 商用系列密碼:對稱加密算法 SM4、非對稱加密算法 SM2、資訊摘要算法 SM3。

6、通信連接配接層的會話加密

對于連接配接層面(鍊路層面)面的加密,應最先考慮的是基于 SSL/TLS 協定進行鍊路加密(比如微信的作法:《​​微信新一代通信安全解決方案:基于TLS1.3的MMTLS詳解​​》),這是現代網絡通信安全的基石。

很多人認為 SSL/TLS 協定是附加在 HTTP 協定上的,是 HTTPS 的一部分(詳見《​​為什麼要用HTTPS?深入淺出,探密短連接配接的安全性​​》)。

其實這種了解不完全正确,SSL/TLS 是獨立于應用層協定的,高層協定可以透明地分布在 SSL/TLS 協定上面。是以基于socket長連接配接的IM即時消息通訊協定也可以建構在 SSL/TLS 協定上面。

SSL/TLS 是獨立于應用層協定:

即時通訊安全篇(十):IM聊天系統安全手段之通信連接配接層加密技術

SSL/TLS 可以被簡單地歸納為:利用基于公私鑰體系的​​非對稱加密算法​​,傳輸​​對稱加解密算法​​的密鑰,并将後續通訊的資料包基于雙方相同的對稱加解密算法和密鑰進行加密并傳輸,進而達到保證資料安全通訊的目的。

非對稱加密算法裡面的公鑰和私鑰在數學上是相關的,這樣才能用一個加密、用另一個解密。不過,盡管是相關的,但以現有的數學算法,是沒有辦法從一個密鑰算出另一個密鑰。

另外需要着重強調的是:在系統中不要使用自簽證書,而要使用具備 CA 認證的證書,這樣可以有效的防止中間人gongji。

7、基于SSL/TLS的通信連接配接層如何實作會話的快速恢複

7.1 概述

用戶端和伺服器端建立 SSL/TLS 握手時,需要完成很多步驟:密鑰協商出會話密鑰、數字簽名身份驗證、消息驗證碼 MAC 等。

整個握手階段比較耗時的是密鑰協商,需要密集的 CPU 處理。當用戶端和伺服器斷開了本次會話連接配接,那麼它們之前連接配接時協商好的會話密鑰就消失了。在下一次用戶端連接配接伺服器時,便要進行一次新的完整的握手階段。

這似乎沒什麼問題,但是當系統中某一時間段裡有大量的連接配接請求送出時,就會占用大量伺服器資源,導緻網絡延遲增加。

為了解決上面的問題,TLS/SSL 協定中提供了會話恢複的方式,允許用戶端和伺服器端在某次關閉連接配接後,下一次用戶端通路時恢複上一次的會話連接配接。

會話恢複有兩種:

  • 1)一種是基于 Session ID 的恢複;
  • 2)一種是使用 Session Ticket TLS 擴充。

下面來看看兩種方式的優劣。

7.2 基于Session ID的SSL/TLS長連接配接會話恢複

一次完整的握手階段結束後,用戶端和伺服器端都儲存有這個 Session ID。

在本次會話關閉,下一次再次連接配接時:用戶端在 Client Hello 子消息中附帶這個 Session ID 值,伺服器端接收到請求後,将 Session ID 與自己在 Server Cache 中儲存的 Session ID 進行比對。

如果比對成功:伺服器端就會恢複上一次的 TLS 連接配接,使用之前協商過的密鑰,不重新進行密鑰協商,伺服器收到帶 Session ID 的 Client Hello 且比對成功後,直接發送 ChangeCipherSpec 子協定,告訴 TLS 記錄層将連接配接狀态切換成可讀和可寫,就完成會話的恢複。

基于Session ID 會話恢複原理:

即時通訊安全篇(十):IM聊天系統安全手段之通信連接配接層加密技術

雖然使用 Session ID 進行會話恢複可以減少耗時的步驟,但由于 Session ID 主要儲存在伺服器 Server Cache 中,若再次連接配接請求時由于負載均衡設定将請求重定位到了其他伺服器上,此時新的伺服器 Server Cache 中沒有緩存與用戶端比對的 Session ID,會導緻會話無法恢複無法進行,是以不建議選用  Session ID 方式進行會話恢複。

7.3 基于SessionTicket的SSL/TLS長連接配接會話恢複

一次完整的握手過程後,伺服器端将本次的會話資料(會話辨別符、證書、密碼套件和主密鑰等)進行加密,加密後生成一個 ticket ,并将 ticket 通過 NewSessionTicket 子消息發送給用戶端,由用戶端來儲存,下一次連接配接時用戶端就将 ticket 一起發送給伺服器端,待伺服器端解密校驗無誤後,就可以恢複上一次會話。

基于SessionTicket 會話恢複原理:

即時通訊安全篇(十):IM聊天系統安全手段之通信連接配接層加密技術

由于加解密都是在服務端閉環進行,多服務隻需要共享密鑰就可以完成此過程,相較于 Session ID 的方式,可以不依賴 Server Cache,是以 SessionTicket 會話恢複方式更有利于大型分布式系統使用。

8、本文小結

本文分享了IM即時通訊的通信連接配接層安全知識和加密技術等。

并着重強調了兩方面内容。首先,在IM即時通訊系統中使用具備 CA 認證的 SSL/TLS 證書可以保證傳輸安全,防止傳輸過程被監聽、防止資料被竊取,确認連接配接的真實性。其次,利用 SessionTicket 快速地進行會話恢複可以提高整體系統性能,降低連接配接延時。

本文的下篇《即時通訊安全篇(十一):IM聊天系統安全手段之傳輸内容端到端加密技術》,将繼續分享基于IM傳輸内容的端到端加密技術,敬請關注。

9、參考資料

[1] ​​TCP/IP詳解​​ - ​​第11章·UDP:使用者資料報協定​​

[2] ​​TCP/IP詳解​​ - ​​第17章·TCP:傳輸控制協定​​

[3] ​​網絡程式設計懶人入門(三):快速了解TCP協定一篇就夠​​

[4] ​​網絡程式設計懶人入門(四):快速了解TCP和UDP的差異​​

[5] ​​零基礎IM開發入門(二):什麼是IM系統的實時性?​​

[6] ​​對稱加密技術在Android平台上的應用實踐​​

[7] ​​非對稱加密技術的原理與應用實踐​​

[8] ​​常用加解密算法與通訊安全講解​​

[9]​​微信新一代通信安全解決方案:基于TLS1.3的MMTLS詳解​​

繼續閱讀