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