一种对网络报文安全封装的方法

文档序号:7627326阅读:207来源:国知局
专利名称:一种对网络报文安全封装的方法
技术领域
本发明涉及一种报文封装的方法,尤其涉及的是,一种实现对网络报文进行安全封装的方法。
背景技术
在下一代网络NGN及IP多媒体子系统IMS等各种基于分组网的业务网络架构中,报文的安全性是一个基本的需求,应当有一种手段可以为网络报文提供源认证、完整性、机密性和防重放等安全特性。这些特性一般采用各种签名、哈希、加密安全算法获得,但以什么方式组合这些基本安全算法,可以达到最好的安全性,可以满足特定的应用环境是现有技术没有公开的。
对网络报文进行安全封装,目前采用的普遍有两种方法网络层安全技术IPsec以及传输层安全技术TLS技术;但他们的应用都有一定的局限性,特别是在NGN以及IMS等基于分组网的业务网络中,以下分别加以说明,以使现有技术的缺陷一目了然。
在采用IPsec ESP(RFC 2406、RFC 2402)的方法中,由于目前业界网络层的安全协议就是IPSec,在许多应用协议安全保护中都提到了通过在网络层应用IPSec解决协议通信过程中的安全问题,在业界NGN的安全方案,也提到通过IPSec来解决NGN的网络安全问题。IPSec是由IETF的安全协议工作组制定的一个关于IP安全和密钥管理的协议,以确保在IP协议层上保证数据分组在Internet网络中具有互操作性、高可靠性和基于密码技术的安全服务标准,提供访问控制、无连接完整性、数据源鉴别、负荷机密性等安全服务。
IPSec的体系如图1所示,由两种通信安全协议验证头AH和安全载荷封装ESP,以及密钥交换管理协议-Internet密钥交换IKE和支撑的安全策略与联盟数据库组成所述验证头AH将每个数据报中的数据和一个变化的数字签名结合起来,共同验证报文发送方身份,使得通信一方能确认发送数据方的身份,并能够确认数据在传输过程中数据有没有被篡改,同时协议机制能提供防重放攻击保护,但不提供报文数据加密服务。
所述安全载荷封装ESP提供了一种对IP报文负荷进行加密的机制,使得网络监听者即便能捕获报文,也无法获取其中的数据信息,同时提供验证头AH所能提供的源验证服务、完整性保护、防重放攻击保护等功能。
所述密钥管理采用IKE,这是一种分散式的功能强大的、灵活的密钥管理协商协议,提供安全可靠的算法和密钥协商,帮助网络不同节点之间达成安全的通信的协定,包括认证方法、加密方法、采样的密钥、密钥的生存时间,以及安全的密钥交换等等。
所述安全策略SP和安全联盟SA数据库则为IPSec应用的基础,定义了对每一个流的安全策略即是否应用IPSec,若应用安全策略,则给出相应的安全联盟索引,而SA则给出了对应于IPSec应用时,使用的安全协议、工作模式、加密/认证算法、密钥以及密钥的生存期等参数。
解释域DOI则定义了安全联盟所对应的协议及该协议所对应的安全联盟参数内容,此处则为IPSec域。
根据上面的描述,现有技术的IPSec工作模式中,IPSec提供两种工作模式传送模式和隧道模式。传送模式仍然使用报文原有的明文IP头作为应用IPSec后的IP头,保留了原报文的IP头信息,即源、目的地址不变,所有安全相关的信息包括在AH/ESP的协议头中;隧道模式则对整个原始IP报文进行IPSec处理,并用具有IPSec功能设备自己的地址作为源地址、对端具有IPSec功能设备的地址作为目的地址加入到新的头中,对原始报文进行IPSec处理后的安全相关信息位于AH/ESP头中。通常传传输模式用于主机设备之间的传送,而隧道模式更适合于网络设备之间应用完成多个主机之间的安全交互。
但现有技术的IPsec具有以下缺陷其应用存在严重的与NAT的友好性问题,而在实际的网络环境中存在很多的NAT设备。IPsec的UDP封装可以解决NAT问题,但通信设备必须采用支持NAT穿越的IKE版本(相当于IKEv2),而且密钥协商或安全联盟建立需要通过IKE来完成,不支持手工配置方式来建立安全联盟,或其它应用层的安全联盟建立方式,如3GPP规范中定义的IMS AKA安全联盟建立方式。其实现过于复杂,要求通信设备双方定期发送NAT保活报文,确保NAT设备上的NAT表项不被老化。
在采用TLS(RFC 2246)的方法中,该安全协议是建立在传输层协议TCP的基础之上,为上层的应用协议提供安全保障,典型的基于TCP的传输层协议包括SSL和PCT协议,为了避免协议的混乱、以及协议的扩展性和兼容性,目前上述协议已发展为统一的IETF标准-传输层安全协议TLS。在很多协议的标准中都提到了通过TLS来保证协议通信的安全。
TLS提供基于PKI公钥架构下的安全服务,包括单向或双向的身份认证,要求服务器提供证书,客户端证书可选或者通过客户端输入用户名/口令方式来进行认证,同时提供报文的保密性服务。
TLS协议由两层构成,底层的TLS Record协议和高层的TLS Handshake协议,其中TLS Handshake协议又包括三个子协议TLS握手协议、TLS密码变化协议和TLS告警协议。所述TLS Record协议提供分段、压缩、数据认证和加密功能,用于加密封装各种更高级的应用层协议,如HTTP、SIP等,建立在可靠的传输协议(如TCP)之上,通过对称加密算法对应用层报文加密提供机密性服务和报文验证算法提供报文完整性服务来一起提供连接的安全性保证,整个记录协议处理过程为现有技术所公开,在此不再赘述。所述TLS Handshake协议实现客户和服务器之间的一方(主要对服务器)或双向认证,协商记录协议中用到的加密算法和密钥及验证算法和密钥,协商得到的会话参数供记录协议为多个连接重复使用,避免每个连接协商新的会话参数所带来的开销。同时协议保证协商过程是可靠的及协商得到的共享密钥是安全的。
但是采用TLS,身份认证密钥协商与报文安全封装被强制相关,使得应用非常不灵活,另外TLS身份认证和密钥协商流程非常复杂,开销较大。在很多情况下并不需要这么复杂的认证过程。其次,采用TLS只能用于TCP环境中,而目前UDP应用将越来越广泛,特别是NGN、IMS环境下,大部分协议将采用UDP协议,造成无法利用TLS的安全机制。而且,其不支持手工配置方式来建立安全联盟,或其它应用层的安全联盟建立方式,如3GPP规范中定义的IMS AKA安全联盟建立方式。
因此,现有技术存在缺陷,而有待于继续改进和发展。

发明内容
本发明的目的在于提供一种对网络报文安全封装的方法,实现网络报文的独立安全封装,可以非常灵活的应用;同时也不存在NAT穿越问题,其与传输层协议无关,无论TCP还是UDP都可适用。
本发明的技术方案包括一种对网络报文安全封装的方法,其包括以下步骤A、产生应用层报文;B、封装头,产生一随机数作为初始序列号,每发送一个报文序列号进行变化,并将序列号以及报文长度字节作为封装头附加到报文中;C、负载填充;D、对报文加密,将应用层报文以及后面的附加填充字段一起用加密算法和加密密钥进行加密运算;E、消息认证码计算,将完整性检测的会话密钥附加到封装头前面对整个报文进行哈希计算,并将输出字节附加到填充字段后面,作为报文消息认证码;F、将安全封装后的信令报文封装IP/UDP头进行发送。
所述的方法,其中,所述步骤D的加密不对封装头进行,并且所述会话密钥只参与报文哈希计算,不作为报文的一部分。
所述的方法,其中,所述步骤D的加密算法为AES算法。
所述的方法,其中,所述步骤B中的有序变化为在每发送一个报文时,序列号加一。
所述的方法,其中,所述步骤C中,其最后一字节表示填充长度。
所述的方法,其中,还包括安全验证流程,包括步骤A1、接受网络报文数据包;B1、映射安全关联,根据源目的IP地址端口号信息,获取所协商或者手工配置的相关的会话密钥、加密认证算法,安全封装格式信息;C1、对序列号进行检查,根据源目的IP地址端口号信息,获取本会话的序列号窗口,如果本数据包序列号落入窗口之内,则接收,否则丢弃该数据包;D1、对完整性进行检测,边界点利用密钥协商阶段获得的完整性检测会话密钥以及数据报文信息完成检测,如果数据包完整性检测成功,则继续进行下面处理,否则丢弃该数据包;E1、对数据包进行利用相应的密钥和加密算法进行解密;F1、加密数据长度应该与填充长度与源数据包长度之和相同,之后去掉填充字节;G1、将报文进行相应的应用层处理。
本发明所提供的一种对网络报文安全封装的方法,由于采用应用层封装方式,所以与网络地址转换设备NAT无关,不存在NAT友好性问题;并且引入了序列号窗口的设计,可以防止重放攻击,或者重放性拒绝服务攻击,因此增强了安全性;本发明方法的安全封装与安全关联协商无关,因此其应用更为灵活。


图1为现有技术的IPSec的体系结构示意图;图2为本发明网络报文封装方法的报文前后对比图;图3a至图3e为本发明网络报文的安全封装过程的报文格式示意图;具体实施方式
以下结合附图,将对本发明的各较佳实施例进行更为详细的说明。
本发明对网络报文安全封装的方法中,并不涉及安全关联的协商过程,其在报文安全封装协议获得任意长的网络报文后,进行封装、加密、认证处理,最后形成一个经过加密和完整性检测的应用层报文传送给传输层进行发送。
本发明方法的网络报文的封装格式示例说明如下首先,对原始信令报文进行封装,封装后的报文格式为struct{uint48 seq_num;
uint16 length;\\fragment的长度;
opaque fragment[SignalPlaintext.length];
}SignalPlaintext;
其中,seq_num为从认证加密开始设置的数据报文的序列号,并从随机数开始计数。当在重新登录的时候,应当重新开始计数,该序列号的设置主要用来防止重放,在重放时其无法模仿该随机的序列号。Length为原始报文长度。Fragment为原始报文内容。
其次,进行负载保护;对以上封装后的报文进行负载保护,先加密后认证。加密认证后的报文格式如下所示struct{uint48 seq_num;
uint16 length;
GenericCipher ciper_signal;
}SignalCiphertext;
struct{opaque content[SignalPlaintext.length];\\加密信令opaque padding[GenericCipher.padding_length];
uint8 padding_length;
opaque MAC[CipherSpec.hash_size];
}GenericCipher;
上述seq_num与length定义与原始封装报文相同。content为加密后的报文内容。padding为分组加密需要对报文进行填充的填充字段,填充字段包括填充字段长度附加到信令报文的后面使之成为分组加密中一个加密块的整数倍,对于流加密也将填充。padding_len用来表示填充字节的长度,用一字节来表示,最大为255字节。0x00表示没有填充字段,填充长度位为必选项,填充字节以及填充长度字节都将进行加密。MAC为认证字段,其按以下计算公式来计算MAC=HMAC_hash(MAC_session_Key,SignalCiphertext.seq_num+SignalCiphertext.length+SignalCiphertext.GenericCipher.Content+SignalCiphertext.GenericCipher.padding+SignalCiphertext.GenericCipher.padding_length
);
再次,设置安全封装头在数据包中的位置,如图2所示的。对于封装后的信令报文按照下图示意进行IP头和UDP头封装并发送。关于传输层协议的选择与原来报文的选择策略相同,当整个数据包长度包括安全封装开销字段大于网络PMTU值的时候,必须采用TCP来作为传输层协议,而不能采用UDP。
本发明所述对网络报文安全封装的方法步骤包括A、产生应用层报文;B、封装头,产生48位随机数SeqA作为初始序列号。以后每发送一个报文序列号加1。将序列号以及报文长度字节作为封装头附加到报文最前面,处理后的报文格式示意如图3a所示。
C、负载填充。假设应用层报文有效长度为578字节,采用AES加密(当然也可以采用其他任何加密算法),AES分组长度为16字节,填充长度的字节数为1。所有负载填充长度的值为16-(578+1)mod16=13字节,由于填充字段最长为256字节,所有同时可选的值为13+n×16,n可以选的值为0、1、2、3到15等。为了降低数据包的长度,建议选的n为0,Padding_length的值为13,所以报文后面将附加填充值为13的14填充字节。最后一字节表示填充长度,此时填充后的报文格式示意如图3b所示。
D、报文加密。将应用层报文以及后面的14个附加填充字段共计592字节一起用AES算法和加密密钥进行加密运算,加密将不对封装头进行,处理后的报文格式如图3c所示,其中signal packet以及padding和pad-len等部分经过了加密。
E、消息认证码MAC计算。将完整性检测的会话密钥ICV_key附加到封装头前面对整个报文进行SHA1哈希计算。将输出的20字节附加到填充字段后面,作为报文MAC。会话密钥只参与报文哈希计算,并不作为报文的一部分。处理后的报文格式如图3d所示。
MAC=SHA1(ICV_Key,SeqA
+length+SignalPacket+Padding+Pad-len);
F、将上面安全封装后的信令报文封装IP/UDP头进行发送。最后发送的报文格式如图3e所示。
本发明方法的安全验证流程是封装的反过程。其具体处理步骤包括A1、接受数据包;B1、映射安全关联,根据源目的IP地址端口号信息,获取所协商或者手工配置的相关的会话密钥、加密认证算法,安全封装格式等信息。
C1、对序列号检查,根据源目的IP地址端口号信息,获取本会话的序列号窗,如果本数据包序列号落入窗口之内,则接收,否则丢弃该数据包。第一次会话序列窗口根据通过认证数据序列号设置。每接收到一个正确的数据包,接受窗口进行相应移动。
D1、对完整性进行检测。边界点利用密钥协商阶段获得的完整性检测会话密钥ICV_Key以及数据报文信息完成如下运算。
MAC'=SHA1(ICV_Key,SeqA+length+SignalPacket+Padding+Pad-len);
如果MAC’=MAC,则本次数据包完整性检测成功,继续进行下面处理,否则丢弃该数据包。
E1、解密。对数据包进行利用相应的密钥和加密算法进行解密。
F1、加密数据长度应该与填充长度与源数据包长度之和相同。然后去掉填充字节。
G1、将报文进行相应的应用层处理。
由于本发明的上述方法采用了应用层封装方式,由于NAT只是对网络层和传输层有关,不存在NAT友好性问题。其次,本发明的封装格式引入了序列号的设计,对于利用截取的已经合法的包进行重放的攻击方式,由于有以每次随机数为基础的序列号的限制,可以很容易判别丢弃,从而可以有效的防止重放攻击,同时序列号的设置也使得伪造数据包必须首先猜测目前的序列号,从而也可以一定程度上避免拒绝服务攻击,因此增强了安全性。本发明的安全封装与安全关联协商无关,不管采用IKE的密钥交换方式还是用户自定义的安全关联协商方式,都可以采用本数据包封装方案,因此其应用更为灵活。
本发明方法并不涉及安全关联的协商的过程,只是在提供了在通信双方完成密钥、算法等安全关联信息(SA)协商以后的报文安全封装方法,对于密钥协商以及认证过程等可以通过AKA或其他的密钥协商流程完成,或者手工配置的方法完成,其为本领域技术人员所熟知,因此不再赘述。
应当理解的是,本发明的上述针对具体实施例的描述较为详细,但并不能因此而认为是对本发明专利保护范围的限制,本发明的专利保护范围应以所附权利要求为准。
权利要求
1.一种对网络报文安全封装的方法,其包括以下步骤A、产生应用层报文;B、封装头,产生一随机数作为初始序列号,每发送一个报文序列号进行变化,并将序列号以及报文长度字节作为封装头附加到报文中;C、负载填充;D、对报文加密,将应用层报文以及后面的附加填充字段一起用加密算法和加密密钥进行加密运算;E、消息认证码计算,将完整性检测的会话密钥附加到封装头前面对整个报文进行哈希计算,并将输出字节附加到填充字段后面,作为报文消息认证码;F、将安全封装后的信令报文封装IP/UDP或TCP头进行发送。
2.根据权利要求1所述的方法,其特征在于,所述步骤D的加密不对封装头进行,并且所述会话密钥只参与报文哈希计算,不作为报文的一部分。
3.根据权利要求1所述的方法,其特征在于,所述步骤D的加密算法为AES算法。
4.根据权利要求1所述的方法,其特征在于,所述步骤B中的变化为在每发送一个报文时,序列号加一。
5.根据权利要求1所述的方法,其特征在于,所述步骤C中,其最后一字节表示填充长度。
6.根据权利要求1所述的方法,其特征在于,还包括安全验证流程,包括步骤A1、接受网络报文数据包;B1、映射安全关联,根据源目的IP地址端口号信息,获取所协商或者手工配置的相关的会话密钥、加密认证算法,安全封装格式信息;C1、对序列号进行检查,根据源目的IP地址端口号信息,获取本会话的序列号窗口,如果本数据包序列号落入窗口之内,则接收,否则丢弃该数据包;D1、对完整性进行检测,边界点利用密钥协商阶段获得的完整性检测会话密钥以及数据报文信息完成检测,如果数据包完整性检测成功,则继续进行下面处理,否则丢弃该数据包;E1、对数据包进行利用相应的密钥和加密算法进行解密;F1、加密数据长度应该与填充长度与源数据包长度之和相同,之后去掉填充字节;G1、将报文进行相应的应用层处理。
全文摘要
本发明公开了一种对网络报文安全封装的方法,其包括产生应用层报文;封装头,产生一随机数作为初始序列号,每发送一个报文序列号加1,并将序列号以及报文长度字节作为封装头附加到报文最前面;负载填充,其最后一字节表示填充长度;对报文加密,将应用层报文以及后面的附加填充字段一起用加密算法和加密密钥进行加密运算;消息认证码计算,将完整性检测的会话密钥附加到封装头前面对整个报文进行哈希计算,并将输出字节附加到填充字段后面,作为报文消息认证码;将安全封装后的信令报文封装IP/UDP或TCP头进行发送。本发明方法由于采用应用层封装方式,所以与网络地址转换设备NAT无关,不存在NAT友好性问题,增强了安全性。
文档编号H04L29/06GK1859291SQ200510120668
公开日2006年11月8日 申请日期2005年12月13日 优先权日2005年12月13日
发明者刘利锋, 郑志彬 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1