主权项 |
一种P2P网络中有效消解多Sybil节点渗透冲突的方法,其特征在于包括以下步骤:第一步,划分渗透区域:将整个Kademlia网络节点标识空间平均划分为2<sup>q</sup>个渗透区域,这些渗透区域表示为{[j·2<sup>L‑q</sup>,(j+1)2<sup>L‑q</sup>)|0≤j<2<sup>q</sup>,j为整数},其中每个元素是一个区间,每个元素中的整数对应渗透区域中的节点标识,记[j·2<sup>L‑q</sup>,(j+1)2<sup>L‑q</sup>)为第j号渗透区域;Kademlia网络节点标识称为nodeID,nodeID为L比特的Kademlia网络的节点标识空间为2<sup>L</sup>,L为正整数,Sybil节点的数量为q·2<sup>q</sup>,“·”表示乘法运算,q为整数;第二步,Sybil节点编组:将所有Sybil节点编为2<sup>q</sup>个组,每组q个Sybil节点,并依次用0到2<sup>q</sup>‑1这2<sup>q</sup>个整数作为组号;第三步,设置Sybil节点的标识nodeID:对于组号为p的Sybil节点编组,0≤p≤2<sup>q</sup>‑1,将集合{<img file="FDA0000522183680000011.GIF" wi="171" he="61" />·2<sup>L‑q</sup>|0≤a<q,a为整数}中的这q个值作为nodeID分配给组内的q个Sybil节点;<img file="FDA0000522183680000012.GIF" wi="44" he="45" />表示异或运算,通过2<sup>a</sup>与组号p的异或运算来区分距离,确保组内不同的Sybil节点出现在Kademlia节点的不同K‑bucket中;每个Kademlia节点的路由表由L个链表组成,每个链表称为一个“K‑bucket”,用于记录网络中到自己的异或距离在区间[2<sup>i</sup>,2<sup>i+1</sup>)内的邻居节点的信息,i为K‑bucket的序号,0≤i<M;每条信息以三元组<IP地址,UDP端口号,nodeID>形式表示和存储,K‑bucket长度以K为上限,K是一个常数;每当Kademlia节点收到来自其他节点的消息,它就根据该消息发送节点到自己的异或距离以及消息中的<IP地址,UDP端口号,nodeID>信息来更新K‑bucket中的记录,这称为捎带确认piggybacking;L个K‑bucket组成一个Kademlia节点的路由表,路由表也称“K‑buckets”,一个路由表中的L个K‑bucket通过连续的序号i区分;第四步,通过P2P网络爬虫获得整个Kademlia网络中所有节点的路由表,即邻居节点的<IP地址,UDP端口号,nodeID>,并通过路由表获得每个节点的节点度d,节点度指节点的路由表中邻居节点的个数,即节点的路由表中的表项数;第五步,对2<sup>q</sup>个渗透区域中的节点,分别按照节点度d的大小进行降序排列,形成2<sup>q</sup>个列表,其中每个列表称为对应渗透区域的节点降序列表;将第j号渗透区域的节点降序列表发送给组号为j的Sybil编组中的每个Sybil节点,具体步骤如下:5.1令j=0;5.2将j号渗透区域的节点降序列表发送给组号为j的Sybil编组中的q个Sybil节点;5.3j=j+1;5.4判断j是否等于2<sup>q</sup>,如果等于,则转第六步,否则,转5.2);第六步,设置全局计数器N<sub>G</sub>,并为每个Sybil节点设置一个局部计数器N<sub>r</sub>,0≤r≤q·2<sup>q</sup>‑1,N<sub>G</sub>、N<sub>r</sub>都初始化为0,所有Sybil节点并行执行如下步骤:6.1向收到的节点降序列表中的首节点发送PING探测命令,然后将该首节点从节点降序列表中删除;PING探测命令是Kademlia协议中的一种远程过程调用;6.2判断节点降序列表是否为空,如果为空,N<sub>r</sub>=N<sub>r</sub>+1,N<sub>G</sub>=N<sub>G</sub>+1并转第6.3步;否则,转第6.1步;6.3判断N<sub>G</sub>是否等于q·2<sup>q</sup>,是,转第七步;否则执行一个空操作后转6.3;第七步,设置计时器为T小时,T取值为6;第八步,间歇t秒,t取值为5;第九步,判断是否从系统进程接收到结束指令:是,转第十一步;否则转第十步;第十步,判断是否计时器时间用完:是,转第四步;否,转第八步。第十一步,结束。 |