Jack Jiang

          我的最新工程MobileIMSDK:http://git.oschina.net/jackjiang/MobileIMSDK
          posts - 494, comments - 13, trackbacks - 0, articles - 1

          本文由夏冰軟件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)用。

          2、系列文章

          1. 零基礎(chǔ)IM開發(fā)入門(一):什么是IM系統(tǒng)?
          2. 零基礎(chǔ)IM開發(fā)入門(二):什么是IM系統(tǒng)的實(shí)時性?
          3. 零基礎(chǔ)IM開發(fā)入門(三):什么是IM系統(tǒng)的可靠性?
          4. 零基礎(chǔ)IM開發(fā)入門(四):什么是IM系統(tǒng)的消息時序一致性?
          5. 零基礎(chǔ)IM開發(fā)入門(五):什么是IM系統(tǒng)的端到端加密?* 本文)》
          6. 《零基礎(chǔ)IM開發(fā)入門(六):什么是IM系統(tǒng)的的心跳機(jī)制? (稍后發(fā)布)》
          7. 《零基礎(chǔ)IM開發(fā)入門(七):如何理解并實(shí)現(xiàn)IM系統(tǒng)消息未讀數(shù)? (稍后發(fā)布)》
          8. 《零基礎(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ù)深入閱讀我整理的以下幾篇資料。

          1. IM聊天系統(tǒng)安全手段之通信連接層加密技術(shù)
          2. IM聊天系統(tǒng)安全手段之傳輸內(nèi)容端到端加密技術(shù)
          3. 移動端安全通信的利器——端到端加密(E2EE)技術(shù)詳解
          4. 簡述實(shí)時音視頻聊天中端到端加密(E2EE)的工作原理

          9、參考資料

          [1] 網(wǎng)絡(luò)編程懶人入門(三):快速理解TCP協(xié)議一篇就夠

          [2] 即時通訊初學(xué)者必知必會的20個網(wǎng)絡(luò)編程和通信安全知識點(diǎn)

          [3] 為什么要用HTTPS?深入淺出,探密短連接的安全性

          [4] 理論聯(lián)系實(shí)際:一套典型的IM通信協(xié)議設(shè)計詳解(含安全層設(shè)計)

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

          [6] 移動端安全通信的利器——端到端加密(E2EE)技術(shù)詳解

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

          [8] 通俗易懂:一篇掌握即時通訊的消息傳輸安全原理

          [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 找到我)。


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          Jack Jiang的 Mail: jb2011@163.com, 聯(lián)系QQ: 413980957, 微信: hellojackjiang
          主站蜘蛛池模板: 安西县| 山东| 绥芬河市| 云南省| 舞钢市| 云和县| 镶黄旗| 错那县| 谢通门县| 康马县| 彩票| 平乡县| 黎平县| 马尔康县| 蒲江县| 石泉县| 攀枝花市| 景洪市| 察雅县| 昌黎县| 亚东县| 福贡县| 宣威市| 永胜县| 涞水县| 阳曲县| 永登县| 宁都县| 东海县| 普定县| 盱眙县| 余庆县| 凤阳县| 吉隆县| 朔州市| 宜宾市| 阜平县| 沂源县| 聂荣县| 崇文区| 灌云县|