楊旸 王明華 潘俊臣 胡沖
摘? ?要:文章分析研究了WebAssembly的相關(guān)技術(shù),提出了一種基于瀏覽器WebAssembly虛擬機(jī)加密的即時(shí)通信加密通信系統(tǒng)方案。系統(tǒng)瀏覽器的客戶端之間加密通信采用端到端的加密機(jī)制,傳輸信息的加密密鑰自動(dòng)生成、安全分發(fā),能夠?qū)崿F(xiàn)通信傳輸全過程加密和通信加密“一次一密”,有效地抵御攻擊者分析、破譯瀏覽器客戶端之間的加密傳輸通信信息。
關(guān)鍵詞:WebAssembly;瀏覽器;三層密鑰體系;密鑰協(xié)商;即時(shí)通信加密
1 引言
即時(shí)通信作為互聯(lián)網(wǎng)上被廣泛使用的網(wǎng)絡(luò)應(yīng)用,可為用戶提供文字、語音、圖片、文件等多種媒體信息通信的能力,在用戶的工作和生活中發(fā)揮出越來越大的作用。在對(duì)獲得便捷、高效地通信體驗(yàn)的同時(shí),用戶出于個(gè)人隱私和企業(yè)秘密的保護(hù),對(duì)即時(shí)通信信息安全需求也越發(fā)迫切[1]。本文旨在研究設(shè)計(jì)一套基于WebAssembly技術(shù)的即時(shí)通信加密通信系統(tǒng),實(shí)現(xiàn)即時(shí)通信的信息安全傳輸,同時(shí)實(shí)現(xiàn)了基于瀏覽器的跨平臺(tái)即時(shí)通信客戶端,可為用戶提供安全的即時(shí)通信和多平臺(tái)下便捷的客戶端訪問。
如今的智能手機(jī)終端操作系統(tǒng)主要有兩類:谷歌的Android系統(tǒng)和蘋果的iOS系統(tǒng)。而計(jì)算機(jī)桌面的操作系統(tǒng),則有微軟的Windows,蘋果的Mac OS和Linux等。即時(shí)通信加密通信系統(tǒng)若要為不同的終端類型和操作系統(tǒng)開發(fā)和適配不同的即時(shí)通信APP軟件,則會(huì)存在開發(fā)成本高、用戶使用成本高、產(chǎn)品迭代速度慢、系統(tǒng)維護(hù)復(fù)雜等諸多問題。研究設(shè)計(jì)基于瀏覽器的即時(shí)通信加密通信系統(tǒng)具有現(xiàn)實(shí)意義,系統(tǒng)可部署運(yùn)行于公眾互聯(lián)網(wǎng)絡(luò),實(shí)現(xiàn)即時(shí)消息傳輸加密,同時(shí)通過瀏覽器實(shí)現(xiàn)客戶端的跨平臺(tái)訪問。
在各類瀏覽器中,即使Chrome、Firefox、Safari、Edge能夠運(yùn)行的語言是JavaScript,但是由于傳統(tǒng) JavaScript這門解釋性腳本語言本身的缺陷,使得瀏覽器端的即時(shí)通信加密性能很不理想[2]。本方案重點(diǎn)研究WebAssembly技術(shù)在瀏覽器上的應(yīng)用,WebAssembly是一種運(yùn)行在網(wǎng)絡(luò)瀏覽器中低級(jí)的類匯編語言,具有緊湊的二進(jìn)制格式,與JavaScript相比,可以使得瀏覽器端即時(shí)通信中加密運(yùn)算性能得到明顯提升。
2 WebAssembly技術(shù)
WebAssembly(簡稱“WASM”)是一種以安全有效地方式運(yùn)行可移植程序的新技術(shù),主要針對(duì)Web平臺(tái)[3]。它是一種可以使用非 JavaScript 編程語言編寫代碼并且能在瀏覽器上運(yùn)行的技術(shù)方案。它可以用高級(jí)語言編譯出字節(jié)碼放到WebAssembly虛擬機(jī)中運(yùn)行,各瀏覽器廠商根據(jù)WebAssembly字節(jié)碼標(biāo)準(zhǔn)規(guī)范實(shí)現(xiàn)虛擬機(jī)。
WebAssembly格式是一種新的字節(jié)碼格式,和JavaScript需要解釋執(zhí)行不同的是,WebAssembly字節(jié)碼和底層機(jī)器碼很相似,可快速裝載運(yùn)行,因此性能相對(duì)于JavaScript解釋執(zhí)行大大提升。相對(duì)于JavaScript,WebAssembly有三個(gè)優(yōu)點(diǎn)。
(1)體積小。由于瀏覽器運(yùn)行時(shí)只加載編譯成的字節(jié)碼,一樣的邏輯比字符串描述的JavaScript文件體積小很多。
(2)加載快。由于文件體積小,再加上無需解釋執(zhí)行,WebAssembly能更快的加載并實(shí)例化,減少運(yùn)行前的等待時(shí)間。
(3)兼容問題少。WebAssembly是非常底層的字節(jié)碼規(guī)范,制定好以后很少變動(dòng),就算發(fā)生變化,只需要從高級(jí)語言編譯成字節(jié)碼過程做兼容。
3 基于混合密碼體制和多層密鑰體系
基于即時(shí)通信業(yè)務(wù)的應(yīng)用特點(diǎn),加密的密碼體制采用非對(duì)稱密碼和對(duì)稱密碼相結(jié)合的混合密碼體制[4]。業(yè)務(wù)信息加密和本地存儲(chǔ)加密采用對(duì)稱密鑰密碼體制,即時(shí)通信密鑰協(xié)商采用非對(duì)稱密碼體制和對(duì)稱密碼體制結(jié)合實(shí)現(xiàn)。
系統(tǒng)設(shè)計(jì)非對(duì)稱的用戶密鑰、對(duì)稱的密鑰加密密鑰、會(huì)話密鑰三層密鑰體系,為即時(shí)通信加密系統(tǒng)提供安全高效的密碼保護(hù),密鑰結(jié)構(gòu)如圖1所示。
用戶密鑰采用非對(duì)稱的公私鑰對(duì),提供密鑰管理中心與瀏覽器客戶端間的簽名認(rèn)證和密鑰加密密鑰協(xié)商服務(wù),以及瀏覽器客戶端間簽名認(rèn)證和會(huì)話密鑰協(xié)商服務(wù)。密鑰加密密鑰用于瀏覽器客戶端與密鑰分發(fā)中心間群組密鑰、會(huì)話密鑰分發(fā),以及管理信息的加密保護(hù)。會(huì)話密鑰用于業(yè)務(wù)信息的加密保護(hù)。
4 系統(tǒng)設(shè)計(jì)
4.1系統(tǒng)組成
即時(shí)通信加密通信系統(tǒng)由即時(shí)通信服務(wù)器、Web服務(wù)器和密鑰管理中心組成,組成結(jié)構(gòu)如圖2所示。
即時(shí)通信服務(wù)器為即時(shí)通信提供服務(wù),實(shí)現(xiàn)了對(duì)單人或群組的文字、圖片、語音、文件的收發(fā)[5]。Web服務(wù)器提供HTTPS的Web服務(wù),為手機(jī)終端(操作系統(tǒng)為iOS、Android)和PC終端用戶提供基于瀏覽器的操作界面,實(shí)現(xiàn)用戶注冊(cè)、點(diǎn)對(duì)點(diǎn)即時(shí)消息、群組即時(shí)消息等操作。同時(shí),Web服務(wù)器將加密功能代碼進(jìn)行WebAssembly封裝并且載入到終端瀏覽器虛擬機(jī)中,為即時(shí)消息內(nèi)容加密保護(hù)以及通信雙方身份鑒別提供安全保障。密鑰管理中心離線部署,為用戶離線分發(fā)密鑰和證書文件并通過用戶口令加密存儲(chǔ)在瀏覽器嵌入式數(shù)據(jù)庫indexeDB中。
4.2 部署示意
即時(shí)通信加密通信系統(tǒng)拓?fù)鋱D如圖3所示。
即時(shí)通信服務(wù)器和Web服務(wù)器支持用戶自建或者云端部署,用戶自建支持集群部署,通過LVS+Keepalived實(shí)現(xiàn)高可用性集群,LVS提供負(fù)載均衡,Keepalived提供健康檢查,故障轉(zhuǎn)移,提高系統(tǒng)的可用性。密鑰管理中心離線部署不聯(lián)網(wǎng),通過移動(dòng)存儲(chǔ)介質(zhì)將密鑰和證書文件導(dǎo)入到用戶終端瀏覽器內(nèi)。
4.3 密碼算法和密鑰配用
即時(shí)通信加密系統(tǒng)配置對(duì)稱分組密碼算法(以AES為例)、公鑰密碼算法(以ECC公鑰密鑰算法為例)和雜湊密碼算法(以SHA256為例)三類密碼算法[6]。對(duì)稱算法用于即時(shí)消息傳輸加密保護(hù)和本地?cái)?shù)據(jù)加密保護(hù)。ECC公鑰算法密鑰協(xié)商簽名驗(yàn)簽。雜湊算法用于計(jì)算簽名數(shù)據(jù)摘要和認(rèn)證口令保護(hù)。
即時(shí)通信加密系統(tǒng)配用的密鑰如表1所示。
4.4 即時(shí)通信安全性設(shè)計(jì)
4.4.1 點(diǎn)對(duì)點(diǎn)即時(shí)通信流程
點(diǎn)對(duì)點(diǎn)即時(shí)通信業(yè)務(wù)通過即時(shí)通信服務(wù)器中轉(zhuǎn)實(shí)現(xiàn),即時(shí)通信服務(wù)器為即時(shí)通信提供緩存與轉(zhuǎn)發(fā)服務(wù),實(shí)現(xiàn)文字、圖片、語音、短視頻等即時(shí)通信業(yè)務(wù)和通信信息的收發(fā)。具體流程如圖4所示。
(1)發(fā)送方發(fā)起點(diǎn)對(duì)點(diǎn)即時(shí)消息通信,用戶選擇接收方;
(2)發(fā)送方通過即時(shí)通信服務(wù)器與接收方進(jìn)行密鑰協(xié)商,具體密鑰協(xié)商流程參見4.4.3;
(3)發(fā)送方編輯即時(shí)消息,對(duì)消息進(jìn)行加密,消息加密機(jī)制參見4.4.4,然后將加密消息發(fā)送給即時(shí)通信服務(wù)器;
(4)即時(shí)通信服務(wù)器查找接收對(duì)象,若接收方在線,發(fā)送有消息提醒給接收方;
(5)接收方從即時(shí)通信服務(wù)器獲取消息內(nèi)容;如果是文字語音類消息,解密瀏覽器網(wǎng)頁閱讀消息;如果是文件圖片視頻類消息,將附件密文存儲(chǔ)在本地,通過瀏覽器打開附件,在內(nèi)存中解密閱讀;
(6)若接收方離線,待其上線后,向即時(shí)通信服務(wù)器查詢有新消息,則通過即時(shí)通信服務(wù)器獲取發(fā)送方的密鑰協(xié)商信息,獲取通信密鑰后,從即時(shí)通信服務(wù)器獲取消息進(jìn)行解密查看,查看方式和在線時(shí)相同。
4.4.2 群組即時(shí)通信流程
群組即時(shí)消息通信流程與點(diǎn)對(duì)點(diǎn)相似,在創(chuàng)建群組或成員加入群組時(shí),由發(fā)起群組即時(shí)消息的發(fā)起方與參與方進(jìn)行一對(duì)一的密鑰協(xié)商,協(xié)商出預(yù)主密鑰A_CC,通過A_CC加密保護(hù)群組密鑰TGK(由發(fā)起方產(chǎn)生)后分發(fā)給群里各參與方。后續(xù)即時(shí)消息通信發(fā)送接收流程與點(diǎn)對(duì)點(diǎn)流程類似,只是通過群組密鑰TGK來導(dǎo)出或保護(hù)工作密鑰。
4.4.3 預(yù)主密鑰協(xié)商流程
瀏覽器客戶端點(diǎn)對(duì)點(diǎn)即時(shí)通信時(shí),通過密鑰協(xié)商協(xié)議實(shí)現(xiàn)預(yù)主密鑰A_CC定期更換和用戶身份認(rèn)證。協(xié)商流程如圖5所示。
(1)接收方預(yù)先上傳相關(guān)的NT_PKB和CertB、MACB到即時(shí)通信服務(wù)器;IDB為接收方瀏覽器客戶端B的唯一編號(hào),CertB為密鑰管理中心離線注入到瀏覽器客戶端B的證書,NT_PKB? 為瀏覽器客戶端B產(chǎn)生的臨時(shí)公鑰,MACB為IDB+NT_PKB+CertB雜湊算法計(jì)算后的驗(yàn)證碼;
(2)瀏覽器客戶端A向即時(shí)通信服務(wù)器獲取IDB、NT_PK B和CertB、MACB,通過提取CertA中密鑰管理中心公鑰R_PK對(duì) CertB進(jìn)行驗(yàn)證,并雜湊算法計(jì)算驗(yàn)證MACB;
(3)瀏覽器客戶端A通過瀏覽器私鑰B_SKA與NT_PK B進(jìn)行ECC點(diǎn)乘運(yùn)算得到DAB;
(4)瀏覽器客戶端A上傳與相關(guān)的NT_PK A和CertA、MACA到即時(shí)通信服務(wù)器, IDA為接收方瀏覽器客戶端A的唯一編號(hào),CertB為密鑰管理中心離線注入到瀏覽器客戶端A的證書,NT_PKA瀏覽器客戶端A產(chǎn)生的臨時(shí)公鑰,MACA為IDA+NT_PKA+CertA雜湊算法計(jì)算后的驗(yàn)證碼;
(5)瀏覽器客戶端B向即時(shí)通信服務(wù)器獲取IDA、NT_PKA和CertA、MACA,通過提取CertB中密鑰管理中心公鑰R_PK對(duì) CertA進(jìn)行驗(yàn)證,并雜湊算法計(jì)算驗(yàn)證MACA;
(6)瀏覽器客戶端B通過瀏覽器私鑰B_SKB與NT_PKA進(jìn)行ECC點(diǎn)乘運(yùn)算得到DAB;協(xié)議雙方對(duì)DAB進(jìn)行雜湊算法計(jì)算得到預(yù)主密鑰A_CC。
4.4.4 消息加密密鑰產(chǎn)生機(jī)制
點(diǎn)對(duì)點(diǎn)通信時(shí),使用用戶密鑰GBK和協(xié)商出的預(yù)主密鑰A_CC派生工作密鑰WK和初始向量IV(派生過程采用PBKDF2偽隨機(jī)函數(shù))。群組工作時(shí),使用用戶密鑰GBK、群組密鑰TGK派生工作密鑰和初始向量IV。然后,采用對(duì)稱算法對(duì)消息進(jìn)行加密保護(hù),最后將數(shù)據(jù)組幀發(fā)送。
其中,群組密鑰TGK采用定時(shí)更換機(jī)制或者發(fā)送一定數(shù)量的消息后進(jìn)行更換。群組密鑰TGK也可以增加按天進(jìn)行滾動(dòng)的滾動(dòng)機(jī)制,進(jìn)行滾動(dòng)更新。
通過本文描述的預(yù)主密鑰協(xié)商、定時(shí)更換機(jī)制、按天進(jìn)行滾動(dòng)的滾動(dòng)機(jī)制以及基于每條消息產(chǎn)生的工作密鑰,實(shí)現(xiàn)了即時(shí)消息的“一話一密”加密通信和一定時(shí)間間隔的前向安全防護(hù)。通過對(duì)消息的完整性驗(yàn)證,實(shí)現(xiàn)了隱式的用戶身份驗(yàn)證及數(shù)據(jù)源驗(yàn)證。
如果攻擊者進(jìn)行假冒、偽造和替代,由于不知道通信雙方的私鑰,不能得到工作密鑰,攻擊者和合法用戶接收到的信息為亂碼,實(shí)現(xiàn)了機(jī)密性保護(hù)和用戶身份認(rèn)證。
5 結(jié)束語
基于瀏覽器WebAssembly技術(shù)的即時(shí)通信加密系統(tǒng),基于混合密碼體制和多層密鑰體系設(shè)計(jì),采用安全適用的加密體制和加密協(xié)議,無中心端到端的密鑰協(xié)商分發(fā)機(jī)制和離線加載的密碼保障方案。目前,該系統(tǒng)已經(jīng)在安卓、蘋果手機(jī)的Safari瀏覽器,計(jì)算機(jī)上的Chrome、Firefox、Safari、Edge等多款主流瀏覽器上成功應(yīng)用,經(jīng)過測試運(yùn)行穩(wěn)定,符合預(yù)期要求。
參考文獻(xiàn)
[1] 陳旭,郭文平. 基于RSA和TDES的安全即時(shí)通信系統(tǒng)設(shè)計(jì)[J]. 微型電腦應(yīng)用,2009(09).
[2] Paul Krill,Paul Krill. Google's V8 JavaScript engine now backs WebAssembly[J]. InfoWorld.com,2016.
[3] 唐偉,劉國山,王亞翔. 一種基于分級(jí)保護(hù)的企業(yè)即時(shí)通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].通信技術(shù),2016(06).
[4] 何文海,信佳佳. 網(wǎng)絡(luò)信息安全中存在的問題及數(shù)據(jù)加密技術(shù)研究[J].網(wǎng)絡(luò)空間安全,2019(01).
[5] 張杰,李曄,宮曉飛,張鵬,姜競賽. 應(yīng)用于衛(wèi)星電話的端到端加密系統(tǒng)的研究與實(shí)現(xiàn)[J]. 電聲技術(shù),2019(06).
[6] 張義偉. 關(guān)于AES算法在端到端通信加密模塊中的實(shí)現(xiàn)及應(yīng)用設(shè)計(jì)研究[J].中國新通信,2016(20).