陈德亮
(广东南方电信规划咨询设计院有限公司,广东 深圳 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系统资源的保护。