陳德亮
(廣東南方電信規(guī)劃咨詢設(shè)計(jì)院有限公司,廣東 深圳 512123)
消息隊(duì)列中間件作為特定中間件,需利用消息傳遞機(jī)制完成平臺數(shù)據(jù)的交換,同時依靠數(shù)據(jù)通信展開分布式系統(tǒng)集成。Java消息服務(wù)(Java Message Service,JMS)為消息中間件接口提供了規(guī)范操作指引,也提供了消息過濾與事務(wù)處理等機(jī)制。了解JMS規(guī)范在安全性方面的不足,研究消息通信情況,采用數(shù)字簽名的方式實(shí)現(xiàn)身份驗(yàn)證,兼顧加密算法進(jìn)行消息加密。以Topic與Queue作為JMS系統(tǒng)的重要資源對象,合理設(shè)計(jì)安全管理器,實(shí)現(xiàn)對資源訪問的有效控制。
對于安全通信來說,安全性最為關(guān)鍵,可從安全與性能兩方面入手,詳細(xì)闡述安全通信模型的特點(diǎn)。安全傳輸方面,采用對稱算法進(jìn)行數(shù)據(jù)加密處理,隨后才能在網(wǎng)絡(luò)中傳輸數(shù)據(jù)。安全通信模型采用SM1算法進(jìn)行數(shù)據(jù)的加密與解密,這是一種對稱加密算法,也是國家相關(guān)部門審批通過的分組密碼算法[1]。性能方面,安全接入網(wǎng)關(guān)后,每次接收連接請求時都要重新建立專門的通信,連接處理線程也會做出規(guī)劃,此時不同的連接會話保持獨(dú)立,互不影響。
2.1.1 對稱加密技術(shù)
數(shù)據(jù)加密就是指用戶在選擇加密算法之后,對明文數(shù)據(jù)加以保護(hù),使明文數(shù)據(jù)轉(zhuǎn)為密文數(shù)據(jù),以便常人無法識讀密文信息,只有在輸入正確的密鑰后才能解密算法,將密文信息轉(zhuǎn)為明文數(shù)據(jù)。高級加 密 標(biāo) 準(zhǔn)(Advanced Encryption Standard,AES) 算法以Rijndael算法為標(biāo)準(zhǔn)版本,其應(yīng)用主要是對密文數(shù)據(jù)分組處理,隨后對數(shù)據(jù)分塊,再進(jìn)行迭代運(yùn)算。分組后的數(shù)據(jù)區(qū)塊長度可以隨著密鑰長度來變動。Rijndael算法以Square算法為原型,在寬軌跡策略的應(yīng)用下,算法迭代次數(shù)為Nd,取值主要由明文數(shù)據(jù)區(qū)塊與密鑰長度決定。如果密鑰長度是128 bit,那么算法的迭代次數(shù)應(yīng)當(dāng)為10;如果密鑰長度是192 bit,那么算法迭代次數(shù)為12。以此類推,隨著密鑰長度的增加,算法需要的迭代次數(shù)也會相應(yīng)增加。
算法加密大致需要經(jīng)歷密鑰擴(kuò)展階段、輪密鑰操作階段、Nr-1次輪變換操作階段以及最后一次輪變換操作階段。輪變化操作主要有字節(jié)代換、列混淆、行移位以及輪密鑰幾個過程,但是最后一次輪的變換操作不包含列混淆的過程。作為高級加密標(biāo)準(zhǔn),Rijndael算法具有靈活性特點(diǎn),目前已成為AES對稱密鑰算法的首要選擇,在不同軟硬件運(yùn)行下始終保持良好性能,算法的密鑰設(shè)置時間都能十分明確。除此之外,算法的應(yīng)用對內(nèi)存沒有提出過高要求,在提供時間保護(hù)功能的同時不影響算法使用性能,算法的內(nèi)部循環(huán)結(jié)構(gòu)擁有巨大潛能[2]。
2.1.2 非對稱加密技術(shù)
該算法的加密與解密過程所用到的密鑰不同,只有公鑰能夠公開,私鑰交由加密者。如何分發(fā)密鑰需要由加密者來決定,這一做法可有效保證密鑰使用的安全性問題。
RSA 算法所應(yīng)用的密鑰長度為 40 ~ 2 048 bit,加密的時候先將明文數(shù)據(jù)詳細(xì)分割為不同數(shù)據(jù)塊,再按照實(shí)際情況調(diào)整數(shù)據(jù)塊的大小,但是不能超過密鑰的長度。將明文塊轉(zhuǎn)化為和密鑰長度一致的密文塊,密鑰的長度越長,說明加密效果越好,但是所需的加密解密成本也更大,因此人們初期設(shè)計(jì)系統(tǒng)的時候會綜合考慮安全性與性能的平衡。目前,常用到的非對稱密鑰算法就是RSA算法,具體應(yīng)用步驟如下:計(jì)算公開密鑰,選擇兩個互異的大素?cái)?shù),分別為p與q,二者之間相互保密,公開密鑰n=pq。計(jì)算δ(n)=(p-1)(q-1),隨機(jī)選擇整數(shù)e,要求p與q分別保密,同時[e,δ(n)]=1。計(jì)算私有密鑰,做好加密運(yùn)算分析與解密運(yùn)算分析[3]。具體計(jì)算公式為:
2.2.1 點(diǎn)對點(diǎn)模型
JMS主要指的是在各類消息中間件系統(tǒng)接口的規(guī)范,對通用接口與語義做出定義,也提供了消息持久化、消息規(guī)律等相關(guān)服務(wù)。其最初目的是應(yīng)用Java程序訪問消息中間件,為了對底層進(jìn)行抽象化處理,開發(fā)人員無需參與細(xì)節(jié)處理。JMS規(guī)范沒有指定底層消息傳輸通信協(xié)議,特定的JMS能夠提供傳輸控制協(xié)議 /網(wǎng)際協(xié)議(Transmission Control Protocol/Internet Protocol,TCP/IP)或者超文本傳送協(xié)議(HyperText Transfer Protocol,HTTP)協(xié)議。
此外,JMS支持點(diǎn)對點(diǎn)與發(fā)布、訂閱兩種消息處理模型,其中點(diǎn)對點(diǎn)模型簡稱P2P模型,發(fā)送者會將消息發(fā)送到指定隊(duì)列中,接收者也會從該消息隊(duì)列內(nèi)接收消息。由此可見,消息的發(fā)送與接收屬于異步進(jìn)行過程。一個消息隊(duì)列能夠同時擁有多個消息發(fā)送者與接收者,但是使用者卻只有一個。不僅如此,接收者必須確認(rèn)消息接收成功。
2.2.2 發(fā)布、訂閱模型
該消息模型中,信息發(fā)布者一般會通過主題的渠道向訂閱者發(fā)布其需求的信息,訂閱者可以按照個人需求選擇主題。發(fā)布、訂閱模型的消息可以同時有多個發(fā)送者,這些發(fā)送者可同時發(fā)送一個主題信息,所有訂閱該主題的用戶也都能接收信息。發(fā)布者與訂閱者之間始終保持著獨(dú)立的地位,二者之間無需接觸即可完成消息傳遞。模型當(dāng)中,消息的處理主要有持久化與非持久化訂閱兩種方式,其中非持久化訂閱只有在客戶端為活動狀態(tài)時才能接收主題信息,客戶端如果離線,則所發(fā)送的該主題信息將有可能無法收到,即在客戶端離線過程中丟失。如果應(yīng)用持久性訂閱方式,那么客戶端可以向JMS注冊身份標(biāo)識符,即使客戶端處于離線工作狀態(tài),JMS Provider也會為其保存所有主題信息。當(dāng)客戶端連接上線后,經(jīng)過標(biāo)識符的匹配,離線期間的信息將會準(zhǔn)確傳送到客戶端[4]。
關(guān)于JMS的安全問題,在JMS規(guī)范中沒有對安全機(jī)制做出明確的解釋,而是將問題留給用戶,使其在JMS Provider中自行定義。信息安全是用戶較為關(guān)注的問題,以JMS為前提條件的異步信息在通信期間面臨著諸多威脅。例如,攻擊者在用戶客戶端偽造虛假身份,以此登錄系統(tǒng),獲取對資源的訪問權(quán)限;沒有對用戶的訪問與操作權(quán)限加以審核,設(shè)置時不夠合理,導(dǎo)致攻擊者可以越過默認(rèn)權(quán)限訪問系統(tǒng)資源;以JMS為前提的消息傳遞默認(rèn)為明文傳輸方式,但是攻擊者獲取了信息傳遞的明文流,從而竊取并篡改系統(tǒng)消息,給系統(tǒng)接下來的運(yùn)行埋下安全隱患[5]。
安全通信模型中,假設(shè)通信雙方擁有屬于自己的公鑰與密鑰,且通過證書管理模塊向認(rèn)證中心申請公鑰相應(yīng)的數(shù)字證書。如圖1所示,客戶A與服務(wù)器端初始化期間會向認(rèn)證中心申請數(shù)字證書,證書內(nèi)包含公鑰信息,雙方可利用對方公鑰驗(yàn)證身份信息[6]。發(fā)送端用私鑰進(jìn)行自身身份信息的標(biāo)識,以此完成數(shù)字簽名。最后,信息接收方在收到數(shù)字簽名信息之后,經(jīng)過認(rèn)證中心獲取公鑰,解密散列值,再使用MD5算法計(jì)算對方身份信息散列值。對比兩個散列值,如果數(shù)值相等,即可驗(yàn)證發(fā)送方的身份信息[7]。
圖1 身份認(rèn)證流程
雖然通信雙方已經(jīng)驗(yàn)證了信息的合法性,但是信息傳輸?shù)闹虚g信道也會存在不安全性,攻擊者可截取信道明文信息。對此,有必要在雙方會話初期協(xié)商密鑰,雙方采用AES算法完成待傳輸數(shù)據(jù)的有效加密。由于服務(wù)器端安全性較高,所以模型中的會話密鑰可以由服務(wù)器端生成,具體流程如下。服務(wù)器端產(chǎn)生隨機(jī)數(shù)Rnum,將其傳入會話密鑰生成器形成會話密鑰Ski,應(yīng)用用戶A的公鑰,使用RSA算法進(jìn)行密鑰加密處理,產(chǎn)生會話密鑰Ski_sec。客戶接收到加密后的密鑰之后,使用私鑰,在RSA解密算法后對原始密鑰Ski進(jìn)行解密[8]。
為提高服務(wù)器端安全性,模型中假定會話密鑰由服務(wù)器端生成,應(yīng)用安全套接層(Secure Sockets Layer,SSL)協(xié)議保護(hù)服務(wù)器數(shù)據(jù)安全。作為JMS的核心對象,Topic與Queue能夠?qū)δP瓦M(jìn)行安全性保護(hù),模型加入這兩個管理器后即可擁有較好的安全效果。以Queue管理器為例,一個管理器只負(fù)責(zé)一個Queue即可,同時與分布式系統(tǒng)中其他管理器通信,具體操作如圖2所示[9]。會話建立時應(yīng)確定主節(jié)點(diǎn)與從節(jié)點(diǎn),保存節(jié)點(diǎn)中信息,如節(jié)點(diǎn)數(shù)目與IP地址信息等。
圖2 Queue管理器
采用Java創(chuàng)建模型,對其進(jìn)行測試,服務(wù)器端安裝操作系統(tǒng),模擬客戶端使用IBM兼容機(jī)。對不加安全模塊的JMS通信系統(tǒng)進(jìn)行測試,統(tǒng)計(jì)一段時間內(nèi)數(shù)據(jù)包數(shù)量的變化情況與通信延遲時間。隨后應(yīng)用JMS安全通信模型,在原有的延遲基礎(chǔ)上增加數(shù)字簽名與消息加密,再對比數(shù)據(jù),如圖3所示。經(jīng)過對比后,得知JMS模型增加了8%左右的通信延遲,這對于安全性要求較高的系統(tǒng)來說處于可接受范圍內(nèi)[10]。
圖3 系統(tǒng)通信延遲時間
應(yīng)用消息中間件的時候往往會面對諸多威脅,為保證消息的機(jī)密性,可采用JMS消息模型,掌握其中的安全性問題,提出以數(shù)字簽名技術(shù)為前提條件的安全通信模型。應(yīng)用數(shù)字簽名完成用戶身份認(rèn)證,同時混合加密技術(shù)保障數(shù)據(jù)的完整性與安全性,實(shí)現(xiàn)對JMS系統(tǒng)資源的保護(hù)。