对等会话起始协议网络的安全路由方法、网络系统及设备\n技术领域\n[0001] 本发明涉及一种安全路由技术,特别涉及一种对等会话起始协议网络的安全路由方法、网络系统及设备。\n背景技术\n[0002] 对等网(P2P,Peer-to-Peer)技术是目前国际计算机网络技术领域研究的一个热点,并越来越受到人们的认可,它提供了一种新的共享资源的方法。在P2P网络环境中,成千上万台彼此连接的计算机都处于对等的地位,每台主机既是资源请求者,如客户机(Client),又是资源提供者,对其它计算机的请求做出响应,自愿提供资源与服务,如服务器(Server),因此称之为对等节点(Peer)。\n[0003] P2P会话起始协议(SIP,Session Information Protocol)是一套与SIP相关的协议,使用P2P技术解析SIP请求的目标资源,提供SIP消息传输,并提供其它SIP相关的服务。P2P SIP技术可以用于支撑许多应用,并可能成为许多网络系统的核心协议,如P2P VOIP,因此P2P SIP有可能成为未来的电信核心网中的一个关键协议。\n[0004] P2P SIP采用结构化的P2P网络,结构化P2P网络相比于非结构化P2P网络具有扩展性高和查询速度快等优势,它允许应用程序以较小的跳数定位对象,同时每个节点的路由表仅需要很少的条目。\n[0005] 由于结构化P2P系统的对象分布和路由算法与节点的ID密切相关,并且每个节点负责系统路由表的一部分,每个节点参与路由转发,在P2P SIP中,攻击者可以基于此对网络发起攻击。\n[0006] 为了防止网络攻击,实现安全路由,需要设计在P2P SIP网络中进行的安全路由方案。然而目前还没有任何在P2P SIP网络中进行的安全路由技术。\n发明内容\n[0007] 本发明的实施例提供一种P2P SIP网络安全路由的方法及网络设备,实现安全路由。\n[0008] 为了达到上述目的,本发明实施例的技术方案是这样实现的:\n[0009] 一种对等会话起始协议P2PSIP网络的安全路由方法包括:\n[0010] 接收来自被认证节点的会话起始协议SIP消息、消息认证数据及信任状;\n[0011] 从所述SIP消息中获取所述被认证节点的身份标识;\n[0012] 根据接收到的SIP消息、消息认证数据或信任状确定被认证节点的第二身份标识;\n[0013] 判断所述被认证节点的身份标识与所述第二身份标识是否相同;\n[0014] 根据信任状验证消息认证数据;\n[0015] 当所述被认证节点身份标识与所述第二身份标识相同,且信任状验证消息认证数据通过时,判定所述被认证节点验证通过;\n[0016] 所述消息认证数据为消息签名,所述信任状为证书,所述根据接收到的SIP消息、消息认证数据或信任状确定第二身份标识包括:从所述SIP消息中获取被认证节点的IP地址和端口号;根据所述被认证节点的IP地址和端口号,确定第二身份标识;\n[0017] 或者,所述消息认证数据为消息签名,所述信任状为证书,所述根据接收到的SIP消息、消息认证数据或信任状确定第二身份标识包括:根据所述第二身份标识的信任状证书中的随机数确定所述第二身份标识,或者根据经证书机构验证、且属于证书申请者的区分名字DN确定所述第二身份标识;\n[0018] 或者,所述消息认证数据为消息认证码,所述信任状为票据,所述根据接收到的SIP消息、消息认证数据或信任状确定第二身份标识包括:从票据中获取第二身份标识。\n[0019] 一种网络设备,包括:第一接收模块、计算模块、对比模块、认证模块和节点认证判断模块,其中:\n[0020] 第一接收模块,用于接收来自被认证节点的SIP消息、消息认证数据及信任状;\n[0021] 计算模块,用于根据接收到的SIP消息、消息认证数据或信任状确定所述被认证节点的第二身份标识;\n[0022] 所述消息认证数据为消息签名,所述信任状为证书,计算模块根据接收到的SIP消息、消息认证数据或信任状确定第二身份标识包括:从所述SIP消息中获取被认证节点的IP地址和端口号;根据所述被认证节点的IP地址和端口号,确定第二身份标识;\n[0023] 或者,所述消息认证数据为消息签名,所述信任状为证书,计算模块根据接收到的SIP消息、消息认证数据或信任状确定第二身份标识包括:根据所述第二身份标识的信任状证书中的随机数确定所述第二身份标识,或者根据经证书机构验证、且属于证书申请者的区分名字DN确定所述第二身份标识;\n[0024] 或者,所述消息认证数据为消息认证码,所述信任状为票据,计算模块根据接收到的SIP消息、消息认证数据或信任状确定第二身份标识包括:从票据中获取第二身份标识;\n[0025] 对比模块,用于将计算模块确定的第二身份标识与从SIP消息中获取的所述被认证节点的身份标识进行比较,将对比结果提供给节点认证判断模块;\n[0026] 认证模块,用于根据信任状验证消息认证数据,将认证结果提供给节点认证判断模块;\n[0027] 节点认证判断模块,用于在对比模块得到的对比结果为相同,且认证模块认证通过时,判定节点验证通过。\n[0028] 一种网络系统包括:至少一个节点以及网络设备;\n[0029] 所述节点,用于向所述网络设备发送会话起始协议SIP消息、消息认证数据及信任状;\n[0030] 所述网络设备包括第一接收模块、计算模块、对比模块、认证模块和节点认证判断模块;所述第一接收模块用于接收来自被认证节点的SIP消息、消息认证数据及信任状;所述计算模块用于根据接收到的SIP消息、消息认证数据或信任状确定所述被认证节点的第二身份标识;所述对比模块用于将计算模块确定的第二身份标识与从SIP消息中获取的所述被认证节点的身份标识进行比较,将对比结果提供给节点认证判断模块;所述认证模块用于根据信任状验证消息认证数据,将认证结果提供给节点认证判断模块;所述节点认证判断模块,用于在对比模块得到的对比结果为相同,且认证模块认证通过时,判定节点验证通过;\n[0031] 所述消息认证数据为消息签名,所述信任状为证书,计算模块根据接收到的SIP消息、消息认证数据或信任状确定第二身份标识包括:从所述SIP消息中获取被认证节点的IP地址和端口号;根据所述被认证节点的IP地址和端口号,确定第二身份标识;\n[0032] 或者,所述消息认证数据为消息签名,所述信任状为证书,计算模块根据接收到的SIP消息、消息认证数据或信任状确定第二身份标识包括:根据所述第二身份标识的信任状证书中的随机数确定所述第二身份标识,或者根据经证书机构验证、且属于证书申请者的区分名字DN确定所述第二身份标识;\n[0033] 或者,所述消息认证数据为消息认证码,所述信任状为票据,计算模块根据接收到的SIP消息、消息认证数据或信任状确定第二身份标识包括:从票据中获取第二身份标识。\n[0034] 利用本发明实施例提供的P2P SIP网络安全路由的方法、系统及网络设备,通过对被认证节点的ID进行验证并利用信任状验证消息认证数据,可以抵御选择ID攻击,从而实现安全路由。\n附图说明\n[0035] 图1为结构化P2P网络Chord环结构示意图。\n[0036] 图2为结构化P2P网络Chord路由示意图。\n[0037] 图3为P2P SIP网络的典型结构示意图。\n[0038] 图4为节点加入P2P SIP网络的流程图。\n[0039] 图5为本发明实施例一的安全节点ID认证的流程图。\n[0040] 图6为本发明实施例二的安全节点ID认证的流程图。\n[0041] 图7为本发明实施例三的安全节点ID认证的流程图。\n[0042] 图8为本发明实施例四的安全路由表维护的流程图。\n[0043] 图9为本发明实施例五的安全路由表维护的流程图。\n[0044] 图10为本发明实施例六的安全消息转发逐跳故障检测的流程图。\n[0045] 图11为本发明实施例六的积极故障恢复的流程图。\n[0046] 图12为本发明实施例六的积极故障恢复示意图。\n[0047] 图13为本发明实施例七中的网络设备。\n具体实施方式\n[0048] 为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明作进一步的详细描述。\n[0049] 图1为结构化P2P网络Chord环结构示意图,如图1所示,在结构化P2P中,对象的分布和路由主要由节点的身份标识(ID,identification)和对象的键值(key)来决定,键值和ID共享一个ID空间。以Chord环为例,该环中的每个节点都有一个唯一的ID,通常通过对其IP地址进行哈希得到,即ID=Hash(IP),其中Hash为哈希函数,对象的键值通常通过对对象的名字进行哈希得到。Hash通常采用MD5或SHA1等安全哈希函数。对象O根据其键值,由拥有某个ID的节点P保存和控制,此ID为系统中存在的最小的大于等于此键值的ID,此时称节点P为对象O的根。例如图1中,对象K10由节点N14保存,N14是对象K10的根;同理,K24、K30由节点N32保存。\n[0050] 如果一个对等网络中有n个节点,那么任意两个节点之间的通信可以在O(log n)的时间内完成。每个节点通过维护一张含有 条目的系统路由表,便可以完成路由工i-1\n作。这 个条目中的第i条记录了从当前节点的ID加上2 后,系统中存在的最小的大于等于该值的ID。在具体的路由过程中,当节点p想要和节点q进行通讯时,节点p会在自己的路由表中查找出比q小的最大标识号r,并将请求转发给节点r。节点r收到请求以后会进行和p一样的操作,直至请求顺利抵达q。例如图2为结构化P2P网络Chord路由示意图,图2a示意了节点N8的路由表,图2b示意了从N8开始查找对象k54的过程。\n[0051] 图3为P2P SIP网络的典型结构示意图,如图3所示,P2P SIP网络主要包括节点和客户机,节点构成结构化P2P网络,客户机使用P2P网络的服务。节点通常运行在用户的机器上,可以在NAT之后。图3所示的节点可以与不同的SIP实体耦合,如提供SIP用户终端(UE,User Endpoint)功能的用户代理(UA,User Agent)节点D、提供代理(Proxy)功能的代理节点E、提供与PSTN网络互通功能的PSTN网关节点G、提供重定向(Redirect)功能的重定向节点R以及提供与别的SIP网络互通功能的代理节点P。节点除了可提供SIP地址解析服务,一部分或全部节点还可提供其它服务,例如网络地址转换(NAT,Network Address Translation)会话穿越工具(STUN,Session Traversal Utilities for NAT)节点F,可提供STUN功能,中继(Relay)节点Q可提供中继功能,语音邮箱(VM,Voice Mail)节点S可提供VM服务,其它如现场(Presence)业务/会议(Conference)业务同样可以叠加进来。\n认证服务器M和计费服务器N,用于提供认证和记帐服务,它们与系统的安全性及可运营性相关,这两个功能由集中的服务器来提供。\n[0052] 由此可见,结构化P2P系统的对象分布和路由算法与节点的ID密切相关,并且每个节点负责系统路由表的一部分,每个节点参与路由转发,在P2P SIP中,攻击者可以基于此对网络发起攻击。下面以节点加入P2P SIP网络的流程为例说明此类攻击。\n[0053] 图4为节点加入P2P SIP网络的流程图,如图4所示,节点加入P2P SIP网络的流程如下,这里假设需要加入P2P SIP的节点为节点E,而节点D、节点G为已经存在于P2P SIP网络中的节点。\n[0054] 步骤401:节点E向节点G发送注册(REG,register)请求;如果该注册请求不由节点G负责,则\n[0055] 步骤402:节点G向节点E返回302 Moved Temporarily应答,表明节点E的注册请求不由节点G负责,节点G通过查找其路由表得到的地址放在应答的Contact头域中;\n[0056] 步骤403:节点E向Contact头域中的地址-节点D发送REG请求;\n[0057] 步骤404:节点D向节点E返回200OK应答,表明节点E的注册请求由节点D负责;\n[0058] 步骤405:节点D再向节点E发送REG请求,将节点D原先负责的一些资源,转给节点E负责,此消息中还包括节点D的一部分路由表信息;\n[0059] 步骤406:节点E向节点D返回200OK应答,表明节点E已成功保存这些资源,并根据节点D发过来的路由表信息,构造自己的路由表,至此节点E完成加入P2P SIP网络过程。\n[0060] 本申请的发明人发现,在此过程中可以发起如下与路由相关的攻击:\n[0061] 选择ID攻击:节点E通过选择自己的节点ID加入系统,从而获得某些用户注册信息的存贮与管理权,使这些用户不能正常使用网络,例如不能正确的被叫。\n[0062] 路由更新攻击:节点D将错误的路由信息提供给节点E,使节点E不能正确路由,又包括三种类型:\n[0063] a)路由表条目有错误,条目节点不存在;\n[0064] b)路由表条目有错误,条目节点是恶意的;\n[0065] c)路由表条目不合法,条目节点不在约束范围内。\n[0066] 转发攻击:节点G或节点D进行恶意的消息转发,使节点E不能正确的加入对等网。\n[0067] 为此每个节点在收到其它节点的P2P SIP消息时,都要对发送消息节点的ID进行认证,以保证每个加入到对等网中的节点ID是合法的,即需要进行安全节点ID认证,这里的节点ID不是由节点自行选定的,而是由系统分配给消息发送者的。安全节点ID认证主要有两个步骤,即一是验证ID的正确性,二是验证消息认证数据的正确性,可通过信任状来验证消息认证数据的正确性。\n[0068] 根据系统中是否有证书机构(CA,Certificate Authority)或集中式票据服务器,亦可称为认证服务器,安全节点ID认证过程也有不同。\n[0069] 当系统存在CA时,每个节点拥有公私钥对,并拥有CA签发的公钥证书,获取CA对节点签发的证书的过程即为证书获取,也称为节点登记(Peer Enrollment)。节点,这里假设为节点A,发送消息时,使用其私钥对消息进行数字签字,并同时将证书或证书的下载地址发送给收方,收方对节点ID进行认证。这时,数字签名为消息认证数据,证书为信任状。\n[0070] 节点ID的生成方式又可分为IP生成方式和CA生成方式。下面以节点ID生成方式为IP生成为例,说明节点ID的认证流程。\n[0071] 实施例一:\n[0072] 图5为本发明实施例一中的安全节点ID认证流程图,如图5所示,其步骤包括:\n[0073] 步骤501:接收来自节点A的SIP消息、消息签名及证书,这三个消息可以一次性从节点A接收,也可以分多次从节点A接收;\n[0074] 步骤502:从SIP消息中读取PeerID,从SIP消息的IP和TCP或UDP头读取节点A的IP地址和端口号(Port),根据节点A的IP地址和端口号计算PeerID1,如对节点A的IP地址和端口号执行哈希运算,这里具体的计算过程可以是PeerID1=Hash(IP)||port,其中||为连接计算符;\n[0075] 步骤503:比较PeerID和PeerID1,若两者相等,则执行步骤504,否则转向步骤\n506,即出错处理;\n[0076] 步骤504:使用证书验证消息签名,以认证节点A是否为证书的所有者;\n[0077] 步骤505:若验证通过,则节点ID认证通过,否则执行步骤506,出错处理;\n[0078] 步骤506:系统记录错误。\n[0079] 实际实现时,可以先使用证书验证消息签名,验证通过后再认证PeerID1是否等于PeerID,只是这样执行效率会降低。\n[0080] 在这种情况,节点A的证书获取过程可以采用标准的CA方案。\n[0081] 实施例二:\n[0082] 图6为本发明实施例二中的安全节点ID认证流程图,这里以节点ID生成方式为CA生成方式为例,说明节点ID的认证流程。如图6所示,其步骤包括:\n[0083] 步骤601:接收来自节点A的SIP消息、消息签名及证书,这三个消息可以一次性从节点A接收,也可以分多次从节点A接收;\n[0084] 步骤602:从SIP消息中读取PeerID,从证书中获得PeerID1;\n[0085] 步骤603:比较PeerID和PeerID1,若两者相等,则执行步骤604,否则转向步骤\n606,即出错处理;\n[0086] 步骤604:使用证书验证消息签名,以认证节点A是否为证书的所有者;\n[0087] 步骤605:若验证通过,则节点ID认证通过,否则执行步骤606,出错处理;\n[0088] 步骤606:系统记录错误。\n[0089] 这里在步骤602中,从证书中获得PeerID1又可以分为两种方式。\n[0090] 一种是根据证书中的随机数(rand)生成PeerID1,比如可以是将随机数直接赋值给PeerID1,也可以将随机数进行哈希运算后得到的值赋给PeerID1,这里计算过程可以是PeerID1=rand或PeerID1=Hash(PK||rand),其中随机数包含在证书的主题别名(subject alternate name)字段中,由CA在签发证书时生成,PK为被认证节点与本节点(即认证节点)的公钥。\n[0091] 另一种是根据区分名字(Distinguishing Name)DN生成PeerID1,这里DN必须是经过CA验证的,且属于证书申请者,计算方法可以是对DN进行哈希运算,如PeerID1=Hash(DN)。\n[0092] 实际实现时,可以先使用证书验证消息签名,验证通过后再认证PeerID1是否等于PeerID,只是这样执行效率会降低。\n[0093] 如果采用CA生成方式,节点A的证书获取过程既可以采用我司上述发明申请文件中的方法,也可以按照CA标准方案。\n[0094] 以上实施例一和实施例二的两种方式中,消息签名指P2P SIP消息中的SIP标识(Identity)头域,证书可以通过sip-certs事件包获得。\n[0095] 安全节点ID认证使得节点不能任意的指定自己的ID,使节点不能发起选择ID攻击,并且保证ID只属于消息发送者的,防止被其它节点假冒ID,在这里,冒用ID的攻击效果等效于选择ID攻击。\n[0096] 利用CA生成方式来认证节点ID,由于节点的ID来源于证书,因此其安全性等效于证书的安全性。\n[0097] 利用IP生成方式来认证节点ID,如果节点通过了认证,则可认为节点不会发起选择ID攻击。因为在IPv4中,要发起选择ID攻击,节点需要进行IP欺骗,但节点简单的修改自己报文的源IP地址,又会导致它无法接受到响应。例如在图4中,如果节点E为假冒节点,它难以接收到所有的响应消息;若它接收不到步骤405中节点D向其发送的REG请求,也就难以知道命令序列号(Cseq,Command sequence),进而也难以正确的响应步骤406中的200OK消息。但在IPv6中,由于节点可以拥有大量的IP地址,所以节点进行IP欺骗相对容易,因此建议在IPV6中,使用CA生成方式来认证节点ID。\n[0098] 通过上面的分析可以看出,利用CA生成方式来认证节点ID比IP生成方式来认证节点ID安全性要高,但本方案中仍保留IP生成这种方式。主要是考虑到这种方式可以使用现有的证书;另外,现在P2P SIP中提出的草案中也包含这两种ID生成方式。\n[0099] 实施例三:\n[0100] 图7为本发明实施例三中的安全节点ID认证流程图,这里以系统存在集中式票据服务器为例,说明节点ID认证流程,这时,消息认证码(HMAC,Hash Message Authentication Code)为消息认证数据,票据(ticket)为信任状。如图7所示,步骤包括:\n[0101] 步骤701:接收来自节点A的SIP消息、HMAC及票据,这三个消息可以一次性从节点A接收,也可以分多次从节点A接收;\n[0102] 步骤702:从SIP消息中读取PeerID,从票据中获得PeerID1;\n[0103] 步骤703:比较PeerID和PeerID1,若两者相等,则转向步骤704,否则转向步骤\n707,出错处理;\n[0104] 步骤704:使用票据验证HMAC,以认证节点A是否为票据的所有者;\n[0105] 步骤705:若验证通过,则节点ID认证通过,否则执行步骤707,出错处理。\n[0106] 因为在节点A向票据服务器进行登记的过程中,票据服务器为申请者分配一个共享的口令,并同时必须为申请者分配一个ID,而这个ID正好可作为PeerID1,故在步骤702中的PeerID1是由集中式票据服务器分配给节点A的,并保证PeerID1是随机的,每个节点都与票据服务器间共享一个口令。这里假设是节点B接收来自节点A的SIP消息、HMAC及票据,并对节点A进行认证。那么节点A准备向节点B发送消息前,节点A首先向票据服务器申请它与节点B通讯的票据,票据服务器生成一个节点A和节点B通信的共享密钥,并使用节点A和节点B的口令对它进行加密,生成票据。节点A向节点B发起消息通讯时,基于此共享密钥构造HMAC,存放在其中的Identity头域;其中的Identity Info头域中存放票据的获取地址。节点B收到节点A的消息后,从其中的Identity Info头域中得到票据的获取地址,并通过扩展sip-certs事件包获得票据。节点B根据它与票据服务器共享的口令,解密票据,从而得到它与A的共享密钥。节点B基于此共享密钥,对收到的Identity头域中的HMAC进行验证,从而验证节点A的ID。\n[0107] 上述步骤中,也可以先使用票据验证HMAC,验证通过后再验证PeerID1是否等于PeerID,只是这样的效率较低。\n[0108] 有了安全节点ID认证机制,节点发起选择ID攻击比较因难,但它们发起路由更新仍很容易,因此需要安全路由表维护机制。\n[0109] 安全路由表维护中最重要的步骤是路由更新消息处理,它负责对接收到的路由更新消息进行处理,即节点在收到其它节点发过来的路由更新消息时,需要对其中每个条目中的节点进行验证。\n[0110] 实施例四:\n[0111] 图8为本发明实施例四的安全路由表维护的流程图。在进行安全路由表维护之前,节点首先要接收路由更新消息,这里路由表更新消息可能来自于其它节点的主动通知,如一个新节点上线后主动通知,也可能是节点自己发起路由更新过程中收到的响应,如chord结构中节点调用fix_fingers()函数后收到的响应,并利用接收到的路由更新消息更新自身的路由表条目。\n[0112] 如图8所示,针对路由表每个条目的节点,安全路由表维护包括以下步骤。\n[0113] 步骤801:判断某节点ID是否符合路由表规则,路由表规则根据不同分布式哈希表(DHT,Distributed Hash Table)会不同,具体规则参见相关的DHT文档。如果该节点ID符合路由表规则,则执行步骤802,否则执行步骤804。\n[0114] 步骤802:向该节点ID对应的节点发送P2P SIP节点查询消息,因为路由表更新消息中包括每个ID的IP地址,所以这里可以直接向节点发送消息,逻辑上包含了通常使用的Ping测试。其To头域为:\n[0115] To:\n[0116] 这里4823affe45为该节点ID,即被认证节点ID。\n[0117] 如果该节点正确,则该节点应响应200OK;否则,响应404。如果响应404,则相当于认证失败。如果响应200OK,还需要继续对此消息进行认证,认证采用实施例一至实施例三中的安全节点ID认证的方法,因此,这些消息都必须包含SIP Identity头域。\n[0118] 步骤803:如果步骤802中,接收到的来自该节点的响应为200OK,且通过对此响应消息的认证,表明此节点是合法的路由节点,则继续下一个节点的认证,流程如步骤801至步骤803;否则执行步骤804。\n[0119] 步骤804:出错处理,当检测到错误时,当路由更新消息由其它节点主动发出,则简单地丢弃相关的更新请求;当路由更新是节点自己主动发起的,如果仍然简单丢弃,则路由表条目可能会出现空白,这时,根据DHT的不同和节点的本地策略,例如允许空白,或空白的数量必须在一定比例之内,节点需要以不同的目的键值来进行路由更新。例如对于chord,可以执行find success(n+2^(k+1)+2^k);对于pastry,可以以不同的目的键值,经由不同的起始节点进行查询。\n[0120] 以上步骤中,也可以先认证被认证节点ID,在被认证节点ID认证通过后,再判断被认证节点ID是否符合路由表规则,只是这样执行效率较低。\n[0121] 实施例五:\n[0122] 图9为本发明实施例五的安全路由表维护的流程图,相比于实施例四,实施五中的安全路由表维护还包括两个步骤,如图9所示,实施例五的安全路由表维护步骤如下:\n[0123] 步骤901:路由更新消息处理,即实施例四的安全路由表维护步骤。\n[0124] 步骤902:高安全级路由表处理,负责构造安全级别较高的路由表,并对普通路由表进行刷新处理。\n[0125] 对于pastry,可以构建一个高级别的安全路由表,对于chord,不需要此步骤。高安全级路由表路由效率往往比较低下,通常不直接用它进行路由。引入高安全级路由表后,对于普通路由表,需要增加下面的处理:\n[0126] 周期性路由表重置:以一定的时间周期,重置普通路由表的内容为高安全级路由表的内容;然后再按照普通路由的更新策略进行路由更新。这时又会引入一些坏条目,但过了一个时间周期后,又会被刷新,从而保证了坏条目的比例在一定范围之内。\n[0127] 普通路由表更新速率限制:为每个路由表条目设定一个更新时间间隔。在此时间间隔之内,此条目不接受更新。通过限制路由表更新的速率,从而限制被污染的速率。\n[0128] 步骤903:信任评估处理,对前两个模块提供支持,它根据前两个模块的处理结果,产生对其它节点的信任评估结果,并用于前两个模块。当任何一个操作完成后,都可将失败或成功的消息发往信任评估模块,以对相关节点进行评估,并影响以后与这些节点的交互。例如如果收到一个节点主动发来的路由更新消息,而检测出来此消息非法,则信任评估模块对此节点进行纪录,在一段时间内或永远,不接收此点发来的路由更新消息。\n[0129] 这样当步骤901路由更新消息处理检测到错误时,可将出错类型和出错相关节点信息发送到信任评估处理模块中;信任评估处理模块对相关节点的信誉度进行计算。同样当步骤901路由更新消息处理验证通过时,可将相关节点信息发送到信任评估处理模块,并进行信誉度计算。在接收路由更新消息时,同样要向信任评估处理模块查询相关节点的信誉度,不接收信誉度低的节点的路由更新消息。\n[0130] 信任评估机制同样可用于安全消息转发等模块。\n[0131] 利用上述安全路由表维护技术,尽量使节点路由表中的条目是经过验证的,使攻击者难以对系统发起路由更新攻击;通过高安全级别路由表,可以对路由条目增加很强的约束,从而有利于路由更新消息处理的安全性;信任评估机制可以为系统的路由更新提供支持,可部分对抗某些有证书或票据且可达,然而是恶意的节点攻击;路由表条目不需签名,可在使用这些条目时如在消息转发时,再对相关节点进行验证。这一点不同于P2P SIP中的资源票据(resource ticket)。\n[0132] 通过安全路由表维护,路由表已有了安全机制,但在之后的消息转发过程中,仍然需要认证机制。这是因为安全路由表维护的最好的结果是,每个节点路由表中的恶意条目的比例,等于系统中恶意节点的比例,由此可见,有了安全路由表维护机制后,仍有可能有一些恶意的节点存在于其它节点的路由表中,特别是合法的恶意节点,即有证书、且合法地出现在别的节点的路由表中,可以简单的发起转发攻击,破坏正常的路由过程。\n[0133] 为此可以采用安全消息转发机制,检测出恶意的行为,并采取相应的动作。\n[0134] 实施例六:\n[0135] 安全消息转发包括逐跳故障检测和故障恢复两个过程,在进行消息转发时,同时进行检测。当检测到错误时,再回溯到上一步或二步,选择次优路由;或回溯到起点,进行冗余路由。\n[0136] 图10为本发明实施例六的安全消息转发逐跳故障检测的流程图,逐跳故障检测的目的是发现路由过程中出现的安全问题,如图10所示,其由消息发起节点执行,步骤如下:\n[0137] 步骤1001:消息发起节点接收由转发节点返回的下一跳节点ID,具体过程为,转发节点根据接收到的转发消息,查找出消息的目的地址,在根据转发节点自身的路由表,查找出路由下一跳地址,并将此地址发送到消息发起节点;这里如果还不存在转发节点,则消息发起节点直接从自身的路由表中查找出一个下一跳节点ID;消息发起节点判断下一跳节点是否符合路由表规则,如果下一跳节点符合路由表规则,执行步骤1002,否则执行\n1008。\n[0138] 步骤1002:消息发起节点将消息转发至下一跳节点,然后根据下一跳节点对消息转发的响应消息,对下一跳节点ID进行认证,这里响应消息中包括SIP消息、信任状以及消息认证数据,认证可采用实施例一至实施例三中的安全节点ID认证的方法。\n[0139] 步骤1003:如果步骤1002中,通过对此下一跳ID的安全节点认证,则执行步骤\n1004,否则执行步骤1007。\n[0140] 步骤1004:判断是否到达目的节点,如果未达到目的节点,转向执行步骤1001,如果到达了目的节点,则执行步骤1005。\n[0141] 步骤1005:对资源完整性进行认证,当ID认证采用CA方式,则每个资源在注册时,由资源的拥用者使用其私钥,对资源中的一些关键属性,又称之为摘要字符串(digest string),进行数据签名,形成Identity和Identity-info头域,称为Resource Ticket。目的节点,即保存资源的节点,将资源和Resource Ticket一起保存,并在200OK消息中发送给消息发起节点。消息发起节点根据Identity-info获取资源拥用者的证书,并验证证书和Resource ticket的一致性,从而验证了资源的完整性。\n[0142] 当ID认证采用集中式票据服务器,目的节点将资源及Resource Ticket在200OK消息中发送给消息发起节点。消息发起节点根据Identity-info获取可信节点的证书,并验证证书和Resource ticket的一致性,从而验证了资源的完整性。这里系统需要引入可信节点签名服务,此服务由一些可信节点构成,这些节点都拥有CA签发的证书,并在证书中说明了它们能够提供资源签名服务。资源发布节点,根据P2P服务查找算法,确定一个可信节点为其负责Resource ticket的生成,并请求此可信节点为其生成Resource ticket。\n可信节点对资源发布节点进行认证后,为其生成Resource ticket,并将其返回给资源发布节点。资源发布节点将其资源及Resource Ticket,注册到保存资源的节点,如目的节点。\n[0143] 步骤1006:判断资源完整性认证是否通过,若通过,则根据得到的资源信息进行操作,例如发起邀请(invite),否则执行步骤1007。\n[0144] 步骤1007:出错处理,根据不同的情况,调用故障恢复流程,尽量保证路由能够成功,包括积极恢复和消极恢复两种方案。\n[0145] 在上述步骤中,判断路由下一跳节点是否符合路由表规则、认证该下一跳节点ID以及判断是否到达目标节点的顺序不受限制。\n[0146] 图11为本发明实施例六的积极故障恢复的流程图,如图11所示,积极故障恢复方案步骤包括:\n[0147] 步骤1101:出错类型判断,如果出错类型为下一跳不符合路由规则,则执行步骤\n1102,如果出错类型为安全节点认证未通过,则执行步骤1103,如果出错类型为资源完整性认证未通过,则执行步骤1104。\n[0148] 步骤1102:回溯到上一跳节点,执行步骤1105。\n[0149] 步骤1103:回溯到上两跳节点,执行步骤1105。\n[0150] 步骤1104:回溯到起点,执行步骤1106。\n[0151] 步骤1105:选择另外的路由,从另外的路由进行消息转发,具体为:接收由回溯的节点重新选择的下一跳节点,并转向执行步骤1001。\n[0152] 对于不同的DHT及不同的实现,采用的方法不同。对于每个路由表条目有多个备选条目时,例如在pastry中,以次优的备选条目作为下一跳;当没有备选条目时,可以以次优路由进行消息转发。例如在chord中,可以将比目的键值小的第二大的手指(finger)条目作为下一跳;当这样的条目不存在时,例如下一跳是后继时,可以再回溯一步走次优路由,或将最大的手指条目作为下一跳。\n[0153] 同时,上一跳或两跳节点,需要更新原先的路由条目,使下一跳不再经过有问题的节点。\n[0154] 步骤1106:由起点的每个邻居,分别向不同的复制根发消息,邻居的定义,对不同的DHT不相同,具体参见相关文档;复制根为键值存放的节点的集合。\n[0155] 相对而言,在消极故障恢复方案中,出现任何错误时,均回溯到起点,执行步骤\n1106。\n[0156] 这两种方案中,积极故障恢复方案的系统整体开销较小,但有时候路由成功延时较长;消极故障恢复方案的系统整体开销较大,但平均路由成功延时较短。\n[0157] 在故障恢复过程中,将出错分为了下一跳不符合路由表规则、ID认证未通过、资源完整性认证未通过三类,其它的出错可以归到这三类之中。例如某节点不响应查询消息,等效于下一跳不符合路由表规则,需要回溯到上一跳节点;当下一跳节点不存在,则等效于ID认证未通过,需要回溯到上两跳节点;当某一键值的确由某节点负责,但此节点恶意响应此键值不存在,如返回SIP 404消息,等效于资源完整性认证未通过。\n[0158] 图12为本发明实施例六的积极故障恢复示意图,如图12(a)所示,假设当前路由到节点d,节点d返回节点e作为下一跳,消息发起节点a根据节点e节点的ID,判断节点e不符合路由表规则,节点a可以判断节点d是恶意节点,因此回溯到上一跳节点c,请求节点c给出另外的路由。\n[0159] 如图12(b)所示,假设当前路由到节点d;节点d返回节点e作为下一跳,消息发起节点a判断节点e符合路由表规则,则当前路由到节点e,消息发起节点a与节点e进行交互,对节点e的ID进行认证,如果节点e未通过认证,则节点a可判断节点d是恶意节点,这是因为节点e并不拥有相应ID,而节点d将节点e写入了其自身的路由表,因此回溯上两跳到节点c,请求节点c给出另外的路由。\n[0160] 在这两种情况下,都可以判定节点d为恶意节点,但实际上节点c也可被怀疑是恶意节点,因为是节点c返回了节点d作为下一跳的,这种怀疑可一直递推下去。但本方案并没有这样递推,因为本方案包含安全节点ID认证技术。如果节点c是恶意节点,要将下一跳转给另一个ID合法的且与其共谋的恶意节点,本身比较困难;如果此时节点c转给下一个非共谋恶意节点的概率为f,即恶意节点在系统中的比例,则实际上节点c的行为相当于一个合法节点,因为合法节点也会以概率f将消息转给下一个恶意节点。另外,这时即使节点c是恶意节点,它将下一跳发到了节点d,安全消息转发算法发现了节点d是恶意的,也会要求节点c提供另一个不同的下一跳:如果节点c此时不回复,则算法会认为节点c是恶意节点,从而继续回溯;如果节点c给出另一类似于节点d的下一跳节点d′,这种可能性很小,而且同样可以被安全消息转发算法发现。\n[0161] 当资源完整性未通过时,由消息发起节点a利用冗余路由机制,向不同的目的复制节点发送消息。利用冗余路由,当一个目的节点出现问题时,可以向其它节点获得所需要的信息。因为复制地址其ID可能会相差很远,所以回溯几步意义不大,需要由起点开始重新发起查询。\n[0162] 对于下一跳不符合路由表规则以及下一跳ID认证未通过这两种情况,不进行冗余路由,而是选择走另一条路由。这样做是为了尽量减少系统开销。\n[0163] 对资源进行了完整性签名,实际上是一种端到端的安全性机制,但本方案同时包含了逐跳安全机制。因为仅有这种端到端的安全机制,有时候难以保证消息能够到达其目的地点,因此需要逐跳安全机制,使消息尽量找到正确的路由。\n[0164] 对资源进行了完整性签名,使得只要找到一个存储资源的节点,就可知道资源信息是否被恶意篡改。因此,资源的复制在这里并不是帮助判断是否资源被恶意篡改,而是为了保证资源的可获得性。\n[0165] 如果回溯几次不成功,则从起点开始发起冗余路由;或记录跳数,当跳数越大时,回溯步数越多,如回溯步数是跳数的平方根,这是因为跳数越大,与目的越接近,路由会聚越明显,只回溯少量步数作用越小。\n[0166] 本方案的冗余路由方法为,每个发起点的邻居,向每个复制节点发消息。这种方法要求复制节点之间是非相邻的关系,即分布式SIP(DSIP,distributed SIP)草案中的复制方法。\n[0167] 由此可见,为了对抗选择性ID攻击、路由更新攻击以及转发攻击,一个完整的安全路由方法应包括安全节点ID认证、安全路由表维护和安全消息转发三个部分。\n[0168] 实施例七:\n[0169] 图13为本发明实施例七中的网络设备,如图13所述,该网络设备包括接收模块\n1301、计算模块1302、对比模块1303、认证模块1304、节点认证判断模块1305、路由表规则判断模块1306、路由条目合法判断模块1307、路由表更新控制模块1308、发送模块1309、地址对比模块1310、资源完整性认证模块1311、出错处理模块1312以及信任评估处理模块\n1313。其中出错处理模块1312又包括错误判断单元13121和错误处理单元13122,错误处理单元13122又包括节点验证错误处理子单元、路由表规则错误处理子单元、资源错误处理子单元。\n[0170] 当该网络设备用于安全节点认证时,接收模块1301接收到来自被认证节点的SIP消息、消息认证数据及信任状后,将被认证节点的SIP消息、消息认证数据及信任状传送到后续的计算模块1302,对比模块1303以及认证模块1304。计算模块1302根据接收到的SIP消息、消息认证数据或信任状,根据事先设定的规则,确定第二节点ID,并将计算结果传送到对比模块1303中;对比模块1303接收来自计算模块1302的结果,将其与从SIP消息中读取第一节点ID进行比较,并将对比结果输送到节点认证判断模块1305。认证模块1304根据来自接收模块1301的信任状及消息认证数据,用信任状验证消息认证数据,并将认证结果输送到节点认证判断模块1305。节点认证判断模块1305根据对比模块1303和认证模块1304的判断结果,判断节点认证是否通过,在对比模块1303的对比结果为相等,且认证模块1304的认证结果为通过时,判定节点认证通过。\n[0171] 当该网络设备用于路由表更新维护时,接收模块1301还可以用于接收路由更新消息,利用此路由更新消息更新路由表,发送模块1309向路由表条目中需要被认证节点发送查询消息,接收模块1301接收来自被认证节点的查询响应消息,如果查询响应消息为200OK,则将200OK响应消息中包含的SIP消息、消息认证数据及信任状传送给计算模块1302,对比模块1303以及认证模块1304,其处理同安全节点认证时,节点认证判断模块\n1305判断出该节点是否通过认证后,将判断结果传送给路由条目合法判断模块1307。同时路由表规则判断模块1306判断此被认证节点是否符合路由表规则,并将判断结果传送给路由条目合法判断模块1307。路由条目合法判断模块1307根据节点认证判断模块1305和路由表规则判断模块1306的判断结果判断该节点是否为合法的路由节点,在节点认证判断模块1305的判断为节点认证通过,且路由表规则判断模块1306判断节点符合路由表规则时,判定该节点为合法的路由节点。这里路由表更新控制模块1308控制接收模块1301接收路由更新消息的策略,如更新时间间隔。这样利用上述网络设备依次验证路由表条目中的节点是否合法,即可完成安全路由表维护功能。\n[0172] 当该网络设备用于安全转发时,接收模块1301首先接收到来自当前路由节点的下一跳节点ID,当然,如果当前路由节点即为本节点,此时不需要接收下一跳节点信息,只需从自身路由表中选择一个下一跳节点ID即可。路由表规则判断模块1306判断此下一跳节点ID是否符合路由表规则,如果符合路由表规则,则通知发送模块1309将消息发送到此下一跳节点,接收模块1301接收此下一跳节点的响应消息,此响应消息包含SIP消息、消息认证数据及信任状,并将SIP消息、消息认证数据及信任状传送给计算模块1302,对比模块\n1303以及认证模块1304,其处理同安全节点认证时,节点认证判断模块1305判断出此下一跳节点ID认证通过后,通知地址对比模块1310,地址对比模块1310判断此下一跳节点是否为目标节点,在此下一跳节点为目标节点时,通过资源完整性认证模块1311认证资源的完整性,如果资源完整性认证通过,则整个安全转发过程完成。在此下一跳不为目标节点时,通知接收模块1301接收由下一跳节点发送的根据其自身路由表查找出的下一个下一跳节点信息,并继续上述处理。\n[0173] 在完成安全转发的过程中,还可以进一步包括出错处理模块1312,在节点认证判断模块1305、路由表规则判断模块1306或资源完整性认证模块1311判定验证不通过时,进行出错处理。出错处理模块1312进一步包括两个模块,分别为错误类型判断单元13121和错误处理单元13122。错误类型判断单元13121判断出错类型;错误处理单元13122根据错误类型判断模块13121判断的出错类型,执行相应的错误处理。在出错类型为节点认证判断模块1305判定节点验证未通过时,节点验证错误处理子单元通知接收模块1301接收由所述下一跳节点的上两跳节点重新选择的下一跳节点ID,通知路由表规则判断模块1306判断此下一跳节点ID是否符合路由表规则,后续处理同上。在出错类型为路由表规则判断模块1306判定节点不符合路由表规则时,路由表规则错误处理子单元通知接收模块1301接收由所述下一跳节点的上一跳节点重新选择的下一跳节点ID,通知路由表规则判断模块\n1306判断此下一跳节点ID是否符合路由表规则,后续处理同上。在资源完整性认证模块\n1311资源完整性验证未通过时,资源错误处理子单元将自身邻居节点作为下一跳节点,并通知路由表规则判断模块1306判断此下一跳节点ID是否符合路由表规则,后续处理同上。\n[0174] 还有一种较为简单的方式,即出错处理模块1312中的错误类型判断单元13121不对错误类型进行任何判断,对于任何错误,均回溯到起点,由错误处理单元13122将自身邻居节点作为下一跳节点,并直接通知路由表规则判断模块1306判断此下一跳节点ID是否符合路由表规则,后续处理同上。\n[0175] 以上,在安全节点认证、路由表更新维护以及安全转发过程中,无论节点认证判断模块1305、路由表规则判断模块1306或资源完整性认证模块1311判断验证通过还是不通过,均将相关节点信息发送到信任评估处理模块1313,信任评估处理模块1313对相关节点进行信誉度评估,当接收模块1301要接收路由更新消息或者是来自转发节点的下一跳节点消息前,均先向信任评估处理模块1313查询相关节点的信誉度,不接收低信誉度节点的路由更新消息以及下一跳节点消息。\n[0176] 由以上描述可以看出,还可以将接收模块1301进一步划分为三个接收单元,分别用于接收来自被认证节点的SIP消息、消息认证数据及信任状;接收用于更新路由表条目的路由更新消息;以及接收由所述下一跳节点根据自身路由表查找的下一个下一跳节点身份标识。\n[0177] 本发明实施例还公开了一种网络系统,包括至少一个节点以及网络设备。\n[0178] 节点用于向网络设备发送会话起始协议SIP消息、消息认证数据及信任状。\n[0179] 网络设备接收来自所述节点的会话起始协议SIP消息、消息认证数据及信任状后;从SIP消息中获取所述节点的身份标识;根据接收到的SIP消息、消息认证数据或信任状确定节点的第二身份标识;检验节点的身份标识与第二身份标识是否相同;根据信任状验证消息认证数据;当节点身份标识与第二身份标识相同,且信任状验证消息认证数据通过时,判定节点验证通过。\n[0180] 当网络设备接收到用于更新自身路由表条目的路由更新消息,并且更新后的路由表条目包含该节点;则网络设备在判断节点验证通过时,判断节点的身份标识是否符合路由表规则;当节点的身份标识符合路由表规则且节点验证通过时,判定节点是合法的路由节点。\n[0181] 综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。\n凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
法律信息
- 2012-06-27
- 2009-08-26
- 2009-07-01
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2006-07-12
|
2006-01-23
| | |
2
| |
2006-04-26
|
2005-11-15
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |