专利名称:一种报文处理方法及系统的制作方法
技术领域:
本发明涉及通信网络路由安全技术,尤其涉及一种报文处理方法及系统。
背景技术:
重放攻击又称重播攻击,是一种常见的网络攻击方法,攻击者首先截获在通信双方在某次交互过程中由其中一方发送的数据包,并在以后某个合适的时机向该数据包的接收端重新发送截获的数据,如果在所述数据包中没有包含足够的信息使接收端能够判断出该数据包是第一次发送的数据包还是重发的数据包,攻击者就能够冒充通信双方中的一方来欺骗另一方,以达到攻击的目的。重放攻击会不断恶意或欺诈性地重复一个有效的数据传输,重放攻击可以由发起者,也可以由拦截并重发该数据的敌方进行。攻击者利用网络监听或者其他方式盗取认证凭据,之后再把它重新发给认证服务器。通常采用加密和IPSec中重放窗口来抵抗重放攻击。中间系统到中间系统(IS-1S)协议是目前在网络中应用最广泛的内部网关路由协议之一,该路由协议使用三大类报文=Hello报文、链路状态数据包(LSP)和序列号数据包(SNP),Hello报文用来建立和维持IS-1S路由之间的邻接关系;LSP用来承载和泛洪路由器的链路状态信息,并且LSP是路由器进行最短路径优先(SPF)技术的依据;SNP用来进行链路状态数据库的同步,并且用来对LSP进行请求和确认。根据不同的IS-1SPDU类型和特定的网络环境,紧跟在各种类型IS-1SPDU之后的是 TLV(Type/Length/Value)字段,PDU 包头与 TLV 字段构成了一个完整的 IS-1SPDU。TLV字段用来通告各种不同的路由选择信息,其中包括:LSP ID、LSP序列号、LSP校验和、区域关联状态等。当一台运行IS-1S路由器接入网络中后,它产生的第一个LSP的序列号为I。当网络环境发生变化时,路由器将重新生成LSP,并将LSP序列号加I。同样,当到达LSP的刷新间隔时,路由器将刷新此LSP并扩散到网络中,这时LSP序列号也同样加I。可以看出,LSP序列号主要用于使路由器能够识别一个LSP的新旧版本,不能用来抵抗重放攻击。Internet协议安全性(IPSec)是一种开放标准的框架结构,通过使用加密的安全服务以确保在Internet协议(IP)网络上进行保密而安全的通讯。反重播窗口确保每个IP包的唯一性,保证信息万一被截取复制后,不能再被重新利用、重新传输回目的地址。该特性可以防止攻击者截取破译信息后,再用相同的信息包冒取非法访问权。IS-1S使用人工配置密钥,并且,在报文传输过程中,密钥更新困难。IS-1S使用手工密钥配置,IPSec配置参数较多,对于IS-1S这种大型网络如果使用IPSec来增强IS-1S的安全性,IPSec配置困难,需要非常大的人力资源进行管理,所以对于手工配置的IS-1S不易使用IPSec中的抵抗重放窗口来预防重放攻击。并且,由于现有IPSec抗重放攻击滑动窗口是按照窗口最大值进行滑动,对于延迟的数据包有可能被误认为是重播数据包,进而会将有效的数据包丢弃。RFC3567、RFC5304、RFC5310 详细介绍了 IS-1S 使用 Hashed MessageAuthentication Code-Message Digest 5(HMAC-MD5)和Hashed Message AuthenticationCode-Secure Hash Algorithm(HMAC-SHA)密钥算法来增强IS-1S的安全性,但是使用这两种算法不能用来防止重放攻击。
发明内容
有鉴于此,本发明的主要目的在于提供一种报文处理方法及系统,能够有效抵挡重放攻击,增强系统安全性及可靠性。为达到上述目的,本发明的技术方案是这样实现的:一种报文处理方法,包括:接收侧收到来自发送侧的报文,所述报文至少携带鉴定序列号INum ;接收侧将所述报文的INum与滑动窗口的窗头值LNum和/或滑动窗口的窗尾值HNum进行比较,判断是否丢弃所述报文。该方法还包括:发送侧向接收侧发送报文,其中,发送侧发送的第一个报文的INum为手工配置或默认配置,之后,发送新报文时,INum增加I。所述接收侧将所述报文的INum与滑动窗口的窗头值LNum和/或滑动窗口的窗尾值HNum进行比较,判断是否丢弃所述报文为:INum > HNum,且INum与HNum的差值小于预先设置的阈值,则判定所述报文为有效报文;INum > HNum,且INum与HNum的差值不小于预先设置的阈值,则判定所述报文为无效报文,丢弃所述报文;INum < LNum,则判定所述报文是重播报文,丢弃所述报文;INum位于接收窗口内,则查找接收窗口内是否有相应的记录。所述INum > HNum,且INum与HNum的差值小于预先设置的阈值的情况下,该方法还包括:HNum位置有记录,则将HNum的值保存在滑动窗口内,并且将滑动窗口窗尾值HNum设置为INum。所述INum位于接收窗口内的情况下,该方法还包括:INum = LNum,则重新设置窗口的大小或者移动窗口 ;否则,遍历滑动窗口,如果窗口内有与INum相应的记录,则认为所述报文为重播报文,丢弃所述报文,如果窗口内没有与INum相应的记录,则将所述INum插入到窗口中相应位置。所述重新设置窗口的大小或者移动窗口为:INum = LNum,并且窗口中LNum+1的位置没有记录,重设窗头值或者移动窗口一个位置;重设窗头值的情况下,将LNum设置为LNum+1,并且给新的窗头值设置一个生存时间,超过所述生存时间,自动将窗头值置” I ” ;滑动窗口的情况下,将窗口向右滑动一个单位,此时窗头值LNum和窗尾值HNum都增加1,并且给新的窗头值设置一个生存时间,超过所述生存时间,自动将该窗头值置” I”;INum = LNum,并且窗头值后有连续的η记录不为空,重设窗头值或者移动窗口 η+1个位置;重设窗头值的情况下,将LNum设置为LNum+n+1,并且给新的窗头值设置一个生存时间,超过所述生存时间,自动将窗头值置” I ” ;滑动窗口的情况下,将窗口向右滑动η+1个单位,此时窗头值和窗尾值都增加n+1,,并且给新的窗头值设置一个生存时间,超过所述生存时间,则自动将窗头值置” I ”。该方法还包括:如果重新设置窗头值后,窗口大小不小于预先设定的最小窗口值,则只需要重新设置窗头值,不需要滑动窗口 ;如果重新设置窗头值后,窗口大小小于比预先设定的最小窗口值,则需要滑动窗口。所述接收侧接收到的报文还包括报文序列号,接收侧判定不需要丢弃所述报文后,该方法还包括:判断是否需要更新数据库,具体为:接收侧在数据库中搜索对应的记录,若记录不存在,则将其加入数据库中,并广播新数据库内容;若数据库中的报文序列号小于所述报文的报文序列号,就替换为新报文,并广播新数据库内容。一种报文处理系统,该系统包括报文接收模块、判断模块和执行模块;其中,所述报文接收模块,用于接收来自发送侧的报文,所述报文至少携带鉴定序列号INum ;所述判断模块,用于将所述报文的INum与滑动窗口的窗头值LNum和/或滑动窗口的窗尾值HNum进行比较,判断是否丢弃所述报文;所述执行模块,用于根据判断模块的判断结果执行相应的操作。所述判断模块将所述报文的INum与滑动窗口的窗头值LNum和/或滑动窗口的窗尾值HNum进行比较,判断是否丢弃所述报文为:INum > HNum,且INum与HNum的差值小于预先设置的阈值,则判定所述报文为有效报文;INum > HNum,且INum与HNum的差值不小于预先设置的阈值,则判定所述报文为无效报文,丢弃所述报文;INum < LNum,则判定所述报文是重播报文,丢弃所述报文;INum位于接收窗口内,则查找接收窗口内是否有相应的记录。所述执行模块,还用于在INum > HNum,且INum与HNum的差值小于预先设置的阈值、且HNum位置有记录的情况下,将HNum的值保存在滑动窗口内,并且将滑动窗口窗尾值HNum设置为INum。所述INum位于接收窗口内的情况下,所述执行模块,还用于在INum = LNum时,则重新设置窗口的大小或者移动窗口 ;否则,遍历滑动窗口,如果窗口内有与INum相应的记录,则认为所述报文为重播报文,丢弃所述报文,如果窗口内没有与INum相应的记录,则将所述INum插入到窗口中相应位置。所述执行模块重新设置窗口的大小或者移动窗口为:INum = LNum,并且窗口中LNum+1的位置没有记录,重设窗头值或者移动窗口一个位置;重设窗头值的情况下,将LNum设置为LNum+1,并且给新的窗头值设置一个生存时间,超过所述生存时间,自动将窗头值置” I ” ;滑动窗口的情况下,将窗口向右滑动一个单位,此时窗头值LNum和窗尾值HNum都增加1,并且给新的窗头值设置一个生存时间,超过所述生存时间,自动将该窗头值置” I”;INum = LNum,并且窗头值后有连续的η记录不为空,重设窗头值或者移动窗口 η+1个位置;重设窗头值的情况下,将LNum设置为LNum+n+1,并且给新的窗头值设置一个生存时间,超过所述生存时间,自动将窗头值置” I ”滑动窗口的情况下,将窗口向右滑动η+1个单位,此时窗头值和窗尾值都增加η+1,,并且给新的窗头值设置一个生存时间,超过所述生存时间,则自动将窗头值置” I ”。所述执行模块重新设置窗口的大小或者移动窗口为:如果重新设置窗头值后,窗口大小不小于预先设定的最小窗口值,则只需要重新设置窗头值,不需要滑动窗口 ;如果重新设置窗头值后,窗口大小小于比预先设定的最小窗口值,则需要滑动窗口。所述判断模块,还用于在判定不需要丢弃所述报文后,进一步判断是否需要更新数据库,具体为:在数据库中搜索对应的记录,若记录不存在,则将其加入数据库中,并广播新数据库内容;若数据库中的报文序列号小于所述报文的报文序列号,就替换为新报文,并广播新数据库内容。本发明报文处理方法及系统,接收侧收到来自发送侧的报文,所述报文至少携带鉴定序列号INum ;接收侧将所述报文的INum与滑动窗口的窗头值LNum和/或滑动窗口的窗尾值HNum进行比较,判断是否丢弃所述报文。通过本发明,滑动窗口依据窗头值(最小值)进行滑动,且滑动窗口的大小是不固定的,所以能够有效的抵抗重放攻击,并且对于延迟报文有很好的处理效果,增强系统安全性及可靠性。
图1为本发明报文处理方法流程示意图;图2为本发明实施例2的方法流程示意图;图3为本发明实施例3的方法流程示意图;图4为本发明实施例4的方法流程示意图;图5为本发明实施例5的一滑动窗口不意图;图6为本发明实施例5的另一滑动窗口示意图;图7为本发明实施例5的又一滑动窗口示意图;图8为本发明实施例5的又一滑动窗口示意图;图9为本发明实施例5的又一滑动窗口不意图;图10为本发明实施例5的又一滑动窗口不意图。
具体实施例方式本发明的基本思想是:接收侧收到来自发送侧的报文,所述报文至少携带鉴定序列号INum ;接收侧将所述报文的INum与滑动窗口的窗头值LNum和/或滑动窗口的窗尾值HNum进行比较,判断是否丢弃所述报文。图1为本发明报文处理方法流程示意图,如图1所示,该方法包括:步骤101:接收侧收到来自发送侧的报文,所述报文至少携带鉴定序列号INum。这里,发送侧发送的第一个报文的INum —般为手工配置或默认配置,之后,发送新报文时,INum增加I。
步骤102:接收侧将所述报文的INum与滑动窗口的窗头值LNum和/或滑动窗口的窗尾值HNum进行比较,判断是否丢弃所述报文。该步骤可以为:如果INum > HNum,并且INum与HNum的差值小于预先设置的阈值,则认为该报文为有效报文;如果INum与HNum的差值不小于预先设置的阈值,则认为该报文为无效报文,丢弃该报文;如果INum < LNum,则认为该报文是重播报文,丢弃该报文;如果INum位于接收窗口内,则查找接收窗口内是否有相应的记录。INum > HNum,且INum与HNum的差值小于预先设置的阈值的情况下,如果HNum位置有记录,则将HNum的值保存在滑动窗口内,并且将滑动窗口窗尾值即HNum设置为INum,此时不滑动窗口只是改变滑动窗口窗尾值的大小,窗头值不改变。INum位于接收窗口内的情况下,如果INum = LNum,则重新设置窗口的大小或者移动窗口 ;否则,遍历滑动窗口,如果窗口内有与INum相应的记录,则认为该报文为重播报文,丢弃该报文,如果窗口内没有与INum相应的记录,则将该INum插入到窗口中相应位置。重新设置窗口的大小或者移动窗口时,如果INum = LNum,并且窗口中LNum+1的位置没有记录,将重设窗头值或者移动窗口 一个位置;如果重设窗头值,则将LNum设置为LNum+1,并且给新的窗头值设置一个生存时间,如果超过这个时间,则自动将该窗头值置” I” ;如果滑动窗口,则将窗口向右滑动一个单位,此时窗头值LNum和窗尾值HNum都增加1,并且给新的窗头值设置一个生存时间,如果超过这个时间,则自动将该窗头值置” I”。如果INum = LNum,并且窗头值后有连续的η记录不为空,则将重设窗头值或者移动窗口 η+1个似直。如果重设窗头值,则将LNum设直为LNum+η+Ι,并且给新的窗头值设直一个生存时间,如果超过这个时间,则自动将该窗头值置” I ”;如果滑动窗口时,则将窗口向右滑动η+1个单位,此时窗头值和窗尾值都增加η+1,,并且给新的窗头值设置一个生存时间,如果超过这个时间,则自动将该窗头值置” I”。本发明中,需要重新设置窗头值还是需要滑动窗口,需要将现在窗口大小与预先设定的最小窗口值进行比较:如果重新设置窗头值后,此时的窗口大小不小于预先设定的最小窗口值,则只需要重新设直窗头值,不需要滑动窗口。如果重新设置窗头值后,此时的窗口大小小于比预先设定的最小窗口值,则需要滑动窗口,使得重新设置窗头值后,窗口大小为最小滑动窗口。步骤103:判定不需要丢弃所述报文,所述接收侧进一步判别是否需要更新数据库。需要说明的是,所述接收侧接收到的报文还包括报文序列号。这里,接收侧判断所述报文的报文序列号是否为最新报文:接收侧在数据库中搜索对应的记录,若记录不存在,则将其加入数据库中,并广播新数据库内容。若数据库中的报文序列号小于所述报文的报文序列号,就替换为新报文,并广播新数据库内容。若数据库中的报文序列号大于所述报文的报文序列号,就向入端接口发送一个包含本地数据库值的新报文。若数据库中的报文序列号等于所述报文的报文序列号,则不做任何事情。本发明还相应地提出了一种报文处理系统,包括报文接收模块、判断模块和执行模块;其中,所述报文接收模块,用于接收来自发送侧的报文,所述报文至少携带鉴定序列号INum ;所述判断模块,用于将所述报文的INum与滑动窗口的窗头值LNum和/或滑动窗口的窗尾值HNum进行比较,判断是否丢弃所述报文;所述执行模块,用于根据判断模块的判断结果执行相应的操作。所述判断模块将所述报文的INum与滑动窗口的窗头值LNum和/或滑动窗口的窗尾值HNum进行比较,判断是否丢弃所述报文为:INum > HNum,且INum与HNum的差值小于预先设置的阈值,则判定所述报文为有效报文;INum > HNum,且INum与HNum的差值不小于预先设置的阈值,则判定所述报文为无效报文,丢弃所述报文;INum < LNum,则判定所述报文是重播报文,丢弃所述报文;INum位于接收窗口内,则查找接收窗口内是否有相应的记录。所述执行模块,还用于在INum > HNum,且INum与HNum的差值小于预先设置的阈值、且HNum位置有记录的情况下,将HNum的值保存在滑动窗口内,并且将滑动窗口窗尾值HNum设置为INum。所述INum位于接收窗口内的情况下,所述执行模块,还用于在INum = LNum时,则重新设置窗口的大小或者移动窗口 ;否则,遍历滑动窗口,如果窗口内有与INum相应的记录,则认为所述报文为重播报文,丢弃所述报文,如果窗口内没有与INum相应的记录,则将所述INum插入到窗口中相应位置。所述执行模块重新设置窗口的大小或者移动窗口为:INum = LNum,并且窗口中LNum+1的位置没有记录,重设窗头值或者移动窗口一个位置;重设窗头值的情况下,将LNum设置为LNum+1,并且给新的窗头值设置一个生存时间,超过所述生存时间,自动将窗头值置” I ” ;滑动窗口的情况下,将窗口向右滑动一个单位,此时窗头值LNum和窗尾值HNum都增加1,并且给新的窗头值设置一个生存时间,超过所述生存时间,自动将该窗头值置” I”;INum = LNum,并且窗头值后有连续的η记录不为空,重设窗头值或者移动窗口 η+1个位置;重设窗头值的情况下,将LNum设置为LNum+n+1,并且给新的窗头值设置一个生存时间,超过所述生存时间,自动将窗头值置” I ”滑动窗口的情况下,将窗口向右滑动η+1个单位,此时窗头值和窗尾值都增加η+1,,并且给新的窗头值设置一个生存时间,超过所述生存时间,则自动将窗头值置” I ”。所述执彳了|旲块重新设直窗口的大小或者移动窗口为:如果重新设直窗头值后,窗口大小不小于预先设定的最小窗口值,则只需要重新设置窗头值,不需要滑动窗口 ;如果重新设置窗头值后,窗口大小小于比预先设定的最小窗口值,则需要滑动窗口。所述判断模块,还用于在判定不需要丢弃所述报文后,进一步判断是否需要更新数据库,具体为:在数据库中搜索对应的记录,若记录不存在,则将其加入数据库中,并广播新数据库内容;若数据库中的报文序列号小于所述报文的报文序列号,就替换为新报文,并广播新数据库内容。下面通过具体实施例对本发明的技术方案作进一步详细说明。实施例1以中间系统到中间系统(IS-1S)路由环境下实现抵抗重放攻击为例,本实施例可以通过扩展IS-1S报文中的TLV片段来实现抵抗重放攻击的功能,具体的,可以在TLV中添加鉴定序列号IdentifyNumber (INum),并设置滑动窗口窗头值LowNumber (LNum)和滑动窗口窗尾值HighNumber(HNum)来实现抵抗重放攻击,该滑动窗口的移动是依据窗口最小值移动,并且滑动窗口的大小不固定,本发明实施例对于报文出现延迟的情况也能很好的实现抗重放攻击的功能。本实施例包括以下步骤:1、广播网络中指定中间系统或者点到点网络中的发送端发送新报文时,INum增加1,当IS-1S系统建立后,发送的第一个报文INum为手工配置或默认配置,以后再发送报文,INum增加I。2、接收路由收到报文后,发送报文的INum与滑动窗口中的窗头值LNum、窗尾值HNum进行比较。3、接收路由收到报文后,发送报文的LSP Sequence Number与数据库中的LSPSequence Number 进行比较。在本实施例步骤I中,当IS-1S系统建立后,发送的第一个报文INum为管理员配置,并且接收路由LNum的值比INum的值要小,并且预先设置一个最小窗口大小,HNum的值为LNum与所述最小窗口大小值之和减I ;设置一个阈值,若果收到的INum与滑动窗口最大值的差值大于这个阈值,则认为该报文为无效报文。进一步地,在实施例步骤2包括以下步骤:(a’ )中间系统收到报文的INum与滑动窗口中的LNum、HNum进行比较,如果INum> HNum,并且INum与HNum的差值小于预先设置的阈值,则将认为该报文为有效报文;如果INum与HNum的差值不小于预先设置的阈值,则认为该报文为无效报文。(b’ )中间系统收到报文的INum与数据库中的LNum、HNum进行比较,如果INum< LNum,则认为该报文是重播报文,丢弃该报文。(c’ )中间系统收到报文的INum位于接收窗口内,则将查找接收窗口内是否有相应的记录。进一步地,在本发明中,在上述步骤(a’)中,若INum > HNum,如果HNum位置有记录,则将HNum的值保存在滑动窗口内,并且将滑动窗口窗尾值即HNum设置为INum,此时不滑动窗口只是改变滑动窗口窗尾值的大小,窗头值不改变。进一步地,在本实施例步骤(c’ )包括以下步骤:(a”)如果INum = LNum,则重新设置窗口的大小或者移动窗口。(b”)否则,遍历滑动窗口,如果窗口内有与INum相等的记录,则认为该报文为重播报文,丢弃该报文。(c”)否则,则将该IN.插入到窗口中相应位置。进一步地,本实施例步骤(a”)包括以下内容:(a”’)如果INum = LNum,并且窗口中LNum+1的位置没有记录,将重设窗头值或者移动窗口 个似直。如果重设窗头值,则将LNum设直为LNum+Ι,并且给新的窗头值设直一个生存时间,如果超过这个时间,则自动将该窗头值置” I”;如果滑动窗口时,则将窗口向右滑动一个单位,此时窗头值LNum和窗尾值都增加1,并且给新的窗头值设置一个生存时间,如果超过这个时间,则自动将该窗头值置” I”。(b”’ )如果INum = LNum,并且窗头值后有连续的η记录不为空,则将重设窗头值或者移动窗口 η+1个似直。如果重设窗头值,则将LNum设直为Lnum+n+Ι,并且给新的窗头值设置一个生存时间,如果超过这个时间,则自动将该窗头值置” I”;如果滑动窗口时,则将窗口向右滑动η+1个单位,此时窗头值和窗尾值都增加η+1,,并且给新的窗头值设置一个生存时间,如果超过这个时间,则自动将该窗头值置” I ”。进一步地,本实施例步骤3包括以下步骤:(a)中间系统接收到报文,在数据库中搜索对应的记录。若记录不存在,则将其加入数据库中,并广播新数据库内容。(b)若数据库中的 LSP Sequence Number 小于报文中的 LSP Sequence Number,就替换为新报文,并广播新数据库内容。(C)若数据库中的LSP Sequence Number比较大,就向入端接口发送一个包含本地数据库值的新报文。(d))若数据库中的 LSP Sequence Number 等于报文中的 LSP Sequence Number,则不做任何处理。本实施例的滑动窗口依据窗头值(最小值)的进行滑动,且滑动窗口的大小是不固定的,可以很好的解决报文在传输过程中遇到延迟的情况,并能有效的抵抗重放攻击。实施例2本实施例为在广播网络中,路由器使用CSNP来保证链路状态数据库的完整性,通过本发明方法抵抗重放攻击。图2为本发明实施例2的方法流程示意图,如图2所示,该流程包括以下步骤:步骤201:在广播网络中,指定中间系统周期性的发送全时序协议数据单元(CSNP),并且每次生成新的报文,其IdentifyNumber(INum)增加I ;如果是新的系统建立,则生成的第一个CSNP报文的INum为人工配置,接收路由LNum的值比INum的值要小,并且预先设置一个最小窗口大小,HNum的值为LNum与窗口大小值之和减1,并且预先设置一个阈值为T。步骤202:在广播网络中,CSNP报文泛洪到每个路由器。步骤203:判别本地中间系统使用HMAC-MD5安全机制生成密钥与报文所携带的密钥是否匹配,如果匹配,执行步骤205 ;否则,执行步骤204。步骤204:密钥不匹配,认为该报文为无效报文,丢弃该报文。步骤205:比较全时序数据单元的INum是否小于本地滑动窗口的窗头值LNum,如果是,执行步骤206 ;否则,执行步骤207。
步骤206:全时序数据单元的INum小于接收窗口的窗头值LNum,则认为该报文为重播报文,丢弃该报文。步骤207:比较报文CSNP的INum是否大于滑动窗口最大值HNum,如果是,执行步骤208 ;否则,执行步骤209。步骤208:如果报文CSNP的INum大于HNum,并且Inum与HNum的差值小于预先设置的阈值T,则将认为该报文为有效报文;如果HNum在滑动窗口中有记录,则将HNum的值保存在窗口中,并且将滑动窗口窗尾值即HNum设置为INum,此时不滑动窗口只是改变滑动窗口窗尾值的大小,窗头值不改变。如果Inum与HNum的差值不小于预先设置的阈值T,则认为该报文为无效报文。步骤209:报文CSNP的INum值在滑动窗口内,则查找滑动窗口内是否保存有与INum值相等的记录,如果是,执行步骤210 ;否则,执行步骤211。步骤210:滑动窗口中存储有记录与INum值相等,则认为该全时序数据单元为重播报文,丢弃该报文。步骤211:滑动窗口内中没有相应的记录,将INum值插入到滑动窗口的相应位置,并且,如果INum = LNum,则重新设置窗口的最小值或者移动窗口。具体步骤如下:(a)如果INum = LNum,并且窗口中LNum+Ι的位置没有记录,将重设窗头值或者移动窗口 个位直;如果重设窗头值,则将LNum设直为LNum+1,并且给新的窗头值设直Iv生存时间,如果超过这个时间,则自动将该窗头值置” I”;如果滑动窗口时,则将窗口向右滑动一个单位,此时窗头值LNum和窗尾值都增加1,并且给新的窗头值设置一个生存时间,如果超过这个时间,则自动将该窗头值置” I”。(b)如果INum = LNum,并且窗头值后有连续的η记录不为空,则将重设窗头值或者移动窗口 η+1个似直;如果重设窗头值,则将LNum设直为LNum+η+Ι,并且给新的窗头值设置一个生存时间,如果超过这个时间,则自动将该窗头值置” I”;如果滑动窗口时,则将窗口向右滑动η+1个单位,此时窗头值和窗尾值都增加η+1,,并且给新的窗头值设置一个生存时间,如果超过这个时间,则自动将该窗头值置” I ”。步骤212:将收到的CSNP报文序列号(Sequence Number)与已有的序列号进行比较:(a)中间系统接收到报文,在数据库中搜索对应的记录。若记录不存在,则将其加入数据库中,并广播新数据库内容。(b)若数据库中的 LSP Sequence Number 小于报文中的 LSP Sequence Number,就替换为新报文,并广播新数据库内容。(C)若数据库中的LSP Sequence Number比较大,就向入端接口发送一个包含本地数据库值的新报文。(d))若数据库中的 LSP Sequence Number 等于报文中的 LSP Sequence Number,则不做任何处理。步骤213:使用CSNP中的LSP摘要信息与本地的链路状态数据库中的LSP进行比较,如果发现本地链路状态数据库中的信息不完整或者没有同步,则本地路由器使用PSNP向指定中间系统请求缺少的LSP条目。这个PSNP报文包含请求的LSP条目的摘要信息。
步骤214:当指定路由器DIS收到其他路由器发送的PSNP报文后,发送一个完整的LSP报文,这个LSP报文就是其他路由器所缺少的LSP条目。实施例3本实施例为在点到点网络中(P2P)中,路由器不会周期性的发送CSNP报文,CSNP报文只在链路激活时发送一次,而且链路两端的路由器都会发送CSNP报文以描述本地链路状态数据库中所有LSP的摘要信息。在CSNP传输过程中通过本发明方法抵抗重放攻击。图3为本发明实施例3的方法流程示意图,如图3所示,该流程包括以下步骤:步骤301:在P2P网络中,链路发送端发送一次全时序协议数据单元(CSNP),并且链路端每次发送新的报文,其IdentifyNumber(INum)增加I ;如果是新的系统建立,则生成的第一个CSNP报文的INum为人工配置;并且接收路由LNum的值比INum的值要小,并且预先设置一个最小窗口大小,HNum的值为LNum与窗口大小值之和减I ;并且预先设置一个阈值T。步骤302:在点到点的网络中,CSNP报文从链路一端传送到另一端。步骤303:判别本地中间系统使用HMAC-MD5安全机制生成密钥与报文所携带的密钥是否匹配,如果是,执行步骤305 ;否则,执行步骤304。步骤304:密钥不匹配,则认为该报文为无效报文,丢弃该报文。步骤305:比较全时序数据单元的INum是否小于本地滑动窗口的窗头值LNum,如果是,执行步骤306 ;否则,执行步骤307。步骤306:全时序数据单元的INum小于接收窗口的窗头值LNum,则认为该报文为重播报文,丢弃该报文。步骤307:比较报文CSNP的INum是否大于本地数据库存储的HNum,如果是,执行步骤308 ;否则,执行步骤309。步骤308:如果报文CSNP的INum大于HNum,并且Inum与HNum的差值小于预先设置的阈值T,则将认为该报文为有效报文;如果HNum在滑动窗口中有记录,则将HNum的值保存在窗口中,并且将滑动窗口窗尾值即HNum设置为INum,此时不滑动窗口只是改变滑动窗口窗尾值的大小,窗头值不改变。如果Inum与HNum的差值不小于预先设置的阈值T,则认为该报文为无效报文。步骤309:如果报文CSNP的INum值在滑动窗口内,则查找滑动窗口内是否保存有与INum值相等的记录,如果是,执行步骤310 ;否则,执行步骤311。步骤310:滑动窗口中存储有记录与INum值相等,则认为该全时序数据单元为重播报文,丢弃该报文。步骤311:滑动窗口内中没有相应的记录,将INum值插入到滑动窗口的相应位置,进一步的,如果INum = LNum,则重新设置窗口的最小值或者移动窗口,具体步骤如下:(a)如果INum = LNum,并且窗口中LNum+Ι的位置没有记录,将重设窗头值或者移动窗口 个位直;如果重设窗头值,则将LNum设直为LNum+1,并且给新的窗头值设直Iv生存时间,如果超过这个时间,则自动将该窗头值置” I”;如果滑动窗口时,则将窗口向右滑动一个单位,此时窗头值LNum和窗尾值都增加1,并且给新的窗头值设置一个生存时间,如果超过这个时间,则自动将该窗头值置” I”。(b)如果INum = LNum,并且窗头值后有连续的η记录不为空,则将重设窗头值或者移动窗口 η+1个似直;如果重设窗头值,则将LNum设直为LNum+η+Ι,并且给新的窗头值设置一个生存时间,如果超过这个时间,则自动将该窗头值置” I”;如果滑动窗口时,则将窗口向右滑动η+1个单位,此时窗头值和窗尾值都增加η+1,,并且给新的窗头值设置一个生存时间,如果超过这个时间,则自动将该窗头值置” I ”。步骤312:将收到的CSNP报文序列号(Sequence Number)与已有的序列号进行比较:(a)如果收到的LSP比已有的序列号更大,则将这个新的LSP存入自己的LSDB中,再通过一个PSNP报文来确认收到此LSP,最后将这个新LSP再接着发到所有其他邻居。(b)如果收到的LSP和已有的具有相同的序列号,则直接通过一个PSNP报文确认收到此LSP。(c)如果收到的LSP比已有的序列号更小,则通过一个PSNP报文确认此LSP,再发送给对方我们版本的LSP,然后等待对方给我一个PSNP报文作为回答。步骤313:使用CSNP中的LSP摘要信息与本地的链路状态数据库中的LSP进行比较,如果发现本地链路状态数据库中的信息不完整或者没有同步,则本地路由器使用PSNP向链路发送端请求缺少的LSP条目。这个PSNP报文包含就是请求的LSP条目的摘要信息。步骤314:当发送端路由器收到对端路由器发送的PSNP报文后,将会发送一个完整的LSP报文,这个LSP报文就是对端路由器所缺少的LSP条目。步骤315:接收端收到LSP报文后,发送确认报文PSNP给发送端,通知对端已收到完整的报文。实施例4本实施例为广播网络中指定中间系统或者点到点网络中的发送端接收到请求消息PSNP后,指定中间系统或链路发送端发送LSP的过程,在LSP传输过程中使用本发明方法抵抗重放攻击。图4为本发明实施例4的流程示意图,如图4所示,该流程包括以下步骤:步骤401:广播网络中指定中间系统或者点到点网络中的发送端接收到请求消息PSNP后,指定中间系统或链路发送端发送LSP,其IdentifyNumber(INum)增加I ;步骤402:在广播网络中,LSP报文泛洪到每个路由器;在点到点的网络中,LSP报文从链路一端传送到另一端。步骤403:判别本地中间系统使用HMAC-MD5安全机制生成密钥与报文所携带的密钥是否匹配,如果匹配,执行步骤405 ;否则,执行步骤404。步骤404:密钥不匹配,则认为该报文为无效报文,丢弃该报文。步骤405:比较全时序数据单元的INum是否小于本地滑动窗口的窗头值LNum,如果是,执行步骤406 ;否则,执行步骤407。步骤406:全时序数据单元的INum小于接收窗口的窗头值LNum,则认为该报文为重播报文,丢弃该报文。步骤407:比较报文CSNP的INum是否大于本地数据库存储的HNum,如果是,执行步骤408 ;否则,执行步骤409。步骤408:如果报文CSNP的INum大于HNum,并且Inum与HNum的差值小于预先设置的阈值T,则将认为该报文为有效报文;如果HNum在滑动窗口中有记录,则将HNum的值保存在窗口中,并且将滑动窗口窗尾值即HNum设置为INum,此时不滑动窗口只是改变滑动窗口窗尾值的大小,窗头值不改变。如果Inum与HNum的差值不小于预先设置的阈值T,则认为该报文为无效报文。步骤409:报文CSNP的INum值滑动窗口内,则查找滑动窗口内是否保存有与INum值相等的记录,如果是,执行步骤410 ;否则,执行步骤411。步骤410:滑动窗口中存储有记录与INum值相等,则认为该全时序数据单元为重播报文,丢弃该报文。步骤411:滑动窗口内中没有相应的记录,将INum值插入到滑动窗口的相应位置,如果INum = LNum,则重新设置窗口的最小值或者移动窗口,具体步骤如下:(a)如果INum = LNum,并且窗口中LNum+Ι的位置没有记录,将重设窗头值或者移动窗口 个位直;如果重设窗头值,则将LNum设直为LNum+1,并且给新的窗头值设直Iv生存时间,如果超过这个时间,则自动将该窗头值置” I ”;如果滑动窗口时,则将窗口向右滑动一个单位,此时窗头值LNum和窗尾值都增加1,并且给新的窗头值设置一个生存时间,如果超过这个时间,则自动将该窗头值置” I”。(b)如果INum = LNum,并且窗头值后有连续的η记录不为空,则将重设窗头值或者移动窗口 η+1个似直;如果重设窗头值,则将LNum设直为LNum+η+Ι,并且给新的窗头值设置一个生存时间,如果超过这个时间,则自动将该窗头值置” I”;如果滑动窗口时,则将窗口向右滑动η+1个单位,此时窗头值和窗尾值都增加η+1,,并且给新的窗头值设置一个生存时间,如果超过这个时间,则自动将该窗头值置” I ”。步骤412:将收到的CSNP报文序列号(Sequence Number)与已有的序列号进行比较。步骤413:接收端路由器将收到的LSP条目储存在本地数据库中。实施例5本实施例具体说明滑动窗口更新过程,具体步骤如下:步骤1:假设此时滑动窗口的窗头值(最小值)值为31,最右端(最大值)为70,预先设定最小窗口大小为40,如图5所示。步骤2:当接收到一个INum值为31的报文后,由于INum = LNum,所以此时LNum的值也即滑动窗口最小值都更改为32,并且为窗头值设置一个生存时间,如图6所示。步骤3:当接收到一个INum值为72的报文后,由于INum > HNum,所以此时HNum的值更改为72。滑动窗口内存储内容如图7所示。步骤4:当接收到一个INum值为33的报文后,由于滑动窗口中没有相应的记录,则将该值插入滑动窗口的相应位置,如图8所示。当窗头值超过生存时间后,滑动窗口的存储情况如图9所示步骤5:如果重新设置窗头值后,此时的窗口大小小于比预先设定的最小窗口值,则需要滑动窗口,使得重新设置窗头值后,窗口大小为最小滑动窗口,如图10所示。以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
权利要求
1.一种报文处理方法,其特征在于,该方法包括: 接收侧收到来自发送侧的报文,所述报文至少携带鉴定序列号INum ; 接收侧将所述报文的INum与滑动窗口的窗头值LNum和/或滑动窗口的窗尾值HNum进行比较,判断是否丢弃所述报文。
2.根据权利要求1所述的方法,其特征在于,该方法还包括:发送侧向接收侧发送报文,其中,发送侧发送的第一个报文的INum为手工配置或默认配置,之后,发送新报文时,INum增加I。
3.根据权利要求1所述的方法,其特征在于,所述接收侧将所述报文的INum与滑动窗口的窗头值LNum和/或滑动窗口的窗尾值HNum进行比较,判断是否丢弃所述报文为: INum > HNum,且INum与HNum的差值小于预先设置的阈值,则判定所述报文为有效报文; INum > HNum,且INum与HNum的差值不小于预先设置的阈值,则判定所述报文为无效报文,丢弃所述报文; INum < LNum,则判定所述报文是重播报文,丢弃所述报文; INum位于接收窗口内,则查找接收窗口内是否有相应的记录。
4.根据权利要求3所述的方法,其特征在于,所述INum> HNum,且INum与HNum的差值小于预先设置的阈值的情况下,该方法还包括: HNum位置有记录,则将HNum的值保存在滑动窗口内,并且将滑动窗口窗尾值HNum设置为 INum。
5.根据权利要求3所述的方法,其特征在于,所述INum位于接收窗口内的情况下,该方法还包括: INum = LNum,则重新设置窗口的大小或者移动窗口 ;否则,遍历滑动窗口,如果窗口内有与INum相应的记录,则认为所述报文为重播报文,丢弃所述报文,如果窗口内没有与INum相应的记录,则将所述INum插入到窗口中相应位置。
6.根据权利要求5所述的方法,其特征在于,所述重新设置窗口的大小或者移动窗口为: INum = LNum,并且窗口中LNum+1的位置没有记录,重设窗头值或者移动窗口一个位置;重设窗头值的情况下,将LNum设置为LNum+1,并且给新的窗头值设置一个生存时间,超过所述生存时间,自动将窗头值置” I ” ;滑动窗口的情况下,将窗口向右滑动一个单位,此时窗头值LNum和窗尾值HNum都增加1,并且给新的窗头值设置一个生存时间,超过所述生存时间,自动将该窗头值置” I”; INum = LNum,并且窗头值后有连续的η记录不为空,重设窗头值或者移动窗口 η+1个位置;重设窗头值的情况下,将LNum设置为LNum+n+1,并且给新的窗头值设置一个生存时间,超过所述生存时间,自动将窗头值置” I ” ;滑动窗口的情况下,将窗口向右滑动η+1个单位,此时窗头值和窗尾值都增加η+1,,并且给新的窗头值设置一个生存时间,超过所述生存时间,则自动将窗头值置” I”。
7.根据权利要求5或6所述的方法,其特征在于,该方法还包括:如果重新设置窗头值后,窗口大小不小于预先设定的最小窗口值,则只需要重新设置窗头值,不需要滑动窗口 ;如果重新设直窗头值后,窗口大小小于比预先设定的最小窗口值,则需要滑动窗口。
8.根据权利要求1所述的方法,其特征在于,所述接收侧接收到的报文还包括报文序列号,接收侧判定不需要丢弃所述报文后,该方法还包括:判断是否需要更新数据库,具体为: 接收侧在数据库中搜索对应的记录,若记录不存在,则将其加入数据库中,并广播新数据库内容; 若数据库中的报文序列号小于所述报文的报文序列号,就替换为新报文,并广播新数据库内容。
9.一种报文处理系统,其特征在于,该系统包括报文接收模块、判断模块和执行模块;其中, 所述报文接收模块,用于接收来自发送侧的报文,所述报文至少携带鉴定序列号INum ; 所述判断模块,用于将所述报文的INum与滑动窗口的窗头值LNum和/或滑动窗口的窗尾值HNum进行比较,判断是否丢弃所述报文; 所述执行模块,用于根据判断模块的判断结果执行相应的操作。
10.根据权利要求9所述的系统,其特征在于,所述判断模块将所述报文的INum与滑动窗口的窗头值LNum和/或滑动窗口的窗尾值HNum进行比较,判断是否丢弃所述报文为: INum > HNum,且INum与HNum的差值小于预先设置的阈值,则判定所述报文为有效报文; INum > HNum,且INum与HNum的差值不小于预先设置的阈值,则判定所述报文为无效报文,丢弃所述报文; INum < LNum,则判定所述报文是重播报文,丢弃所述报文; INum位于接收窗口内,则查找接收窗口内是否有相应的记录。
11.根据权利要求10所述的系统,其特征在于, 所述执行模块,还用于在INum > HNum,且INum与HNum的差值小于预先设置的阈值、且HNum位置有记录的情况下,将HNum的值保存在滑动窗口内,并且将滑动窗口窗尾值HNum设置为INum。
12.根据权利要求10所述的系统,其特征在于,所述INum位于接收窗口内的情况下, 所述执行模块,还用于在INum = LNum时,则重新设置窗口的大小或者移动窗口 ;否则,遍历滑动窗口,如果窗口内有与INum相应的记录,则认为所述报文为重播报文,丢弃所述报文,如果窗口内没有与INum相应的记录,则将所述INum插入到窗口中相应位置。
13.根据权利要求12所述的系统,其特征在于,所述执行模块重新设置窗口的大小或者移动窗口为: INum = LNum,并且窗口中LNum+1的位置没有记录,重设窗头值或者移动窗口一个位置;重设窗头值的情况下,将LNum设置为LNum+1,并且给新的窗头值设置一个生存时间,超过所述生存时间,自动将窗头值置” I ” ;滑动窗口的情况下,将窗口向右滑动一个单位,此时窗头值LNum和窗尾值HNum都增加1,并且给新的窗头值设置一个生存时间,超过所述生存时间,自动将该窗头值置” I”; INum = LNum,并且窗头值后有连续的η记录不为空,重设窗头值或者移动窗口 η+1个位置;重设窗头值的情况下,将LNum设置为LNum+n+1,并且给新的窗头值设置一个生存时间,超过所述生存时间,自动将窗头值置” I”滑动窗口的情况下,将窗口向右滑动η+1个单位,此时窗头值和窗尾值都增加η+1,,并且给新的窗头值设置一个生存时间,超过所述生存时间,则自动将窗头值置” I”。
14.根据权利要求13所述的系统,其特征在于,所述执行模块重新设置窗口的大小或者移动窗口为:如果重新设置窗头值后,窗口大小不小于预先设定的最小窗口值,则只需要重新设置窗头值,不需要滑动窗口 ;如果重新设置窗头值后,窗口大小小于比预先设定的最小窗口值,则需要滑动窗口。
15.根据权利要求9所述的系统,其特征在于, 所述判断模块,还用于在判定不需要丢弃所述报文后,进一步判断是否需要更新数据库,具体为: 在数据库中搜索对应的记 录,若记录不存在,则将其加入数据库中,并广播新数据库内容; 若数据库中的报文序列号小于所述报文的报文序列号,就替换为新报文,并广播新数据库内容。
全文摘要
本发明公开了一种报文处理方法,包括接收侧收到来自发送侧的报文,所述报文至少携带鉴定序列号INum;接收侧将所述报文的INum与滑动窗口的窗头值LNum和/或滑动窗口的窗尾值HNum进行比较,判断是否丢弃所述报文。本发明还相应地公开了一种报文处理系统。通过本发明,滑动窗口依据窗头值(最小值)进行滑动,且滑动窗口的大小是不固定的,所以能够有效的抵抗重放攻击,对于延迟报文有很好的处理效果,增强系统安全性及可靠性。
文档编号H04L29/06GK103095563SQ201110339389
公开日2013年5月8日 申请日期2011年11月1日 优先权日2011年11月1日
发明者苗忠明, 梁小萍, 韦银星 申请人:中兴通讯股份有限公司