奚宇航 黃一平 蘇檢德 王淑沛
(廣西師范大學(xué)電子工程學(xué)院 廣西 桂林 541004)
隨著移動互聯(lián)網(wǎng)的迅猛發(fā)展,中國已成為全球最大的互聯(lián)網(wǎng)市場之一。CNNIC第42次《中國互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計報告》顯示,截至2018年6月,中國互聯(lián)網(wǎng)用戶總數(shù)達(dá)8.02億,超過印度位居全球網(wǎng)民首位[1]?!?018年中國互聯(lián)網(wǎng)流量年度數(shù)據(jù)報告》中指出截至2018年12月,以微信、QQ為首的即時通信聊天行業(yè)獨立設(shè)備數(shù)達(dá)12.35億,同比增長10.3%,行業(yè)滲透率達(dá)91.67%,其中微信的月獨立設(shè)備達(dá)10.87億臺,為12月唯一破十億的APP,同比增長9.5%[2]。以QQ和微信所代表的即時通信應(yīng)用服務(wù)在擁有如此龐大數(shù)量的用戶基礎(chǔ)上隨之而來的是巨大的安全隱患[3]。用戶使用QQ、微信每天都會接收發(fā)送龐大的數(shù)據(jù),其信息安全問題值得關(guān)注。信息安全保護(hù)的核心就是以RSA加密算法和隨機(jī)AES密鑰加密相結(jié)合進(jìn)行即時數(shù)據(jù)加密[4]。雖然RSA的私鑰保存在系統(tǒng)的通信服務(wù)器中,想要通過攻克AES算法的密鑰獲取聊天內(nèi)容的難度很大[5]。但是,一方面由于承擔(dān)的流量巨大,運(yùn)營商或者服務(wù)商通常只對包數(shù)據(jù)中的個人數(shù)據(jù)進(jìn)行隱藏,其中通信的大部分還是通過明文的方式進(jìn)行傳輸,因此存在被竊取和篡改的可能性[6]。另一方面,在手機(jī)數(shù)據(jù)的顯示端是明文顯示,非常容易造成截取傳播敏感社交信息、行政事務(wù)信息和金融信息的不良后果,進(jìn)而造成非常惡劣的影響[7]。
針對上述即時通信軟件存在的安全性問題,本文設(shè)計實現(xiàn)了基于國密算法的即時通信加密軟件系統(tǒng)。以iOS操作系統(tǒng)的智能手機(jī)終端為例,本文采用隨機(jī)密鑰生成器,按照PKI的安全體系,利用對稱與非對稱加密算法相結(jié)合的思想,通過具備自主可控、安全性更高、性能更強(qiáng)的國密算法和智能移動終端的手勢、數(shù)字密碼鎖相結(jié)合技術(shù),實現(xiàn)了即時通信加密軟件系統(tǒng)。本系統(tǒng)在數(shù)據(jù)傳輸層采用SM2公鑰加密SM4隨機(jī)密鑰進(jìn)行會話密鑰分配,再由SM4密鑰加密明文成密文進(jìn)行傳輸。在消息顯示層采用手勢、數(shù)字密碼鎖的方式進(jìn)行顯示保護(hù)。
整個通信系統(tǒng)由系統(tǒng)服務(wù)器、蘋果APNs服務(wù)器和手機(jī)移動客戶端組成。其中手機(jī)移動客戶端主要由密聊首頁、聯(lián)系人和個人三個界面組成,系統(tǒng)的即時通信總流程圖如圖1所示。圖中實線表示移動端A給移動端B發(fā)送即時消息,虛線為移動端B給移動端A發(fā)送即時消息,ID為系統(tǒng)服務(wù)器隨機(jī)給移動端分配的標(biāo)識符,UUID為移動客戶端的蘋果手機(jī)唯一標(biāo)識符,其中ID和UUID形成鍵值對保存在系統(tǒng)服務(wù)器中,UUID可以被蘋果的APNs服務(wù)器識別。在移動客戶端進(jìn)行三方登錄成功后會由隨機(jī)密鑰生成器生成國密算法的SM2的公私鑰對,公鑰上傳服務(wù)器,私鑰保存在Keychain中。每次進(jìn)行三方登錄會更新Keychain中保存的私鑰,同時更新系統(tǒng)服務(wù)器公鑰。在首次即時通信的同時進(jìn)行統(tǒng)一會話密鑰操作,之后在移動客戶端進(jìn)行發(fā)送消息時,發(fā)送方通過統(tǒng)一的會話密鑰將消息加密成密文和接收方的ID發(fā)送給服務(wù)器,由系統(tǒng)服務(wù)器找到ID對應(yīng)的UUID,然后由蘋果的APNs服務(wù)器將密文消息推送給接收方移動客戶端進(jìn)行會話密鑰解密,最后通過手勢數(shù)字密碼驗證成功后進(jìn)行顯示。
圖1 系統(tǒng)即時通信總流程圖
Keychain是一個獨立于APP之外的iOS系統(tǒng)級別安全的存儲容器,可以用來為不同的應(yīng)用保存敏感信息[8],比如私鑰、密碼、網(wǎng)絡(luò)密碼、認(rèn)證令牌等。蘋果用Keychain來保存Wi-Fi密碼、VPN憑證等。Keychain中的Keychain Services安全機(jī)制保證存儲的敏感信息不會被竊取,它可以包含任意數(shù)量的Keychain item,每條item 包含一條數(shù)據(jù)和很多的屬性。每個Keychain包含數(shù)據(jù)和一組屬性,對于需要保護(hù)的item,比如私鑰或密碼數(shù)據(jù)是加密的,會被Keychain保護(hù)起來;對于無需保護(hù)的item,比如證書數(shù)據(jù)未被加密。Keychain一共有五種類型:一般密碼、網(wǎng)絡(luò)密碼、證書、密鑰和身份證書(帶私鑰的證書),分別對應(yīng)GenericPassword、InternetPassword、Certificate、Key和Identity[9]。本系統(tǒng)在三方登錄成功后自動生成SM2密鑰對,其中公鑰上傳系統(tǒng)服務(wù)器,私鑰通過item關(guān)聯(lián)Key類型保存在Keychain中,在統(tǒng)一會話密鑰操作的過程中采用相同的方式將密鑰保存在Keychain中。
國產(chǎn)密碼算法簡稱國密算法是由國家密碼局認(rèn)定的擁有自主知識產(chǎn)權(quán)的密碼算法,在目前互聯(lián)網(wǎng)領(lǐng)域使用最為廣泛加密算法為SM2、SM3、SM4。其中SM2算法是基于ECC橢圓曲線密碼機(jī)制使用256位曲線作為標(biāo)準(zhǔn)曲線的非對稱加密算法,求解倍點的離散對數(shù)的難度遠(yuǎn)遠(yuǎn)大于大數(shù)分解和有限域上的離散對數(shù)求解,與目前使用最多的RSA非對稱加密算法比較來看,其計算復(fù)雜度、安全度更高,相同安全性能下需要的公鑰位數(shù)更少,加解密速度更快,在密鑰生成速度上比RSA快百倍以上[10]。SM4是一種基于分組密碼的對稱加密算法,可實現(xiàn)對數(shù)據(jù)的實時加解密,保證數(shù)據(jù)的機(jī)密性,其加密機(jī)制是對明文消息進(jìn)行固定塊切割后再進(jìn)行迭代加密,加密解密使用相同的密鑰[11]。與目前使用較多的AES對稱加密算法比較來看,在進(jìn)行疊加加密輪操作的過程中兩個算法的安全性均是基于S盒的非線性以及線性變換提供擴(kuò)散作用,密鑰的使用方式也均是將密鑰與明文或加密結(jié)果“異或”。區(qū)別在于AES算法在每輪的最后使用密鑰,而SM4算法在每輪開始使用密鑰,在密鑰調(diào)度算法的復(fù)雜度上,SM4更加簡單[12]。故本系統(tǒng)在進(jìn)行即時消息加密和統(tǒng)一會話密鑰的過程中采用了安全性更高、自主可控性更好的國密算法進(jìn)行即時消息加解密操作,這也更加符合國家自主可控的安全發(fā)展需求。
系統(tǒng)采用了C/S架構(gòu)模式,服務(wù)器端使用了J2EE標(biāo)準(zhǔn)、Spring框架和MySQL數(shù)據(jù)庫,使用Java語言進(jìn)行開發(fā),連接遵循Http協(xié)議。移動客戶端使用Objective-C語言進(jìn)行開發(fā),使用MVC架構(gòu)和SQLite數(shù)據(jù)庫,測試環(huán)境為iPhone simulator和iPhone真機(jī)。
系統(tǒng)對于即時消息的安全措施有兩個方面:消息顯示查閱層和傳輸層。在消息傳輸層中,移動客戶端在三方登錄后首先會自動隨機(jī)生成SM2加密算法的公鑰、私鑰對,公鑰上傳到本地服務(wù)器,私鑰保存到Keychain。三方登錄成功后進(jìn)入密聊首頁進(jìn)行添加好友的操作,好友添加成功是進(jìn)行統(tǒng)一會話的前提,在互為好友進(jìn)行第一次即時聊天時會通過拼接消息密文和會話密鑰密文進(jìn)行統(tǒng)一會話密鑰操作,之后的即時消息加解密使用統(tǒng)一后的密鑰。
系統(tǒng)在接收顯示查閱端采用手勢密碼和數(shù)字密碼結(jié)合進(jìn)行顯示安全驗證保護(hù)。在聊天室顯示聊天會話消息的時候會先進(jìn)行手勢密碼解密校驗,判斷是不是第一次進(jìn)入聊天室。如果是第一次進(jìn)入聊天室則顯示明文,之后再次進(jìn)入聊天室全部消息統(tǒng)一顯示“消息已加密!”,只有先設(shè)置手勢密碼才能對聊天室中消息進(jìn)行解密后明文顯示。在二次進(jìn)入軟件時會進(jìn)行數(shù)字密碼解密校驗,不論軟件是從熄屏狀態(tài)、掛起后臺還是完全殺死重新進(jìn)入軟件均需執(zhí)行數(shù)字密碼校驗后才能進(jìn)入軟件,數(shù)字密碼不要求用戶強(qiáng)制設(shè)置。不進(jìn)行數(shù)字密碼設(shè)置二次進(jìn)入軟件后就不會喚起數(shù)字密碼鎖。
系統(tǒng)的三方登錄是進(jìn)入系統(tǒng)軟件的首步操作,包含了通過SDK獲取關(guān)聯(lián)值,登錄系統(tǒng)服務(wù)器和添加用戶信息。系統(tǒng)采用嵌入QQ和微信的SDK進(jìn)行三方登錄,使用三方登錄對于用戶來說能夠顯著降低用戶的注冊和登錄成本,方便用戶實現(xiàn)快捷登錄或者注冊;對應(yīng)用來說降低了用戶注冊登錄繁瑣成本,減少隱形客戶流失提高注冊轉(zhuǎn)化率;對第三方而言促進(jìn)用戶粘性,有利于對平臺的拉新促活。三方登錄成功后會生成SM2的公私密鑰對,公鑰上傳系統(tǒng)服務(wù)器,私鑰保存在Keychain中,詳細(xì)步驟如下:
(1) 通過QQ或微信的SDK三方登錄成功后得到微信或QQ關(guān)聯(lián)登錄用戶的唯一標(biāo)識uid和關(guān)聯(lián)登錄token,否則重新進(jìn)行三方登錄操作。
(2) 調(diào)用系統(tǒng)服務(wù)器的“服務(wù)器登錄”接口傳遞uid和token參數(shù),成功后會返回系統(tǒng)ID、系統(tǒng)昵稱nickname、系統(tǒng)頭像icon,否則重新登錄系統(tǒng)服務(wù)器。
(3) 調(diào)用隨機(jī)密碼生成器生成SM2的公、私鑰對(Uk,Pk),其中私鑰保存在Keychain中。
(4) 調(diào)用系統(tǒng)服務(wù)器的“添加用戶信息接口”傳遞ID和Uk參數(shù)到系統(tǒng)服務(wù)器,并以鍵值對的形式保存在數(shù)據(jù)庫中。用戶信息添加成功后跳轉(zhuǎn)到密聊首頁,否則重新進(jìn)行添加。
三方登錄的流程圖如圖2所示。
添加好友是建立即時會話的前提,只有添加好友成功后,才能建立即時會話,統(tǒng)一會話密鑰。在添加好友時掃描對方二維碼獲得系統(tǒng)對應(yīng)的身份信息ID后會先與自己的ID進(jìn)行比較。如果相同會彈出窗口“不能添加自己為好友!”;如果不相同則會和自己的聯(lián)系人列表中的所有好友ID進(jìn)行比較,如果有相同的,則直接跳轉(zhuǎn)到與該聯(lián)系人的聊天室界面,如果都不相同就會進(jìn)行添加好友操作,向?qū)Ψ桨l(fā)送添加好友請求的即時推送,對方得到推送消息后同意添加則添加成功,反之不成功。系統(tǒng)的添加好友流程圖如圖3所示。
圖3 添加好友流程圖
本系統(tǒng)在即時消息的推送過程中使用系統(tǒng)服務(wù)器和蘋果原生的APNs服務(wù)器結(jié)合進(jìn)行推送。系統(tǒng)具體推送步驟如下:
(1) 發(fā)送方Sender調(diào)用系統(tǒng)服務(wù)器的即時消息推送API接口接收會話密文消息Message和接收方Receiver的ID。
(2) 數(shù)據(jù)庫保存Message并生成對應(yīng)的字段Num。
(3) 根據(jù)Num生成一個URL查詢地址Address,并且通過Receiver的ID找到對應(yīng)的UUID。
(4) 調(diào)用APNs的接口將Address和UUID發(fā)送給APNs服務(wù)器,APNs根據(jù)UUID找到Receiver并推送Address即時消息。
在即時消息的推送過程中由于APNs每次推送的字節(jié)數(shù)有限,較長字節(jié)數(shù)的即時消息不能一次性推送完,所以通過訪問URL查詢地址獲得完整的即時推送消息。系統(tǒng)的即時推送流程圖如圖4所示。
圖4 即時推送流程圖
本系統(tǒng)在即時會話消息的傳輸過程中基于PKI的安全體系,采用數(shù)字信封的方式進(jìn)行統(tǒng)一會話密鑰分發(fā)。數(shù)字信封的原理就是采用對稱加密算法加密大批量的數(shù)據(jù),然后采用非對稱加密算法對其中的對稱密鑰進(jìn)行加密[13]。在解密的過程中首先用非對稱加密算法解密獲取對稱加密算法的密鑰,然后使用獲取的密鑰解密獲取數(shù)據(jù)明文[14]。本系統(tǒng)在安全傳輸中主要包括兩大部分:第一次建立即時會話時進(jìn)行統(tǒng)一會話密鑰操作;使用統(tǒng)一后的密鑰對即時會話消息進(jìn)行加密解密。
2.4.1統(tǒng)一會話密鑰
系統(tǒng)在Sender(發(fā)送方)和Receiver(接收方)互為好友的前提下第一次進(jìn)行即時聊天會統(tǒng)一會話密鑰,具體步驟如下:
(1) Sender打開與Receiver的聊天室,監(jiān)聽此時聊天室的文字輸入。
(2) 監(jiān)聽聊天室鍵盤中的“Send”按鈕的點擊,此時的即時會話明文為C1。
(3) 隨機(jī)密碼生成器會自動生成定長的SM4會話密鑰Mk,并在Sender中的Keychain進(jìn)行存儲。同時通過Receiver的ID向系統(tǒng)服務(wù)器獲取其SM2的公鑰Pk。
(4) 通過公鑰Pk加密Mk生成定長的會話密鑰密文Ck。同時使用會話密鑰Mk加密明文即時消息C1成C。拼接Ck和C成即時消息密文Message。
(5) 向系統(tǒng)服務(wù)器發(fā)送Message和Receiver的ID,系統(tǒng)服務(wù)器生成URL查詢地址Address,調(diào)用APNs服務(wù)器接口發(fā)送Address和ID。
(6) APNs服務(wù)器通過ID將Address推送給Receiver。
(7) Receiver通過向Address發(fā)送POST請求獲取到拼接的密文消息Message,截取定長的會話密鑰密文Ck和即時密文消息C。
(8) Receiver用自己的私鑰Uk解密Ck得到Mk,在Receiver中Keychain中存儲Mk,同時用Mk解密C得到即時消息明文C1,并在Receiver的聊天室中顯示。
當(dāng)Sender和Receiver互加好友后的第一次即時聊天時,會在傳遞首條即時消息時同時傳遞會話密鑰,經(jīng)過第一條即時消息后Sender和Receiver就保持了統(tǒng)一的會話密鑰,之后的即時聊天信息加解密全部使用Mk,本系統(tǒng)不作密鑰的預(yù)先設(shè)定,每次三方登錄后都會產(chǎn)生的新的SM2密鑰對定期更新會話密鑰。系統(tǒng)的統(tǒng)一會話密鑰流程如圖5所示。
圖5 統(tǒng)一會話密鑰流程圖
2.4.2即時消息加解密
在Sender進(jìn)行即時聊天中首先會判斷是不是第一次與該好友進(jìn)行即時會話,如果是,則會在第一次發(fā)送即時消息時進(jìn)行統(tǒng)一會話密鑰操作,如圖5所示;如果不是,那么雙方已經(jīng)統(tǒng)一了會話密鑰Mk,此時Sender只需要向系統(tǒng)服務(wù)器發(fā)送即時消息密文C和Receiver的ID,APNs調(diào)用推送接口推送的URL查詢地址中只有即時消息密文C,Receiver接收到即時推送消息密文C,直接用本地保存的會話密鑰Mk解密即可。同時在即時消息解密后在聊天室進(jìn)行顯示時要經(jīng)過手勢數(shù)字密碼驗證成功后才會顯示即時消息明文。系統(tǒng)在Sender和Receiver進(jìn)行即時會話通信中的消息加解密流程圖如圖6所示。
圖6 即時消息加解密流程圖
系統(tǒng)在對解密后的會話消息查閱的安全設(shè)計中采用數(shù)字、手勢密碼驗證對會話消息進(jìn)行安全保護(hù)。其中數(shù)字密碼是進(jìn)入APP時的安全驗證,手勢密碼是在聊天中顯示明文消息時的安全驗證。詳細(xì)信息查閱驗證流程如下:
(1) 在進(jìn)入軟件的過程中判斷如果是從熄屏狀態(tài)、后臺狀態(tài)、完全殺死狀態(tài)進(jìn)入軟件,那么就會查看用戶有沒有設(shè)置數(shù)字密碼安全保護(hù)。如果設(shè)置了則會進(jìn)入數(shù)字密碼安全驗證,驗證成功進(jìn)入軟件,驗證不成功則無法打開軟件;如果沒有設(shè)置數(shù)字密碼安全驗證則直接進(jìn)入軟件。
(2) 當(dāng)進(jìn)入軟件后來到聊天室進(jìn)行消息明文查閱時,判斷是否第一次進(jìn)入聊天室,如果是,則直接顯示明文,否則進(jìn)行手勢密碼安全驗證。
(3) 在進(jìn)行手勢密碼安全驗證前,聊天室顯示的聊天內(nèi)容全部為“消息已加密!”,點擊聊天室的“解密”按鈕,判斷用戶有沒有設(shè)置手勢安全驗證密碼。如果設(shè)置了就直接進(jìn)行手勢安全驗證,否則提示“請先設(shè)置手勢密碼”。設(shè)置成功后進(jìn)行手勢密碼安全驗證,驗證成功后聊天記錄刷新顯示為明文消息。系統(tǒng)的信息查閱安全驗證流程如圖7所示。
(a) 數(shù)字密碼驗證 (b) 手勢密碼驗證
本系統(tǒng)設(shè)計的創(chuàng)新點首要是在加密算法的選擇上采用了安全性更高的自主國密算法,使得本系統(tǒng)在即時消息傳輸中更加安全;其次在公鑰和會話密鑰的保存中使用了Keychain安全存儲容器,并且不對密鑰做預(yù)先設(shè)定,每次三方登錄會同步更新Keychain和系統(tǒng)服務(wù)器中的密鑰,使得本系統(tǒng)在密鑰保存中相對更加靈活安全;最后在信息查閱中設(shè)計了數(shù)字密碼和手勢密碼安全驗證兩層保護(hù),使得聊天室中的即時會話消息不能隨意被查閱截取傳閱,提高了信息查閱的安全性。
系統(tǒng)的客戶端實際應(yīng)用效果圖如圖8、圖9所示。其中,圖8是手勢、數(shù)字密碼的界面圖,圖9是聊天室即時會話消息界面圖。由圖9可見在進(jìn)入聊天室后顯示的消息均為“消息已加密!”如果沒有設(shè)置手勢密碼會提示“請先設(shè)置手勢密碼”,設(shè)置之后進(jìn)入聊天室點擊右上角的“解密”按鈕,此時經(jīng)過手勢安全驗證得到最終的明文即時會話消息。
圖8 設(shè)置手勢數(shù)字密碼界面圖
圖9 聊天室會話消息圖
本文研究的基于國密算法的即時通信加密軟件系統(tǒng)依靠iOS平臺設(shè)計并實現(xiàn),在服務(wù)器端的即時消息傳輸層和移動客戶端的即時消息顯示層都進(jìn)行了安全措施保護(hù)。在即時消息經(jīng)過服務(wù)器進(jìn)行即時推送的過程中使用非對稱加密算法分發(fā)對稱加密算法的密鑰,并且在即時消息經(jīng)過移動客戶端進(jìn)行即時消息查閱顯示的過程中使用了手勢、數(shù)字密碼結(jié)合的方式對即時消息顯示進(jìn)行加密保護(hù),最終設(shè)計并實現(xiàn)了本軟件系統(tǒng)。該系統(tǒng)目前已在企業(yè)進(jìn)行了試用,取得了不錯的應(yīng)用效果,滿足商務(wù)人士更高要求的信息安全需求,具有較好的應(yīng)用前景。本文設(shè)計方案也將為即時通信的安全方案提供有益參考。