WTLS是WAP的安全模块,它为WAP应用提供加密、鉴别和数据完整性服务,作为WAP 协议栈的一个层次向上层提供安全传输服务接口。WTLS是以TLS标准为基础发展而来的,并针对无线网络环境中的连接方式、计算能力、带宽限制等特点进行了必要的改造,并具有支持数据报服务、支持优化的分组大小以及握手、动态密钥更新等特点。
WTLS的构造
WTLS工作在无线数据报协议(WDP)层和无线事务协议 (WTP)层之间,它所提供的服务对这两层协议来说是可选的。WTLS模块由以下部分构成:
1.记录协议(Record Protocol)
本协议是一个从相邻层接收原始数据的协议,它仅在连接状态下运行。它将所接收到的数据进行压缩、加/解密、鉴别和数据完整性处理,然后向上层转交或向下层发送。本协议进行的有关处理完全按照在握手协议中通信双方所协商一致的处理流程和算法进行。
2.握手协议(Handshake Protocol)
所有与安全相关的参数都是在握手阶段协商一致的。这些参数包括:协议版本号、使用的加密算法、鉴别的信息和由公开密钥技术生成的密钥素材。握手流程如图1所示。握手阶段从客户方与服务方进行Hello消息应答开始,在两个 Hello消息中,通信双方商定一致的会话方式。当客户方发送Client Hello消息以后,它等待接收Server Hello Done消息。服务方如果需要鉴别,可以发一个代表自己的服务器证书给客户方,也可以要求客户方鉴别自己。Server Key Exchange 用于向客户方提供公开密钥。
当客户方收到Server Hello Done消息后,返回Client Certificate 消息以让服务方鉴别自己;随后,客户方发送一个Client Key Exchange消息,包含由服务方用公开密钥加密过的共享主密钥和其他一些信息,以使双方完成密钥交换;最后,客户方发送一个包含验证前面所有数据的Finished Message,服务方也同样发送一个Finished Message证实交换和计算的信息来回应客户方。此外,任何一方都可以发送一个Change Cipher Spec消息来决定双方使用的密码参数。
3.报警协议(Alert Protocol)
记录协议的警报消息主要有警告、危急、致命三种。警报消息使用当前的安全状态发送。如果警报消息的类型是“致命”,则双方将结束安全链接。同时,其他使用安全会话的链接可以继续,但会话标识必须设成无效,从而使失败的链接不能被用于建立新的安全链接。当警报消息的类型为“危急”时,当前的安全链接结束,而其他使用安全会话的链接可以继续,会话标记可以用于建立新的安全链接。
WTLS中的出错处理是基于警报消息的,当发现错误时,发现的一方发送包含出现错误的警报消息,进一步的处理依赖于出现错误的级别和类型。
4.改变密码标准协议(Change Cipher Spec Protocol)
此协议用来在WAP会话的双方间进行加密策略改变的通知,仅使用一种改变密码标准消息。此消息在双方的安全参数协商一致后,在握手阶段由客户方或服务方发送给对方实体。当消息到达时, 发送消息的一方设定当前的写状态为待决状态(Pending State),接收消息的一方设定当前的读状态为待决状态。
WTLS安全问题解决方法
1.加密
WTLS的保密性依靠加密通信通道来实现,所使用的加密方法和计算共享密钥所需的值在握手时进行交换。首先,客户端和服务器交换Hello消息,此后,客户端和服务器交换Premaster Secret,这个值用来计算Master Secret,计算所使用的加密算法在服务器的Hello消息中进行选择。在这条消息中,服务器通知客户端已经选择了一个密码组,客户端向服务器提供一个密码组列表。如果服务器未发现合适的密码组,则握手失败,连接关闭。当前常用的大批量加密算法有:支持40、56和128位密钥的RC5,支持40和56位密钥的DES,支持40、56和128位密钥的3DES和IDEA。所有的算法都是块加密算法。加密密钥在密钥块的基础上进行操作,密钥块根据协商的密钥刷新频率在一段时间后重新运算。
2.密钥交换
为了保证安全的联系通道,加密密钥或计算密钥的初始值必须以安全方式进行交换。WTLS的密钥交换机制提供了一种匿名交换密钥的方法。在密钥交换过程中,服务器发送包含服务器公钥的服务器密钥交换消息。密钥交换算法可能是RSA、Diffie-Hellman或Elliptic Curve DiffieHellman。在RSA和匿名RSA中,客户端用服务器的公钥加密Pre-master Secret,并在客户密钥交换消息中将其返回给服务器。在基于Diffie-Hellman的算法中,客户端和服务器在一个私钥和相应的公钥基础上计算 Pre-master Secret。
----如果客户端列出了它所支持的用密码写的密钥交换方法,服务器可以选择是使用基于客户请求的方法,还是定义另一种方法。如果客户端并未提出任何方法,则服务器必须指明。
3.鉴别
WTLS的身份鉴别依靠证书实现。身份鉴别可以在客户端和服务器之间进行,也可以在服务器允许的情况下,只由客户端鉴别服务器,服务器还可以要求客户端向服务器证明自己。在WTLS规范中,身份鉴别是可选的。
当前所支持的证书类型包括:X.509v3、X9.68 和 WTLS证书。在客户端和服务器之间交换Hello消息之后,鉴别过程随即开始。当使用鉴别时,服务器发送服务证书消息给客户端。根据WTLS规范,为了优化流量和客户处理,服务器一次只发送一个证书。服务器证书由CA公司独立分发的公钥进行鉴别。服务器也可以发送证书请求消息给客户端以鉴别之。此时,客户端发送客户证书消息返回给服务器,客户端证书遵循与服务证书相同的结构。
4.完整性
数据完整性通过使用消息鉴别编码(MAC)而得到保证, MAC算法同时也被认为是加密算法。客户端发送一列所支持的MAC算法,服务器在返回的Hello 消息中标出所选的算法。WTLS支持通用的MAC算法,MAC在压缩的WTLS 数据上产生。
5.安全状态
在安全协商后,会话通信双方将拥有同样的安全状态。当前状态通过安全参数产生,并持续更新。
WTLS的实现
1.总体结构
WTLS需要与WTP及WDP层进行协议分组的交互。当 WTLS与上层WTP通信时,采用端口号为9203的UDP Socket进行;而在与下层WDP通信时,为了区分不同的客户请求,我们为每个客户会话都分配了一个UDP Socket。WTLS 轮询检测这些Socket端口。有分组到达时,如果是来自上层WTP的数据报,则产生一个新的WTLS状态机,并把它加入状态机队列。若有下层WDP的数据报到达,则产生一个新的WTLSEvent_SEC_UnitdataReq事件,并把这个事件加入到当前状态机的事件队列中去等待处理。
2.主要数据结构和处理机制
WTLS处理机和WTLS事件是两个主要的数据结构,分别如2、3所示。
我们按照WTLS规范,并采用网络协议实现中常用的一些机制,如队列模型等,根据规范中定义的事件和状态转化表对WAP网关方的WTLS的事件进行处理。对于处理中涉及到的安全处理,如密钥交换、加密解密、完整性检查和证书的鉴别机制等,我们在实现时采用相关的公开编程接口。上述实现正在进行和调试之中。
WTLS是WAP提供安全的端到端连接的初步尝试。我们认为,把支持的算法按合适的方法结合起来,能够保证一定的安全性,从而解决大多数情况下的安全问题。但我们同时也认为,仅仅依赖WTLS所提供的安全功能要达到绝对的安全是不可能的。WAP应用的安全问题必须结合Internet和其他网络的安全问题同步解决才是唯一的正确道路。