本文由夏冰軟件cc分享,下文進(jìn)行了排版和內(nèi)容優(yōu)化。
1、引言
本文接上篇《什么是IM系統(tǒng)的消息時序一致性?》,本篇將通俗易懂地講解IM系統(tǒng)中的端到端加密原理,為了降低閱讀門檻,相關(guān)的技術(shù)概念會提及但不深入展開。
IM即時通訊系統(tǒng)的技術(shù)本質(zhì)是“即時消息技術(shù)”,是互聯(lián)網(wǎng)實(shí)時互動場景的底層架構(gòu),包括聊天、直播、在線客服等業(yè)務(wù)領(lǐng)域在內(nèi),所有需要實(shí)時互動、高實(shí)時性的場景,都需要用到IM技術(shù)。而為了讓即時通訊更安全,高安全場景下的IM系統(tǒng)通常會使用端到端加密技術(shù)進(jìn)行通訊加密。下面我們就來了解一下端到端加密技術(shù)在IM系統(tǒng)中的應(yīng)用。

技術(shù)交流:
- 移動端IM開發(fā)入門文章:《新手入門一篇就夠:從零開發(fā)移動端IM》
- 開源IM框架源碼:https://github.com/JackJiang2011/MobileIMSDK(備用地址點(diǎn)此)
2、系列文章
- 《零基礎(chǔ)IM開發(fā)入門(一):什么是IM系統(tǒng)?》
- 《零基礎(chǔ)IM開發(fā)入門(二):什么是IM系統(tǒng)的實(shí)時性?》
- 《零基礎(chǔ)IM開發(fā)入門(三):什么是IM系統(tǒng)的可靠性?》
- 《零基礎(chǔ)IM開發(fā)入門(四):什么是IM系統(tǒng)的消息時序一致性?》
- 《零基礎(chǔ)IM開發(fā)入門(五):什么是IM系統(tǒng)的端到端加密?(* 本文)》
- 《零基礎(chǔ)IM開發(fā)入門(六):什么是IM系統(tǒng)的的心跳機(jī)制? (稍后發(fā)布)》
- 《零基礎(chǔ)IM開發(fā)入門(七):如何理解并實(shí)現(xiàn)IM系統(tǒng)消息未讀數(shù)? (稍后發(fā)布)》
- 《零基礎(chǔ)IM開發(fā)入門(八):如何理解并實(shí)現(xiàn)IM系統(tǒng)的多端消息漫游? (稍后發(fā)布)》
3、網(wǎng)絡(luò)通訊數(shù)據(jù)加密的3個層次
3.1 概述
一般的數(shù)據(jù)加密可以在通信的3個層次來實(shí)現(xiàn):鏈路加密、節(jié)點(diǎn)加密和端到端加密。

3.2 鏈路加密
對于在兩個網(wǎng)絡(luò)節(jié)點(diǎn)間的某一次通信鏈路,鏈路加密能為網(wǎng)上傳輸?shù)臄?shù)據(jù)提供安全保證。對于鏈路加密(又稱在線加密),所有消息在被傳輸之前進(jìn)行加密,在每一個節(jié)點(diǎn)對接收到的消息進(jìn)行解密,然后先使用下一個鏈路的密鑰對消息進(jìn)行加密,再進(jìn)行傳輸。
在到達(dá)目的地之前,一條消息可能要經(jīng)過許多通信鏈路的傳輸。由于在每一個中間傳輸節(jié)點(diǎn)消息均被解密后重新進(jìn)行加密,因此,包括路由信息在內(nèi)的鏈路上的所有數(shù)據(jù)均以密文形式出現(xiàn),這樣,鏈路加密就掩蓋了被傳輸消息的源點(diǎn)與終點(diǎn)。由于填充技術(shù)的使用以及填充字符在不需要傳輸數(shù)據(jù)的情況下就可以進(jìn)行加密,這使得消息的頻率和長度特性得以掩蓋,從而可以防止對通信業(yè)務(wù)進(jìn)行分析。
相關(guān)文章推薦閱讀:《IM聊天系統(tǒng)安全手段之通信連接層加密技術(shù)》。
3.3 節(jié)點(diǎn)加密
盡管節(jié)點(diǎn)加密能給網(wǎng)絡(luò)數(shù)據(jù)提供較高的安全性,但它在操作方式上與鏈路加密是類似的:兩者均在通信鏈路上為傳輸?shù)南⑻峁┌踩裕荚谥虚g節(jié)點(diǎn)先對消息進(jìn)行解密,然后進(jìn)行加密。因?yàn)橐獙λ袀鬏數(shù)臄?shù)據(jù)進(jìn)行加密,所以加密過程對用戶是透明的。然而,與鏈路加密不同,節(jié)點(diǎn)加密不允許消息在網(wǎng)絡(luò)節(jié)點(diǎn)以明文形式存在,它先把收到的消息進(jìn)行解密,然后采用另一個不同的密鑰進(jìn)行加密,這一過程是在節(jié)點(diǎn)上的一個安全模塊中進(jìn)行。
節(jié)點(diǎn)加密要求報頭和路由信息以明文形式傳輸,以便中間節(jié)點(diǎn)能得到如何處理消息的信息,因此這種方法對于防止攻擊者分析通信業(yè)務(wù)是脆弱的。
3.4 端到端加密
端到端加密允許數(shù)據(jù)在從源點(diǎn)到終點(diǎn)的傳輸過程中始終以密文形式存在。采用端到端加密(又稱脫線加密或包加密),消息在被傳輸時到達(dá)終點(diǎn)之前不進(jìn)行解密,因?yàn)橄⒃谡麄€傳輸過程中均受到保護(hù),所以即使有節(jié)點(diǎn)被損壞也不會使消息泄露。
端到端加密系統(tǒng)的價格便宜些,并且與鏈路加密和節(jié)點(diǎn)加密相比更可靠,更容易設(shè)計、實(shí)現(xiàn)和維護(hù)。端到端加密還避免了其它加密系統(tǒng)所固有的同步問題,因?yàn)槊總€報文包均是獨(dú)立被加密的,所以一個報文包所發(fā)生的傳輸錯誤不會影響后續(xù)的報文包。端到端加密系統(tǒng)通常不允許對消息的目的地址進(jìn)行加密,這是囚為每一個消息所經(jīng)過的節(jié)點(diǎn)都要用此地址來確定如何傳輸消息。由于這種加密方法不能掩蓋被傳輸消息的源點(diǎn)與終點(diǎn),因此它對于防止攻擊者分析通信業(yè)務(wù)是脆弱的。
沒有使用端到端加密時的通信原理圖(各個環(huán)節(jié)都存在泄密的可能):

使用端到端加密后的通信原理圖(除了發(fā)送者和接收者,其它環(huán)境都是密文狀態(tài)):

4、IM系統(tǒng)中的端到端加密原理
在IM系統(tǒng)中,當(dāng)用戶A發(fā)送消息給用戶B時,IM系統(tǒng)會生成一對公鑰和私鑰,并將公鑰發(fā)送給用戶B。用戶A使用用戶B的公鑰對消息進(jìn)行加密,然后將加密后的消息發(fā)送給用戶B。

在用戶B接收到消息后,使用自己的私鑰對消息進(jìn)行解密,從而獲取明文內(nèi)容。由于私鑰只有用戶B擁有,因此除了用戶B之外,任何人都無法解密消息。
沒有使用端到端加密時的聊天消息存在諸多風(fēng)險:

使用了端到端加密后的聊天就安全多了:

5、IM系統(tǒng)使用端到端加密的好處
數(shù)據(jù)安全性:在IM系統(tǒng)中,端到端加密可以確保消息在傳輸過程中始終保持加密狀態(tài),防止黑客和第三方竊取用戶的通信內(nèi)容。
隱私保護(hù):由于消息內(nèi)容只有通信雙方能夠解密和閱讀,即使是IM系統(tǒng)應(yīng)用自身也無法獲取明文內(nèi)容。這意味著用戶的隱私得到了最大程度的保護(hù)。
抗竊聽:IM系統(tǒng)使用端到端加密技術(shù),使得竊聽者無法獲取通信內(nèi)容,從而有效防止了竊聽行為的發(fā)生。

6、IM系統(tǒng)使用端到端加密的意義
由于在數(shù)據(jù)傳輸?shù)椒?wù)器之后,任何有權(quán)訪問此服務(wù)器的人,包括員工、供應(yīng)商及其他有關(guān)人員(甚至是黑客),都有可能讀取到用戶的數(shù)據(jù)。
所以,使用端到端加密技術(shù)主要有以下意義:
1)保護(hù)個人隱私:在信息時代,個人隱私面臨著越來越大的威脅。在IM系統(tǒng)中使用端到端加密可以有效保護(hù)了用戶的通信內(nèi)容,確保個人隱私不被侵犯。
2)防止數(shù)據(jù)泄露:許多用戶在社交軟件中分享了大量的個人信息和敏感數(shù)據(jù)。而IM系統(tǒng)中的端到端加密就可以確保這些數(shù)據(jù)在傳輸過程中不會被竊取,從而避免了數(shù)據(jù)泄露的風(fēng)險。
3)抵御網(wǎng)絡(luò)攻擊:黑客和網(wǎng)絡(luò)犯罪分子經(jīng)常利用網(wǎng)絡(luò)漏洞和弱點(diǎn)來攻擊用戶的通信。IM系統(tǒng)中的端到端加密可以有效防止這些攻擊,保護(hù)用戶的通信安全。
4)維護(hù)社交關(guān)系:人們越來越依賴社交應(yīng)用來保持聯(lián)系和交流。IM系統(tǒng)使用端到端加密可以使得用戶能夠放心地分享私密信息,維護(hù)社交關(guān)系的同時保護(hù)了個人隱私。

7、IM系統(tǒng)使用端到端加密的不足
通訊效率低:由于端對端加密需要對通訊數(shù)據(jù)進(jìn)行加密和解密,因此可能會導(dǎo)致通信效率較低。
需雙向支持:端對端加密需要發(fā)送方和接收方都需要支持該技術(shù),否則就將無法實(shí)現(xiàn)端對端加密通信。
安全性問題:雖然端對端加密可以防止中間人攻擊,但如果黑客能夠獲得了私鑰或公鑰,那么他們也能夠輕易地獲取到通信數(shù)據(jù)。
8、延伸閱讀
本文內(nèi)容主要是面向即時通訊技術(shù)的初學(xué)者以及產(chǎn)品經(jīng)理,所以相關(guān)的技術(shù)概念都沒有深入探討,感光趣的可以繼續(xù)深入閱讀我整理的以下幾篇資料。
- IM聊天系統(tǒng)安全手段之通信連接層加密技術(shù)
- IM聊天系統(tǒng)安全手段之傳輸內(nèi)容端到端加密技術(shù)
- 移動端安全通信的利器——端到端加密(E2EE)技術(shù)詳解
- 簡述實(shí)時音視頻聊天中端到端加密(E2EE)的工作原理
9、參考資料
[1] 網(wǎng)絡(luò)編程懶人入門(三):快速理解TCP協(xié)議一篇就夠
[2] 即時通訊初學(xué)者必知必會的20個網(wǎng)絡(luò)編程和通信安全知識點(diǎn)
[4] 理論聯(lián)系實(shí)際:一套典型的IM通信協(xié)議設(shè)計詳解(含安全層設(shè)計)
[5] 微信新一代通信安全解決方案:基于TLS1.3的MMTLS詳解
[6] 移動端安全通信的利器——端到端加密(E2EE)技術(shù)詳解
[7] 常用加解密算法與通訊安全講解
[9] 基于Netty的IM聊天加密技術(shù)學(xué)習(xí):一文理清常見的加密概念、術(shù)語等
[10] 手把手教你為基于Netty的IM生成自簽名SSL/TLS證書
[11] 微信技術(shù)分享:揭秘微信后臺安全特征數(shù)據(jù)倉庫的架構(gòu)設(shè)計
[12] 即時通訊初學(xué)者必知必會的20個網(wǎng)絡(luò)編程和通信安全知識點(diǎn)
(本文已同步發(fā)布于:http://www.52im.net/thread-4792-1-1.html)
作者:Jack Jiang (點(diǎn)擊作者姓名進(jìn)入Github)
出處:http://www.52im.net/space-uid-1.html
交流:歡迎加入即時通訊開發(fā)交流群 215891622
討論:http://www.52im.net/
Jack Jiang同時是【原創(chuàng)Java
Swing外觀工程BeautyEye】和【輕量級移動端即時通訊框架MobileIMSDK】的作者,可前往下載交流。
本博文
歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明出處(也可前往 我的52im.net 找到我)。