具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例在IP(Internet Protocol,因特网协议)报文,例如IPv6(InternetProtocol version 6,因特网协议版本6)扩展头中增加CGA(CryptographicallyGenerated Addresses,加密生成地址)扩展头,该CGA扩展头可以包括CGARequest(CGA请求)、CGA Params(CGA参数)、CGA Sig(CGA签名)。CGA扩展头用于携带CGA信息。数据包的接收方根据CGA信息对发送方的地址进行验证。下面以IPv6报文做为实施例进行阐述,显然对于其他类型的IP报文,只要具备扩展协议头的字段或者兼容IPv6报文,则都可以应用本发明,本发明并不限制于IPv6报文。例如,在后续高于IPv6版本的协议下的IP报文或者兼容IPv6的IP报文,只要该IP报文具备扩展头,都可以实施本发明。
在IPv6里,可选的网络层信息在一个独立的头部编码,放在包中IPv6头与上层协议头之间。一个IPv6头可以携带零个,一个或者更多的扩展头,每个扩展头由前一个头中的“下一个头”字段标识。可以在IPv6扩展头中增加CGA扩展头。例如,增加了CGA扩展头后的IPv6扩展头排列顺序如下:
IPv6 header
0 Hop-by-Hop Options header
60 Destination Options header
43 Routing header
44 Fragment header
149 CGA header
51 Authentication header
50 Encapsulating Security Payload header
其中,前面的数字是协议号,由IANA分配得来,新增加的CGA扩展头可以使用暂未分配的协议号,例如上文中提及的149,当然还可以使用其他未使用的协议号。
如图1所示,本发明提供的数据包处理方法的一个实施例中,当发送方发送一个携带CGA扩展头的IPv6报文时,包括如下步骤:
S101:生成一个CGA扩展头;
所述CGA扩展头中可以包括:发送方公钥以及发送方数字签名;发送方根据公钥和一些相关参数通过计算单向哈希函数生成一个IPv6源地址,利用发送方的私钥进行数字签名,并将相关参数、数字签名填充到CGA扩展头的相应位置。
S102:将CGA扩展头加入到IPv6报文的扩展头中,生成一个携带所述CGA扩展头的IPv6报文;
CGA扩展头位于IPv6报文中IPv6头与上层协议头之间。
S103:向接收方发送携带CGA扩展头的IPv6报文,所述IPv6报文用于接收方实现IPv6报文发送方的源地址验证。
本发明的一个实施例中,CGA扩展头的格式如图2所示,所述CGA扩展头包括:
下一头(Next Header)字段,为8比特的选择符,标识该CGA扩展的下一个头类型。
扩展头长度(Hdr Ext Len)字段,为8比特无符号整数。标识该CGA扩展头的长度,计算长度时不包括前8字节,以8字节为单位。该字段长度为0,表示一种特殊含义,即初始化CGA。当通信一方想要使用CGA保护通信时,可以选择发出长度为0的CGA扩展;当通信一方收到长度为0的扩展头时,则向对方发出CGA请求。
预留域(Reserved)字段,长度为16比特,以备将来扩展使用。该预留域字段设为0。
选项(Options)字段,该部分长度可变,包含了一个或者多个数据类型。
Options可以选择三种类型数据,分别是CGA请求、CGA参数、CGA签名。CGA请求用于请求对方提供CGA参数;CGA参数用于传输CGA参数;CGA签名是使用CGA节点的私钥对数据包负载部分的签名。CGA扩展头如果包含CGA参数选项,则同时包含CGA签名选项,否则接收方向发送方发送一个错误的ICMP消息至源地址,通知不可识别的选项类型。在没有收到CGA请求的时候,发送方也可以在数据包中添加CGA扩展头;对CGA扩展头的处理方式(认证或者忽略)由接收方决定。
发送方主机在网络层收到上层传下来的数据包,在封装IPv6头时就可以将CGA扩展头同时封装进去。如果主机发送的数据包的包头中包含了CGA请求选项时,那么就是想验证接收方的源地址,则接收方发回的数据包中就应该携带CGA参数和CGA签名选项,向发送方主机提供验证所需要的数据内容,其中CGA参数选项中的Sequence Number字段为CGA请求选项中的序列号的值加1;发送方主机也可以主动在发出的数据包中加入CGA扩展头,包含CGA参数和CGA签名选项,为接收方提供验证发送方地址的相关数据内容,其中CGA参数选项中的Sequence Number字段置0。
本发明实施例提出的CGA请求选项的格式如图3所示,该CGA请求选项包括:
类型(Type)字段,为8比特无符号整数,在本实施例中,当该类型字段的数值为193时,表明该数据包为CGA请求。在其它实施例中,也可用其它数值表明该数据包为CGA请求。
预留域(Reserved)字段,长度为24比特,以备将来扩展使用。该预留域字段设为0。
序列号(Sequence Number)字段,为32比特随机数,包括防止重放攻击的信息。
主机可以根据上层协议,主动向接受方发起CGA请求,要求接受方发送CGA参数和CGA签名信息,对接受方进行源地址验证。
本发明实施例提出的CGA参数选项的格式如图4所示,该CGA参数选项包括:
类型(Type)字段,为8比特无符号整数。在本实施例中,当该类型字段的数值为194时,表明该数据包为CGA参数。在其它实施例中,也可用其它值表明该数据包为CGA参数。
长度(Length)字段,为8比特无符号整数,以字节为单位,表明整个CGA参数的长度,为类型字段、长度字段、填充长度字段、预留域字段、序列号字段、CGA参数字段以及填充字段等各字段长度的总和。
填充长度(Pad Length)字段,为8比特无符号整数,表示填充字段的长度,单位为字节。
预留域(Reserved)字段,长度为8比特字段,以备将来扩展使用。该预留域字段必须设为0。
序列号(Sequence Number)字段,为32比特整数,包括防止重放攻击的信息。如果该CGA参数用于响应CGA请求,该序列号字段的值为CGA请求中的序列号的值加1;否则,将该序列号字段置为0。
参数(Parameters)字段,长度可变,包括CGA参数信息。
填充(Padding)字段,可变长度域,用于使数据包长度为8字节的整数倍。该填充字段的内容为0。
本发明实施例提出的CGA签名选项的格式如图5所示,该CGA签名选项包括:
类型(Type)字段,为8比特无符号整数。在本实施例中,若类型字段的数值为195时,表明该数据包为CGA签名。在其它实施例中,也可用其它数值表明该数据包为CGA签名。
长度(Length)字段,为8比特无符号整数,以字节为单位表明整个CGA签名的长度,为类型字段、长度字段、填充长度字段、预留域字段、CGA签名字段和填充字段等各字段长度的总和。
填充长度(Pad Length)字段,为8比特无符号整数,表示填充字段的长度,单位为字节。
预留域(Reserved)字段,长度为8比特,以备将来扩展使用。该预留域字段设为0。
签名(Signature)字段,为可变长度字段,包括用发送者私钥对数据包内容的签名。
填充(Padding)字段,为可变长度字段,用于使数据包长度为8字节的整数倍。该填充字段的内容为0。
接收方可以在收到发送方的CGA请求后,向发送方返回携带CGA参数和CGA签名选项的数据包,提供给发送方主机验证所需要的数据内容,在这种方式下,CGA参数选项中序列号字段的值为CGA请求中的序列号的值加1;发送方也可以主动在发出的数据包中加入CGA扩展头,包含CGA参数和CGA签名选项,为接收方提供验证自己地址的相关数据内容,在这种方式下,CGA参数选项中的Sequence Number字段置0。
CGA参数选项中携带的CGA参数字段与IPv6报文头中的源地址对应。发送方根据公钥和一些附加参数通过计算单向哈希函数生成一个IPv6源地址,并按照CGA协议的要求生成其他参数。
CGA签名选项中的签名使用的私钥与同一个扩展头中的CGA参数中携带的公钥对应。
发送方生成CGA签名选项的步骤如下:
主机获取下列内容,并按顺序将下列内容连接起来:
从IP数据包的报头信息中获得128位源地址;
从IP数据包的报头信息中获得128位目的地址;
除了CGA签名选项的CGA扩展头部分;
IP数据包的负载部分(传输层以及以上部分)。
然后对得到的数据使用私钥进行签名,并将签名放入CGA签名选项的Digital Signature字段中。
如图6所示,本发明提供的一个实施例中,当接收方收到一个携带CGA扩展头的IPv6报文,处理流程如下:
S601:接收来自发送方的携带CGA扩展头的IPv6报文;
接收方的网络层接收下层传输来的IPv6报文。
S602:在网络层,从所述IPv6报文中获得所述CGA扩展头,所述扩展头中包括发送方的CGA参数、签名信息;
S603:根据所述CGA扩展头携带的信息,对发送方的源地址进行验证;
根据CGA扩展头中携带的CGA参数和CGA签名选项,对IPv6报文进行验证。
S604:如果验证通过,则向上层传输去除所述CGA扩展头的IPv6报文,由上层对报文进行相应处理;
S605:如果验证不通过,则丢弃所述IPv6报文,并向发送方发送ICMP错误报文。
在步骤S603之前还可以包括:网络层确认需要对IPv6报文的源地址进行验证;网络层可以根据相关的配置信息确定是否需要进行验证。所述配置信息一般是来自上层协议,上层协议可以根据用户的输入、主机默认的配置或者上层协议的安全性要求生成所述配置信息,并将配置信息通知给网络层。如果接收方根据相关的配置信息确认需要验证,验证步骤的一个实施例如下:
S701:验证CGA参数中序列号的值;
如果收到的IPv6报文为对CGA请求的响应,接收方首先将CGA参数选项中的Sequence Number减1,与自己缓存的CGA请求中的Sequence Number比较。如果一致,则进行下一步;否则,丢弃该IPv6报文,发送ICMP错误报文。
S702:根据CGA参数,对IPv6报文头中包含的源地址进行认证。如果认证通过,则进行下一步;否则,丢弃该IPv6报文,发送ICMP错误报文。
S703:使用CGA参数中的公钥对CGA签名中的签名字段的内容解密,将得到的内容和IPv6报文中部分内容串接的哈希值比较。如果内容一致,则验证通过;否则,丢弃该IPv6报文,发送ICMP错误报文。
在步骤S601之前还可以包括:
生成并向发送方发送一个携带CGA扩展头的IPv6报文,所述CGA扩展头中包含CGA请求选项,请求所述发送方发送CGA验证信息;
发送方回复携带CGA扩展头的IPv6报文,CGA扩展头中包括CGA参数和CGA签名选项,其中CGA参数选项的Sequence Number为CGA请求选项中Sequence Number的数值加1。
生成并发送一个携带CGA扩展头的IPv6报文的步骤包括:
生成一个CGA扩展头,所述CGA扩展头中包括CGA请求选项;
将CGA扩展头加入到IPv6报文的扩展头中,生成一个携带所述CGA扩展头的IPv6报文;
向接收方发送携带CGA扩展头的IPv6报文。
本发明实施例中,通过将发送方的CGA参数、签名信息以CGA扩展头加入到IPv6扩展头中,接收方可以利用接收到的信息在网络层实现对IPv6报文的源地址进行验证,为网络层提供源地址验证的方法,充分发挥CGA协议源地址验证的作用,使得本不可靠的网络层,有了安全性保障;同时,由于在网络层进行安全验证,该安全机制不限于某一种或几种上层应用协议,具有应用范围广泛、通用性强的特性。
显然,本发明并不限制于IPv6报文。例如,在后续高于IPv6版本的协议下的IP报文或者兼容IPv6的IP报文,只要该报文具备扩展头,都可以实施本发明,其实施的流程与上述实施例方法类似。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
图8所示为本发明一个实施例的应用场景,对于相互通信的两个主机,发送方在网络层将CGA参数和签名添加到CGA扩展头中,并封装到IPv6报文中,再将IPv6报文发送出去;接收方在网络层提取发送方的CGA参数和签名并进行验证,如果验证成功,则向传输层传输去掉CGA扩展头的IPv6报文。
如图9所示,本发明一种数据包处理的装置的一个实施例包括:
接收单元11,用于接收来自发送方的携带CGA扩展头的IPv6报文;
CGA扩展头获取单元12,用于从所述IPv6报文中获得所述CGA扩展头中携带的发送方的CGA参数、签名信息;
验证单元13,用于根据所述CGA参数、签名信息,对IPv6报文的源地址进行验证,并输出验证结果;
传输单元14,用于当验证结果为通过时,向上层传输去除所述CGA扩展头的IPv6报文;
错误处理单元15,用于当验证结果为不通过时,丢弃所述IPv6报文,并向发送方发送错误报文。
根据本发明的一个实施例,所述数据包处理的装置还可以包括:
CGA信息请求单元,生成并发送一个携带CGA扩展头的IPv6报文,所述CGA扩展头中包含CGA请求选项,请求发送方发送CGA参数、签名信息。
在一个实施例中,所述CGA信息请求单元可以包括:
扩展头生成单元,用于生成一个CGA扩展头,所述CGA扩展头中包括CGA请求选项;
添加单元,用于将CGA扩展头加入到IPv6报文的扩展头中,生成一个携带所述CGA扩展头的IPv6报文;
发送单元,用于发送携带所述CGA扩展头的IPv6报文。
根据本发明的一个实施例,所述数据包处理的装置还可以包括:
验证确认单元,用于根据相关的配置信息,确认需要对IPv6报文的源地址进行验证。
所述配置信息一般是来自上层协议,上层协议可以根据用户的输入、主机默认的配置或者上层协议的安全性要求生成所述配置信息,并将配置信息通知给网络层。
如图10所示,本发明实施例中验证单元13的一个实施例包括:
序列号验证单元131,用于验证CGA参数中序列号的值,并在验证通过后传输所述IPv6报文;否则,输出验证不通过的验证结果;
源地址认证单元132,用于根据CGA参数,对IPv6报文头中包含的源地址进行认证;并在验证通过后传输所述IPv6报文;否则,输出验证不通过的验证结果;
签名验证单元133,用于使用CGA参数中的公钥对CGA签名中的签名字段的内容解密,将得到的内容和IPv6报文中部分内容串接的哈希值比较,如果内容一致,输出验证通过的验证结果;否则,输出验证不通过的验证结果。
本发明实施例中,通过将发送方的CGA参数、签名信息以CGA扩展头加入到IPv6扩展头中,接收方可以利用接收到的信息在网络层实现对IPv6报文的源地址进行验证,为网络层提供源地址验证的方法,充分发挥CGA协议源地址验证的作用,使得本不可靠的网络层,有了安全性保障;同时,由于在网络层进行安全验证,该安全机制不限于某一种或几种上层应用协议,具有应用范围广泛、通用性强的特性。
显然,本发明装置实施例并不限制于IPv6报文。例如,在后续高于IPv6版本的协议下的IP报文或者兼容IPv6的IP报文,只要该IP报文具备扩展头,都可以实施本发明,其实施的方式与上述实施例的装置类似。
以上所述仅为本发明的几个实施例,本领域的技术人员依据申请文件公开的可以对本发明进行各种改动或变型而不脱离本发明的精神和范围。