在消息產生、流轉的各個環節中,需要保證消息傳輸安全性、消息存儲安全性、消息內容安全性。
一、消息傳輸安全性
消息傳輸的重要防范點有兩個,一是訪問入口安全,二是傳輸鏈路安全。
1.HttpDNS保證訪問入口安全
訪問入口指的是即時消息服務中提供的一個公網的接入服務,作為用戶收發消息的出入口,它通過域名的方式提供給客戶端。常見的問題有DNS劫持。
DNS劫持的原因
1)路由器的DNS設置被非法侵入篡改;
2)運營商的LocalDNS可能會導致接入域名的解析被劫持。
這里先解釋一下:LocalDNS是部分運營商為了降低跨網流量,緩存部分域名的指向內容,把域名強行指向自己的內容緩存服務器的IP地址。
- 運營商可能會修改DNS的TTL(time-to-live,DNS緩存時間),導致DNS的變更生效延遲,影響服務可用性。
- 運營商可能為了減輕自身的資源壓力,把DNS請求轉發給其他運營商解析,這樣分配的IP地址可能存在跨運營商訪問的問題,導致請求變慢甚至不可用。
防止DNS劫持的方法
1)如果是路由器的DNS被篡改,可以重置路由器的配置,修改路由管理登錄密碼。
2)如果是運營商LocalDNS的域名劫持和調度錯誤,可以使用HttpDNS。
- HttpDNS繞開了運營商的LocalDNS,通過HTTP協議來直接和DNS服務器交互,有效防止域名被運營商劫持。
- HttpDNS服務器能夠獲取到真實的用戶出口IP,因而能選擇離用戶更近的節點進行接入,或者一次返回多個接入IP,使客戶端通過測速等方式選擇速度更快的接入IP,使接入調度更精准。
2.TLS傳輸層加密協議保證傳輸鏈路安全
消息傳輸鏈路出現問題主要有以下幾個原因:
1)中斷:攻擊者破壞或切斷網絡,破壞服務可用性,屬於主動攻擊;
2)截獲:攻擊者非法竊取傳輸的消息內容,屬於被動攻擊;
3)篡改:攻擊者非法篡改傳輸的消息內容,破壞消息的完整性和真實語義;
4)偽造:攻擊者偽造正常的通訊消息模擬正常用戶或者模擬IM服務端。
針對第一種原因,可以采取多通道方式提升鏈路可用性,從而解決消息鏈路中斷;
針對后三種原因,可以利用私有協議和TLS(消息內容加密)進行防控。
TLS巧妙地把“對稱加密算法”、“非對稱加密算法”、“密鑰交換算法”、“消息認證碼算法”、“數字簽名證書”、“CA認證”進行結合,有效地解決了消息傳輸過程中的截獲、篡改、偽造問題。
二、消息存儲安全性
如果消息存儲在服務端,不管消息內容是明文還是密文,都會存在泄露的風險。保證消息內容存儲安全性的最好方式是:
1.消息內容不在服務端存儲(這個沒啥好說的,估計大部分場景都需要存儲在服務端);
2.消息內容采用“端到端加密”(E2EE),中間任何鏈路環節都不對消息進行解密,這樣除了收發雙方,其它任何中間環節都無法獲取消息原文內容。
“端到端加密”之所以更加安全,是因為和服務端TLS加密不一樣。
它是由通信雙方各自生成密鑰對並進行公鑰的交換,私鑰各自保存在本地不給到IM服務端。
發送方的消息使用接收方的公鑰來進行加密,因此即使IM服務端拿到了加密消息,也會因為沒有接收方的私鑰無法解密。
三、消息內容安全性
內容安全性主要指的是內容的識別和傳播的控制,一般依托於第三方的內容識別服務來進行防范。常見的方案有:
1.建立敏感詞庫,針對文字內容進行安全識別。
2.依托圖片識別技術來對色情圖片/視頻/廣告、涉政圖片等進行識別、處理。
3.使用“語音轉文字”和OCR(圖片文本識別)輔助圖片、語音的進一步挖掘識別。
4.通過爬蟲技術對鏈接進行分析,識別“風險外鏈”。
對於IM服務端來說,要做的是建立與“識別”配套的懲罰處置機制,比如識別到群里有人發色情圖片,就對該用戶進行“禁言”處理,或者進行“解散群”的操作,具體業務具體分析。