陳德亮
(廣東南方電信規劃咨詢設計院有限公司,廣東 深圳 512123)
消息隊列中間件作為特定中間件,需利用消息傳遞機制完成平臺數據的交換,同時依靠數據通信展開分布式系統集成。Java消息服務(Java Message Service,JMS)為消息中間件接口提供了規范操作指引,也提供了消息過濾與事務處理等機制。了解JMS規范在安全性方面的不足,研究消息通信情況,采用數字簽名的方式實現身份驗證,兼顧加密算法進行消息加密。以Topic與Queue作為JMS系統的重要資源對象,合理設計安全管理器,實現對資源訪問的有效控制。
對于安全通信來說,安全性最為關鍵,可從安全與性能兩方面入手,詳細闡述安全通信模型的特點。安全傳輸方面,采用對稱算法進行數據加密處理,隨后才能在網絡中傳輸數據。安全通信模型采用SM1算法進行數據的加密與解密,這是一種對稱加密算法,也是國家相關部門審批通過的分組密碼算法[1]。性能方面,安全接入網關后,每次接收連接請求時都要重新建立專門的通信,連接處理線程也會做出規劃,此時不同的連接會話保持獨立,互不影響。
2.1.1 對稱加密技術
數據加密就是指用戶在選擇加密算法之后,對明文數據加以保護,使明文數據轉為密文數據,以便常人無法識讀密文信息,只有在輸入正確的密鑰后才能解密算法,將密文信息轉為明文數據。高級加 密 標 準(Advanced Encryption Standard,AES) 算法以Rijndael算法為標準版本,其應用主要是對密文數據分組處理,隨后對數據分塊,再進行迭代運算。分組后的數據區塊長度可以隨著密鑰長度來變動。Rijndael算法以Square算法為原型,在寬軌跡策略的應用下,算法迭代次數為Nd,取值主要由明文數據區塊與密鑰長度決定。如果密鑰長度是128 bit,那么算法的迭代次數應當為10;如果密鑰長度是192 bit,那么算法迭代次數為12。以此類推,隨著密鑰長度的增加,算法需要的迭代次數也會相應增加。
算法加密大致需要經歷密鑰擴展階段、輪密鑰操作階段、Nr-1次輪變換操作階段以及最后一次輪變換操作階段。輪變化操作主要有字節代換、列混淆、行移位以及輪密鑰幾個過程,但是最后一次輪的變換操作不包含列混淆的過程。作為高級加密標準,Rijndael算法具有靈活性特點,目前已成為AES對稱密鑰算法的首要選擇,在不同軟硬件運行下始終保持良好性能,算法的密鑰設置時間都能十分明確。除此之外,算法的應用對內存沒有提出過高要求,在提供時間保護功能的同時不影響算法使用性能,算法的內部循環結構擁有巨大潛能[2]。
2.1.2 非對稱加密技術
該算法的加密與解密過程所用到的密鑰不同,只有公鑰能夠公開,私鑰交由加密者。如何分發密鑰需要由加密者來決定,這一做法可有效保證密鑰使用的安全性問題。
RSA 算法所應用的密鑰長度為 40 ~ 2 048 bit,加密的時候先將明文數據詳細分割為不同數據塊,再按照實際情況調整數據塊的大小,但是不能超過密鑰的長度。將明文塊轉化為和密鑰長度一致的密文塊,密鑰的長度越長,說明加密效果越好,但是所需的加密解密成本也更大,因此人們初期設計系統的時候會綜合考慮安全性與性能的平衡。目前,常用到的非對稱密鑰算法就是RSA算法,具體應用步驟如下:計算公開密鑰,選擇兩個互異的大素數,分別為p與q,二者之間相互保密,公開密鑰n=pq。計算δ(n)=(p-1)(q-1),隨機選擇整數e,要求p與q分別保密,同時[e,δ(n)]=1。計算私有密鑰,做好加密運算分析與解密運算分析[3]。具體計算公式為:

2.2.1 點對點模型
JMS主要指的是在各類消息中間件系統接口的規范,對通用接口與語義做出定義,也提供了消息持久化、消息規律等相關服務。其最初目的是應用Java程序訪問消息中間件,為了對底層進行抽象化處理,開發人員無需參與細節處理。JMS規范沒有指定底層消息傳輸通信協議,特定的JMS能夠提供傳輸控制協議 /網際協議(Transmission Control Protocol/Internet Protocol,TCP/IP)或者超文本傳送協議(HyperText Transfer Protocol,HTTP)協議。
此外,JMS支持點對點與發布、訂閱兩種消息處理模型,其中點對點模型簡稱P2P模型,發送者會將消息發送到指定隊列中,接收者也會從該消息隊列內接收消息。由此可見,消息的發送與接收屬于異步進行過程。一個消息隊列能夠同時擁有多個消息發送者與接收者,但是使用者卻只有一個。不僅如此,接收者必須確認消息接收成功。
2.2.2 發布、訂閱模型
該消息模型中,信息發布者一般會通過主題的渠道向訂閱者發布其需求的信息,訂閱者可以按照個人需求選擇主題。發布、訂閱模型的消息可以同時有多個發送者,這些發送者可同時發送一個主題信息,所有訂閱該主題的用戶也都能接收信息。發布者與訂閱者之間始終保持著獨立的地位,二者之間無需接觸即可完成消息傳遞。模型當中,消息的處理主要有持久化與非持久化訂閱兩種方式,其中非持久化訂閱只有在客戶端為活動狀態時才能接收主題信息,客戶端如果離線,則所發送的該主題信息將有可能無法收到,即在客戶端離線過程中丟失。如果應用持久性訂閱方式,那么客戶端可以向JMS注冊身份標識符,即使客戶端處于離線工作狀態,JMS Provider也會為其保存所有主題信息。當客戶端連接上線后,經過標識符的匹配,離線期間的信息將會準確傳送到客戶端[4]。
關于JMS的安全問題,在JMS規范中沒有對安全機制做出明確的解釋,而是將問題留給用戶,使其在JMS Provider中自行定義。信息安全是用戶較為關注的問題,以JMS為前提條件的異步信息在通信期間面臨著諸多威脅。例如,攻擊者在用戶客戶端偽造虛假身份,以此登錄系統,獲取對資源的訪問權限;沒有對用戶的訪問與操作權限加以審核,設置時不夠合理,導致攻擊者可以越過默認權限訪問系統資源;以JMS為前提的消息傳遞默認為明文傳輸方式,但是攻擊者獲取了信息傳遞的明文流,從而竊取并篡改系統消息,給系統接下來的運行埋下安全隱患[5]。
安全通信模型中,假設通信雙方擁有屬于自己的公鑰與密鑰,且通過證書管理模塊向認證中心申請公鑰相應的數字證書。如圖1所示,客戶A與服務器端初始化期間會向認證中心申請數字證書,證書內包含公鑰信息,雙方可利用對方公鑰驗證身份信息[6]。發送端用私鑰進行自身身份信息的標識,以此完成數字簽名。最后,信息接收方在收到數字簽名信息之后,經過認證中心獲取公鑰,解密散列值,再使用MD5算法計算對方身份信息散列值。對比兩個散列值,如果數值相等,即可驗證發送方的身份信息[7]。

圖1 身份認證流程
雖然通信雙方已經驗證了信息的合法性,但是信息傳輸的中間信道也會存在不安全性,攻擊者可截取信道明文信息。對此,有必要在雙方會話初期協商密鑰,雙方采用AES算法完成待傳輸數據的有效加密。由于服務器端安全性較高,所以模型中的會話密鑰可以由服務器端生成,具體流程如下。服務器端產生隨機數Rnum,將其傳入會話密鑰生成器形成會話密鑰Ski,應用用戶A的公鑰,使用RSA算法進行密鑰加密處理,產生會話密鑰Ski_sec。客戶接收到加密后的密鑰之后,使用私鑰,在RSA解密算法后對原始密鑰Ski進行解密[8]。
為提高服務器端安全性,模型中假定會話密鑰由服務器端生成,應用安全套接層(Secure Sockets Layer,SSL)協議保護服務器數據安全。作為JMS的核心對象,Topic與Queue能夠對模型進行安全性保護,模型加入這兩個管理器后即可擁有較好的安全效果。以Queue管理器為例,一個管理器只負責一個Queue即可,同時與分布式系統中其他管理器通信,具體操作如圖2所示[9]。會話建立時應確定主節點與從節點,保存節點中信息,如節點數目與IP地址信息等。

圖2 Queue管理器
采用Java創建模型,對其進行測試,服務器端安裝操作系統,模擬客戶端使用IBM兼容機。對不加安全模塊的JMS通信系統進行測試,統計一段時間內數據包數量的變化情況與通信延遲時間。隨后應用JMS安全通信模型,在原有的延遲基礎上增加數字簽名與消息加密,再對比數據,如圖3所示。經過對比后,得知JMS模型增加了8%左右的通信延遲,這對于安全性要求較高的系統來說處于可接受范圍內[10]。

圖3 系統通信延遲時間
應用消息中間件的時候往往會面對諸多威脅,為保證消息的機密性,可采用JMS消息模型,掌握其中的安全性問題,提出以數字簽名技術為前提條件的安全通信模型。應用數字簽名完成用戶身份認證,同時混合加密技術保障數據的完整性與安全性,實現對JMS系統資源的保護。