MP2P网络中基于非完全合作节点识别的路由选择
简介
P2P模式中资源稀缺性加剧了移动对等网络(MP2P)节点的自私,使节点表达非完全合作(NCC)态度。因此,在本文中提出了非完全合作节点的识别并针对 MP2P 提出了相应的信任路由方案。
从直接信任、内部状态、推荐信任三个维度组成的卦限来评估。
识别NCC节点的难点
- 难点1:节点只能直接得知相邻节点状态,全局信息只能通过推荐。
- 难点2:如何区分善意节点因为资源不足而拒绝服务。
- 共谋恶意节点(CNCC),更难发现且危害更大。
目前可以做到的工作
通过三个评估标准构成卦限来建立信任模型。
INCC可以通过模型准确识别,CNCC可以基于INCC的识别结果通过余弦相似度进行识别。
对MP2P网络基于NCC识别构建一条信任路由。
攻击方式
- 灰洞攻击:以一定概率不转发收到的数据包。
- 黑洞攻击:不转发收到的数据包。
- bad mouthing:说好节点坏话。
- ballot stuffing:说坏节点好话。
- self-promoting attacks:吹自己。
- Collusive Attack:共谋攻击,同时协作攻击相同对象。
定义
直接信任
一种直接监控,根据被监控节点正确转发的数据包和收到的数据包进行评估。
节点 $v_i$ 在时间 $t$ 对节点 $v_j$ 的直接信任值为 $T^d_{i,j}(t)$ 。
推荐信任
一些节点超出了传输范围因而不能获取直接信任,需要通过共同相邻节点进行对被监控节点的信息获取。
节点 $v_i$ 在时间 $t$ 对节点 $v_j$ 提供关于 $v_k$ 的推荐为 $T^r_{i,j,k}(t)$ 。
好节点直接发送综合信任,坏节点会有波动。
信任度reliability
是间接信任的可靠性的评估
表示一个节点对另一个节点的综合信任度。
节点 $v_i$ 对 $v_j$ 在时间 $t$ 的信任度为:
$$
\begin{array}{r}
T_{i, j}^{c}(t)=w_{s} \times\left(1-\left|T_{j, i, i}^{r}(t)-T_{i, i}^{d}(t)\right|\right)
+
w_{b}
\times
\frac
{\sum\limits_{v_{k} \in\left(N\left(v_{i}\right) \cap N\left(v_{j}\right)\right)} {\left(1-\left|T_{j, i, k}^{r}(t)-T_{i, k}^{d}\right|\right) }}
{\left|N\left(v_{i}\right) \cap N\left(v_{j}\right)\right|}
- \
w_{r} \times
\frac
{\sum\limits_{\left(v_{j}, v_{k} \in N\left(v_{i}\right) \cap v_{j} \neq v_{k}\right), v_{l} \notin N\left(v_{i}\right), v_{l} \neq v i}{\left(1-\left|T_{j, i, l}^{r}(t)-T_{k, i, l}^{r}\right|\right) }}
{N-\left|N\left(v_{i}\right)\right|-1}
\end{array}
$$
$w_s, w_b, w_r$ 是三个加权系数,分别代表节点对自己的评价差异,节点对相邻结点的评价差异,节点对不相邻结点的评价差异。
间接信任
间接信任:根据可信邻节点所提供的推荐信任建立的信任关系。
节点 $v_i$ 在时间 $t$ 对节点 $v_k$ 的间接信任值 $T^i_{i, k}(t) = T^r_{i, j, k}(t) \times T^c_{i,j}(t)$。
综合信任
基于直接信任和间接信任的最终信任。
节点 $v_i$ 在时间 $t$ 对节点 $v_j$ 的综合信任 $T_{i, j}(t) = w_d \times T^d_{i, j}(t) + (1 - w_d) \times T^i_{i, j}(t)$ ,其中 $w_d$ 是权重因子,用于 调整重视程度。
内部状态
表示一个节点的内部资源,即使主观合作节点仍会因为内部状态而表现不佳。
路径信任
从 $v_i$ 到 $v_j$ 的路径信任记为 $T^p_{i, j}$ 。
MP2P是动态变化的,我们可以监听的只有直接信任和推荐信任,并根据这两个来更新信任度、间接信任、综合信任、路径信任。并将时间划分为时间间隔 $\Delta t$ ,更新方案为 $T^d_{i,j}(t+\Delta t)=\beta \times T^d_{i,j}(t)+(1-\beta)\times \Delta T^d_{i,j}(t+\Delta t)$ , $\Delta T^d_{i,j}(t+\Delta t)$是节点 $v_i$ 对 $v_j$ 在时间 $t+\Delta t$ 的直接信任。
公式方面总体来说
直接信任(direct trust),推荐信任(reliability),内部状态(internal state)三个维度。
通过计算直接信任(direct trust) $T^d_{i,j}(t)=\dfrac{正确转发的数据包}{收到的包}$。
信任度(reliability)即为:
$$
\begin{array}{r}
T_{i, j}^{c}(t)=w_{s} \times\left(1-\left|T_{j, i, i}^{r}(t)-T_{i, i}^{d}(t)\right|\right)
+
w_{b}
\times
\frac
{\sum\limits_{v_{k} \in\left(N\left(v_{i}\right) \cap N\left(v_{j}\right)\right)} {\left(1-\left|T_{j, i, k}^{r}(t)-T_{i, k}^{d}\right|\right) }}
{\left|N\left(v_{i}\right) \cap N\left(v_{j}\right)\right|}
- \
w_{r} \times
\frac
{\sum\limits_{\left(v_{j}, v_{k} \in N\left(v_{i}\right) \cap v_{j} \neq v_{k}\right), v_{l} \notin N\left(v_{i}\right), v_{l} \neq v i}{\left(1-\left|T_{j, i, l}^{r}(t)-T_{k, i, l}^{r}\right|\right) }}
{N-\left|N\left(v_{i}\right)\right|-1}
\end{array}
$$
间接信任由推荐信任和信任度得到:$T^i_{i, k}(t) = T^r_{i, j, k}(t) \times T^c_{i,j}(t)$。
综合信任由直接信任和间接信任得到:$T_{i, j}(t) = w_d \times T^d_{i, j}(t) + (1 - w_d) \times T^i_{i, j}(t)$。
INCC的检测
根据直接信任、内部状态、推荐信任三个维度组成的卦限来评估。
状态(Good/Bad)、直接信任(High/Low)和可靠性(True/False),由于内部状态差的时候不可能有较好的转发率,BHX是不存在的,GHF可能会发动诽谤攻击,GLT可能发动灰洞攻击,BLT和BLF需要再进一步确定。
算法
对于每个时间片都进行如下操作
通过监控邻居节点获得直接信任
从邻居节点获取推荐信任
计算信任度
根据检测结果检测内部状态
基于当前时间片的新的信任值进行更新
基于卦限确定INCC
CNCC的检测
假设共谋节点来自相同类型,忽略合作节点GTH节点、恶意节点GLF、BLF。直接关注GHF、GLT、BLT三种节点,并通过余弦相似度。
算法
- 对于每个时间片都进行如下操作
- 对于每个在GTL(综合可靠、直接信任度低)象限的点进行如下操作
- 计算每两个节点在直接信任和信任度的相似度
- 若大于阈值,则识别为黑洞攻击的共谋节点
- 对于每个在GFH(综合不可靠、直接信任度高)象限的点进行如下操作
- 计算每两个节点在直接信任和信任度的相似度
- 若大于阈值,则识别为假情报攻击的共谋节点
- 对于每个在GFL(综合不可靠、直接信任度低)象限的点进行如下操作
- 计算每两个节点在直接信任和信任度的相似度
- 若大于阈值,则识别为黑洞攻击和假情报攻击的共谋节点
- 对于每个在GTL(综合可靠、直接信任度低)象限的点进行如下操作
信任路由模型
我们基于无线自组网按需平面距离向量路由协议和NCC识别提出了 NCCTR 信任路由模型,描述如下:
当一个源节点 $v_s$ 有数据包要发给目的节点 $v_d$ , $v_s$ 首先检测是否存在可用路由,如果存在则随机选择一条并转到7,否则转到2。
$v_S$ 向其直接信任值大于门限 $\gamma$ 的相邻节点进行广播路由请求包RREQ。
中间节点第一次收到RREQ时会判断当前路径是否合适,如果合适则继续向向其直接信任值大于门限 $\gamma$ 的相邻节点进行广播,否则直接cut。
若任何一个节点有一个可用路径到达 $v_d$ ,则生成路由回复包 RREP 回溯发送给 $v_s$ 。否则重复步骤3。
目的节点 $v_d$ 收到几个 RREQ包时,会选择最大信任路径回复给 $v_s$ 。
$v_s$ 收到RREP时,会建立一个或多个信任路由路径。
$v_S$ 按照信任路由路径发送数据包。
一条路径失效,可以使用其余的。若没有其他剩下的,转到步骤2。
模拟实验环境
1000m*1000m的矩形场,50 个移动节点,节点覆盖半径250m,每个节点移动
以随机速度从一个随机的起点到一个随机的目的地,一旦到达目标节点,暂停一段时间后随机选择另一个目的地。
使用UDP作为协议,Constant Bit Rate作为编码的码率控制的10个数据包?数据包生成频率1个/s,大小为512字节,起点终点随机。
- 服务器初始没有数据,位置固定
- 暂时不考虑恶意服务器
- 内部状态由发出数据报/转发数据报评估,只有好/坏两个状态
- 服务器定期广播请求所有数据
- 物层节点初始数据,每个都有,正态分布。假数据落在范围外
非完全合作节点模拟状态如下
Black Hole Attack:节点会拒绝转发所有数据包。
Bad-mouthing Attack:针对行为良好的节点的信息打差评,破坏他们的信任价值。
Ballot Stuffing Attack:为行为不良的节点提供良好的推荐信息以提高他们的信任价值。
Collusive Attack:这些节点同时协作发起攻击。他们有相同的攻击对象。
评估指标
- 物层召回率True Positive Ratio (TPR):positives节点识别的正确率,识别出的恶意节点/恶意节点总数。
- 物层误检率False Positive Ratio (FPR): negative events误识为positive数目与实际上 negative events数目的比率。
- 物层精度Precision Ratio (PR):true positive correct results数目与positive events数目的比率。
- Packet Delivery Ratio (PDR):数据包成功接收比率。
- Average End-to-end Delay (AED):数据包平均发送时间。
- Average Overhead(AOH):控制包数和数据包数比率的平均值。
前三个可以评估非完全合作节点检测方法的有效性,后三个可以评估MP2P中路由选择方案的能力。
不理解的部分
- 评估标准里actual positives、negative events、true positive correct results指的都是什么
- 10个Constant Bit Rate是以恒定比特率方式进行编码?不太理解。
- 论文里没说脏数据、恶意服务器的事,要自己加fake data、fake service。
- 连服务器的事都没说(可能我没看仔细
- 实现的具体细节要去看代码
- 为什么聚类实现在Node里,每个节点都自行识别吗
- 边缘服务器的分布好奇怪,位置是固定的吗。物层节点位置是随机的,但好像并没有在移动。
- 可靠服务器获取资源时也会有±1的误差,恶意服务器获取资源会有±10的误差,但资源都是全的。
- 节点只有一部分资源,误差同上(模拟假数据?)。
- Node里面的包含数据为什么要弄成映射而不是集合,是资源有精度误差而给资源编号吗。
- 精度好像不太行?为什么全是0
- 对于不相邻结点的评估是否纳入考量
- 在哪里using namespace std;了……
- 邻接表adjacencyList好像炸了
- 服务器的计算量会更大,然后它的资源也更多,但是我们其实没有在模型里面体体体现这个
- 聚类函数在node.cpp第361行
- 服务器判断识别恶意节点的方法和物层节点不同
- Node第328行,this只记录了来自source的数据place的最近记录…
- 服务器的聚类似乎没有运行过,可能是测试规模太小了
接下来要干的
- 看一下网上RIP路由怎么模拟实现的
- 弄清楚一些细节概念,评估函数具体含义
- 弄清楚各个矩阵计算方法
- 是否对物层节点加入移动,调一下邻接表。
- 对校一下信任矩阵和评估函数的实现,看一下是否要拆出来写。
工作进度(直接copy过来的)
目前处于编码测试阶段。
代码中已经实现的部分有:
- 网络的构建(构建网络拓扑,构建结点的rip表,模拟结点发包转包)
- 实现了TRUSTCOM这篇论文里计算信任的方法(即信任模型)
- 写了一个边缘服务器的聚类模型,但这个模型还在调试中
- 实现了灰洞攻击和虚假数据的攻击
- 计算了三个测试指标
待完善的部分:
- 聚类算法的调试(聚类算法,即边缘服务器对物层恶意结点的识别这里做得一直不是很理想)
- 加入更多的攻击模型(共谋攻击,诽谤攻击)