无线传感器网络中恶意节点的局部识别
摘要
无线传感器网络在最小能耗下抵御各种攻击可能是一项艰巨的任务,因为节点通常具有有限的能量资源,分布在恶劣环境中,并通过标准无线电通道进行通信。向无线传感器网络中添加恶意节点是一种常见的攻击方式。恶意节点可通过产生大量流量、发送虚假数据或进行路由欺骗来降低网络的可靠性。本研究提出了一种算法,该算法利用已验证节点的局部邻域信息和消息签名来检测恶意节点。实验和仿真结果表明,所提出的算法是检测恶意节点的一种可行且高效的方法。
关键词 —无线传感器网络;恶意节点;密码学;分布式算法。
一. 引言
无线传感器网络(WSN)是由多个节点组成的网络,这些节点可感知各种事件、处理数据,并通过无线电消息与其他节点通信。无线传感器网络在农业、军事、监控、医疗保健和工业自动化等领域具有广泛且不断增长的应用 [1]。通常,在无线传感器网络中,每个节点可以连接到其邻居节点(即位于其无线电范围内的节点),并通过无线电传输发送或接收消息。节点能够从环境中感知不同的参数,并通常通过多跳连接将采集到的数据发送至中央处理中心。此外,
感知和处理过程中,每个节点将来自其他节点的传入消息转发到路由中的下一跳,从而使远程节点的数据被发送到基站。图1展示了一个示例无线传感器网络,其中节点0是基站。在图1中,虚线大圆表示每个节点的无线电范围,位于彼此无线电范围内的节点之间存在通信链路。
从远程节点收集数据的主要挑战之一是准确性和安全性[2]。
攻击者可以将恶意节点添加到现有的无线传感器网络(WSN)中,以出于各种目的提供错误的数据。例如,在军事行动中,可以在现场添加恶意节点,以提供有关资源位置的错误信息。针对无线传感器网络可以发起多种类型的攻击。例如,Hello泛洪攻击、黑洞攻击、分布式拒绝服务攻击、Sybil攻击、蠕洞攻击或拜占庭攻击都是攻击者可利用的一些手段[3]。攻击者还可以在网络区域内部署一些节点,并泛洪无用消息以增加通信流量或耗尽节点的电池电量(如Hello泛洪和DDoS)。部署的恶意节点可能发送虚假信息(拜占庭攻击)或丢弃接收到的数据包(黑洞攻击),从而破坏网络可靠性。
由于无线传感器网络(WSN)中的节点通常是电池供电的,因此保护网络免受攻击时应尽量减少能耗开销,使用复杂的安全机制可能会消耗大量电能,从而缩短网络寿命。本文提出了一种用于在无线传感器网络中识别恶意节点的局部化分布式算法。本文的主要贡献如下:
- 我们提出了一种新的算法,具有最小的消息传递开销,用于识别恶意节点。
- 我们在测试平台和仿真环境中评估了所提出的算法的性能。
本文其余部分的结构如下。第二节简要综述了现有的恶意节点检测方法。第二节介绍了网络模型,第四节给出了所提出的算法。第五节展示了所提出算法的性能评估结果。最后,第六节得出了结论。
II. 相关工作
通常,无线传感器网络被部署在恶劣的环境中,并期望在无人监管的情况下长期运行。因此,攻击者可以轻易地通过在网络区域内放置恶意节点来干扰无线传感器网络。
这些恶意节点可以传播关于路径和感知数据的错误信息,或泛洪无用的数据以增加网络流量并消耗节点的能量。在无线传感器网络中检测和隔离恶意节点已成为许多研究的主题,文献中已提出了不同的技术。罗等人[4]提出了一种将节点分类为可信和不可信组的防御机制。该系统使用的可信节点数量最少,因此不适用于使用大量随机分布节点的应用。在基于位置的方法中,每个节点利用接收信号强度计算其邻居的位置,并将结果与预定义的期望值进行比较。如果计算出的位置与期望位置之间的差异大于阈值,则该节点被标记为恶意节点[5,6]。使用信号强度作为计算基础可能导致错误估计和错误的恶意节点检测。
其他一些方法通过将恶意节点发送的数据与其从相同或其他节点收集的聚合值进行比较来识别恶意节点。这些方法使用了不同的技术,例如加权平均 [7,8]、回归分析 [9]、随机采样 [10]、双阈值比较 [11]、博弈论 [12] 和邻居节点投票 [13]。这些方法通常基于概率分析,这限制了准确性,并且由于所有节点都需要将其数据发送到单个节点,导致大量的消息传递。我们提出的方法利用局部邻域信息和消息签名来检测恶意节点,从而提高了准确性并减少了网络中传输的总消息量。
III. 网络模型与预备知识
无线传感器网络可以建模为一个图 $ G(V,E) $,其中 $ V $ 是节点集合,$ E $ 是链路集合。例如,在图1中,我们有 $ V = {0,1,2,\dots,10} $ 和 $ E = {(0,4),(0,9),\dots,(8,9)} $。如果图中的两个顶点之间存在链路,则它们互为邻居。我们假设网络中的每个节点都有唯一的ID,所有节点之间的通信链路都是双向的,网络至少是1-连通的 [14,15](所有节点之间至少存在一条路径),并且至少存在一个汇聚节点,用于将来自其他节点的数据传输到处理中心。我们进一步假设节点是静态的,节点的位置坐标不可获取,不会动态添加新节点,且每个节点都知道其邻居的ID。节点可以发现其通过广播Hello消息来发现邻居。我们假设网络最初没有恶意节点,因此节点知道其已验证邻居。
我们还假设节点通过感知环境生成长度为 $ d $ 的数据,并将感知到的数据发送到以基站为根的预先建立的生成树中的父节点。树中的每个节点都将收到的消息转发给其父节点,直到数据到达基站。在发送数据之前,每个节点会根据先前发送的数据为消息生成签名。因此,接收方可以通过对照发送方的数据历史来验证接收到的签名,从而确认发送方Id。
可以使用不同的密码学哈希函数为消息生成签名。在本文中,我们提出了一种基于一次一密(OTP)密码的方法,为每条消息生成签名。OTP的加密和解密函数如下:
$$
c \leftarrow E(m,k) = m \oplus k \tag{1}
$$
$$
D(c,k) = c \oplus k \tag{2}
$$
OTP 是一种高效的密码,能够以最少的计算量提供完美的保密性。然而,如果发送方和接收方对多条消息使用相同的私钥 $ k $,攻击者可以通过执行 $ c_i \oplus c_{i+1} $ 获得关于密码的一些信息,从而生成 $ m_i \oplus m_{i+1} $。在所提出的方法中,签名是利用历史数据和为每条消息单独生成的动态密钥来产生的。因此,接收方可以通过将接收到的签名与历史数据的签名进行比较来验证发送方。
IV. 所提出的算法
该分布式算法用于局部恶意节点识别(LIM),包含3条主要规则,并使用基于OTP密码的签名来跟踪消息的历史。该算法依赖于局部邻域信息。在向网络中添加一个恶意节点后,关于现有节点 $ x $ 可能出现以下三种情况之一:
- 一个之前未被 $ x $ 所知的 $ x $ 的新邻居。
- $ x $ 的一个新邻居具有与 $ x $ 相同的ID。
- $ x $ 有一个邻居,该邻居有一个与恶意节点相同ID的邻居。
图2展示了添加恶意节点后的可能情况。在此图中,ID为1的红色三角形是一个恶意节点。图2(a)显示了第一种情况,即该恶意节点的邻居(节点4和节点6)都没有ID为1的邻居。在这种情况下,已验证节点可直接将该恶意节点加入黑名单,并忽略其后续消息。
图2(b)展示了第二种情况,即恶意节点(节点1)的至少一个已验证邻居与该恶意节点具有相同的ID。在这种情况下,已验证节点可以发送一条消息,通知其他节点存在恶意节点。图2(c)展示了第三种情况,即恶意节点(节点5)的一个已验证邻居拥有与该恶意节点相同ID的已验证邻居。在这种情况下,节点5可以通过检查接收到的消息的签名来区分恶意节点和已验证节点的消息,该消息携带了关于先前消息历史的加密信息。由于恶意节点不了解已验证邻居之间先前交换的消息,因此无法生成正确的签名,接收方即可识别出恶意节点。我们使用基于一次性密码的密码算法和先前接收的消息生成每条消息的签名。所有节点都有一个初始密钥 $ k_0 $ 和签名 $ s_0 $,两者长度均与数据相同。每条消息的签名通过以下加密函数生成:
$$
s_{i+1} \leftarrow E(s_i,k_i) = k_i \oplus (s_i + m) \tag{3}
$$
$$
k_{i+1} = LFRS(k_i + m, m) \tag{4}
$$
其中 $ s_i $ 是消息(前一条消息)的签名,$ k_i $ 是用于生成 $ i^{th} $ 消息签名的密钥,$ m $ 是当前消息的数据。在加密前将 $ m $ 添加到 $ s_i $ 中,可生成一个基于历史数据的值。这样,恶意节点将无法为其消息生成正确的签名,因为它不了解之前的消息。为了避免对不同消息使用相同的密钥,我们通过对 $ k_i + m $ 上的线性反馈移位寄存器获取 $ m $ 个输出,为每条消息生成一个新的密钥。因此,生成的签名彼此完全独立。
所提出的算法的步骤已作为算法LIM呈现。在此算法中,节点 $ v $ 将邻居集合保存在 $ \Gamma_v $ 中,恶意节点的黑名单保存在 $ B_v $ 中,父节点ID保存在 $ p_v $ 中。此外,每个节点为每条输入($ I_v $)和输出($ O_v $)链路维护一个(密钥,签名)对。初始时,$ I_v $ 和 $ O_v $ 对所有链路具有相同的默认密钥和签名,但在发送每条消息后这些值会发生变化。当节点 $ v $ 接收到包含数据 $ d $ 和签名 $ s $ 的消息来自节点 $ u $ 时,如果 $ u $ 位于黑名单 $ B_v $ 中,则节点 $ v $ 忽略该消息(第1行)。如果 $ u $ 不是 $ v $ 的邻居,或者 $ u $ 的ID等于 $ v $,则 $ v $ 将 $ u $ 加入黑名单,并广播一条Malicious消息(第4–6行)。否则,节点 $ v $ 将接收到的签名与来自 $ u $ 的预期签名进行比较。如果两者匹配,节点 $ v $ 更新来自 $ u $ 的下一条消息的预期签名,并将数据转发给其父节点(第8–11行)。
算法LIM
Initially:
1: $ \Gamma_v \leftarrow \text{neighbors set}, B_v \leftarrow \emptyset, p_v \leftarrow \text{parent node}. $
2: $ \forall i \in \Gamma_v : I_v(i) \leftarrow O_v(i) \leftarrow (k_0, s_0) $
当节点 $ v $ 从 $ u $ 接收到数据 $ (d, s) $ 消息时:
3: 如果 $ u \in B_v $ 那么
4: 如果 $ v \notin \Gamma_v $ 或 $ v = u $ 那么
5: $ B_v \leftarrow B_v \cup {v} $
6: broadcast Malicious(u).
7: else
8: $ (k_u, s_u) \leftarrow I_v(u) $
9: if $ s_u = s $ then
10: $ I_v(u) \leftarrow (LFRS(k_u + d, d), k_u \oplus (s_u + d)) $
11: call ForwardData(d).
当节点 $ v $ 接收到 $ u $ 发送的恶意 $ (w) $ 消息时:
12: $ B_v \leftarrow B_v \cup {w} $
当节点 $ v $ 生成数据 $ d $ 时:
13: call ForwardData(d).
ForwardData过程 $ (d) $:
14: $ (k_p, s_p) \leftarrow O_v(p_v) $
15: 发送数据 $ (d, s_p) $ 到 $ p_v $。
16: $ O_v(p_v) \leftarrow (LFRS(k_p + d, d), k_p \oplus (s_p + d)) $
End. 当节点 $ v $ 接收到一条Malicious(w)消息时,它会将 $ w $ 添加到其本地黑名单中(第12行)。当节点 $ v $ 从环境中收集到一些信息后,会调用ForwardData过程,将数据发送给其父节点(第13行)。在ForwardData过程中,节点获取目标链路的出站签名,使用该签名发送数据,并为下一条消息更新签名和密钥(第14–16行)。
V. 性能评估
我们已在真实测试平台和仿真环境中实现了所提出的LIM算法。我们搭建了一个包含9个Memsic IRIS节点的测试平台,并添加了一个恶意节点以检测其他节点的行为。通过降低传输功率,我们将每个节点的无线电范围设置为约1.5米。我们使用一种简单的基于泛洪的分布式算法来构建生成树。为了保持生成的地图与实际环境的一致性,每个节点中硬编码了一个 $ (x,y) $ 坐标,节点在建立生成树期间将其坐标发送给汇聚节点。通过这种方式,Python程序能够绘制出网络的二维地图。图3显示了建立的网络以及程序生成的示意图。我们将恶意节点放置在三个不同的位置,以检验所有情况。实验结果表明,在三种情况下,已验证节点在接收到第一份数据后立即检测到了恶意节点。
我们使用Python中的Simpy、NetworkX和Matplot库对所提出的LIM算法进行了仿真,并生成了包含50到500个节点(以50为步长)的不同随机连通拓扑。对于每个节点数量,我们生成了10个随机样本。总共生成了100种拓扑结构。我们运行60秒的仿真,并设置节点每3秒向其父节点发送一条2字节的数据消息。我们在不同数量的恶意节点情况下运行仿真。对于每种拓扑结构,我们将恶意节点的数量设置为节点总数的10%到40%(以10%为步长)。我们还在每种拓扑结构下运行了不含任何恶意节点的仿真。图4显示了使用提出的局部化算法时网络的平均发送字节数。图4.a表明,使用所提出的算法时,增加恶意节点对发送字节数的影响非常有限。由于节点能够检测并忽略本地的恶意节点,恶意数据不会在网络中泛洪传播。我们还测量了未检测恶意节点情况下的平均发送字节数,即来自已验证节点和恶意节点的数据均被发送至基站的情况。图5显示,随着恶意节点数量的增加,平均发送字节数也随之上升,因为已验证节点会将恶意数据转发至基站。图6比较了在所有拓扑结构中使用与不使用所提出算法的平均发送字节数。在不检测恶意节点的情况下,500个节点的平均发送字节数约为95 kB,而使用LIM算法时该值低于80 kB。
VI. 结论
本文中,我们提出了一种新的局部化算法,用于识别无线传感器网络中的恶意节点。在所提出的算法中,现有的已验证节点能够检测恶意节点。利用局部邻域信息和基于历史数据生成的消息签名。在向无线传感器网络(WSN)添加一个恶意节点 $ x $ 后,如果 $ x $ 的邻居没有与其ID相同的已验证邻居,则立即识别出 $ x $。如果一个已验证节点检测到具有相同ID的节点,它将识别该恶意节点并向其邻居发出通知。最后,如果一个已验证节点接收到签名不正确的消息,则会将发送者标记为恶意节点。测试床实验和仿真结果表明,所提出的算法是一种可行且高效的恶意节点检测方法。

被折叠的 条评论
为什么被折叠?



