基于自动机和生命游戏的无线传感器网络广播认证方法
技术领域
本发明是WSN(Wireless Sensor Network,无线传感器网络)中广播认证机制的一种新型方法,属于物联网和无线传感器网络技术以及信息安全技术的交叉领域。
背景技术
WSN由部署在检测区域内的大量廉价微型传感器节点组成,通过无线通信的方式形成一个多跳的自组织的网络系统,其目的是协作的感知、采集和处理网络覆盖区域中感知对象的信息,并发送给观察者。
WSN由于广播认证的特殊性,例如拓扑结构的动态变化、触发时间的同步性、以及网络流量的不稳定性,使得这种网络需要定制一种有效的广播认证方法。
WSN按照网络的拓扑结构来分类,可以分成平面式结构和层簇式结构。平面式分布传感器网络由一个或一组计算能力强的基站和大量廉价的微型传感器节点所组成。网络中,采用延迟透露对称密钥的机制来实现非对称性,从而达到广播认证的目的。而当网络规模大节点数众多时,基站的覆盖范围受限,将很难实现向全网节点的广播。层簇式结构从一定程度上克服了平面式网络结构的缺陷,本发明提出一种基于DFA(Deterministic Finite Automation,确定有穷自动机)的分簇算法,将传感器网络划分为多个簇,每个簇在地理位置上位于不同的区域,簇中含有多个节点(簇与簇之间没有交集);另外,将按照某种算法(例如Leach算法,具体采用何种选举簇头的算法对本发明要保护的内容并无影响)选择出某个节点担任该簇的簇头,负责该簇与上一层簇头或者基站的信息交互等工作,具体的拓扑结构如图1所示。
CA(Cellular Automaton,元胞自动机)结构简单、易于在计算机上实现、有较强的表达复杂关系的能力,因此可用于对网络模型的研究,尤其是对网络整体动态特性的研究。
CA按其所在元胞空间的维数可简单分为一维CA、二维CA、三维CA、高维CA。其中,二维CA的著名模型有生命游戏模型。
考虑到WSN网络流量分布与因特网网络流量分布的不同,本发明提出了一种基于GoL(Game of Life,生命游戏)的网络模拟流量算法。宏观来看,因特网网络流量呈现泊松分布,而WSN由于节点间的无线链接的脆弱性、拓扑结构动态变化、以及无线信道的开放性等特征,其网络流量呈现复杂的形态。将时间离散化,某一时段网络的数据包流量映射为GoL中某个时刻处于工作状态的元胞数量。这样,能够模拟WSN中的一种或多种网络流量形态,并根据实际情况可以对流量模型进行实时的改变。
发明内容
技术问题:本发明的目的主要是针对层簇式结构的WSN,提出一种新型的基于自动机的无线传感器网络广播认证方法,根据实际节点分布管理、密钥发布时间确定、WSN网络流量模拟三方面情况来具体实现广播认证。
技术方案:
首先给出几个定义:
邻居节点:任意节点A一跳范围内的节点称之为其邻居节点,A可与其邻居节点直接通信,但并非A所有的邻居节点都和其在同一簇中;举例说明,如图1所示,节点1和节点3都是节点2的邻居节点,但是节点1和节点2位于簇1中,而节点3位于簇2。
非邻居节点:任意节点A除了邻居节点之外不能直接通信的节点称之为其非邻居节点,可能存在许多A的非邻居节点与A在同一簇中;举例说明,如图1所示,节点3与节点5位于同一簇内,但节点5不是节点3的邻居节点。
在本方法中,簇头节点之间并非直接通信,而是通过中继节点转发信息。举例说明,如图1所示,簇1中的簇头节点(节点1)需要和簇2中的簇头节点(节点4)进行通信,则需要通过中继节点(节点2)进行跳转。
改进的模n确定有穷自动机(模nDFA):有一个初态,n个终态,对于任意的0、1字符串(二进制数)能且只能到达其中一个终态;举例说明,如图2所示,为改进的模3DFA,终态qi表示该二进制数所对应的十进制数模3后余i,如,某二进制数(00101101)2经过改进模3DFA到达终态q0,表示该二进制数对应的十进制数(45)10模3结果为0;图3所示的模5DFA和图4所示的模7DFA和模3DFA同理,只有终态个数有变化。
完成代价:对于任意改进的模nDFA,从状态qi一步跳转到qj的权值为|i-j|/n(i可以大于等于或者小于j),而每个0、1字符串从初态qn到达终态qz的所有路径的权值和即为该字符串相对该DFA的完成代价;举例说明,如图2所示,字符串0011相对于改进模3DFA的完成代价为5/3。
元胞自动机(CA):模型空间被一定形式的网格分割为许多单元,即元胞(cell),每一元胞取有限的离散状态,遵循同样的作用规则,依据确定的局部规则作同步更新,散布在规则网格中的大量元胞通过简单的相互作用而构成动态系统的演化。CA按其所在元胞空间的维数可简单分为一维CA、二维CA、三维CA、高维CA。以Wolfram一维CA举例说明,如图5所示,每个元胞的状态(有0、1两种状态)由其本身和左、右邻居三者在上一个时刻的状态决定(即
其中
代表t+1时刻中间元胞的状态,
S
i-1 t,S
i+1 t分别代表t时刻中间元胞和左、右邻居的状态),按照规则90演化0011011010(随机值,默认为t=0时刻的状态),在t=1时刻状态为0111011001,在t=2时刻状态为0101011110,...,这样不断动态变化下去,构成整个系统的时间空间动态变化。
(注:规则90:以3个元胞为一个单位,每个元胞有0、1两种状态,所以3个元胞组成的一个单位有8种状态,分别是(111)、(110)、(101)、(100)、(011)、(010)、(001)、(000),其中,(110)表示t时刻左邻居状态为1,本身状态为1,右邻居状态为0,即S
i-1 t=1,
S
i+1 t=0,其余的7种状态含义类似。又由于111
2=7
10,110
2=6
10,101
2=5
10,100
2=4
10,011
2=3
10,010
2=2
10,001
2=1
10,000
2=0
10,且90=0*2
7+1*2
6+0*2
5+1*2
4+1*2
3+0*2
2+1*2
1+0*2
0,故规定在(110)、(100)、(011)、(001)这四种相邻状态下,下一时刻中间元胞的状态为1,其余4种相邻状态的下一时刻中间元胞的状态为0,即1=f(1,1,0),1=f(1,0,0),1=f(0,1,1),1=f(0,0,1),0=f(1,1,1),0=f(1,0,1),0=f(0,1,0),0=f(0,0,0)。
边界条件为周期边界规则,即将一个随机的0、1字符串首尾相接,左边界和右边界为新邻居,左边界变成右边界的右邻居,而右边界变成左边界的左邻居。则左边界、右边界、右边界的左邻居三者为一个单位共同决定下一时刻右边界的状态,同理右边界、左边界、左边界的右邻居三者为一个单位共同决定下一时刻左边界的状态。如图5所示,举例说明,t时刻的状态为0111011001,则左边界0为右边界1的右邻居,右边界1为左边界0的左邻居,在计算t+1时刻的状态时,可将其看作是1|0111011001|0,左边界t时刻为0,t+1时刻为0=f(1,0,1),右边界t时刻为1,t+1时刻为0=f(0,1,0)。)
S23/B3:即为Survive2,3/Birth3,以9个网格为一个单位,每个网格有“工作”、“休眠”两种状态。如果一个“工作”的网格周围的8个邻居网格中有2个或者3个“工作”,那么这个网格在下一个时刻的状态依然为“工作”,否则“休眠”;如果一个“休眠”的网格周围恰巧有3个“工作”的邻居网格,那这个网格在下一个时刻的状态变成“工作”,否则依然“休眠”。举例说明,如图6所示,图中有18张小图,每个小图左边代表t时刻9个相邻网格的状态,小图右边表示t+1时刻9个相邻网格的状态。t时刻,在小图(1)到小图(9)中,中间网格的状态为“工作”,但只有小图(3)和小图(4)符合S23的条件(即,小图(3)有两个“工作”邻居,小图(4)有三个“工作”邻居)所以,在t+1时刻,只有小图(2)和小图(3)的中间网格状态仍保持为“工作”,而小图(1)、(4)、(5)、(6)、(7)、(8)、(9)的中间网格状态变成“休眠”。t时刻,在小图(10)到小图(18)中,中间网格的状态为“休眠”,但只有小图(13)满足B3的条件(即,小图(13)有3个“工作”邻居)所以,在t+1时刻,只有小图(13)的中间网格状态变成“工作”,而小图(10)、(11)、(12)、(14)、(15)、(16)、(17)、(18)的中间网格状态仍保持“休眠”。
生命游戏:是二维元胞自动机的一种著名模型,依照规则S23/B3来实现元胞在“工作”、“休眠”两种状态间的转换。本发明中,将“工作”状态的元胞数作为WSN中数据包的流量。举例说明,如图7所示,t时刻黑色格子的数目为12,代表此时网络中的数据包的数目也为12。
本发明针对WSN,将广播认证分成三个部分,第一部分是普通节点的分簇方法,第二部分是网络数据包流量的模拟,第三部分是广播密钥发布时间的确定。在方法实现第一部分之前,需要对WSN进行初始化。
网络部署之前,每个节点存储一个身份标识(ID号)、一个能识别0、1字符串的DFA、能量值、簇头节点(某个节点的ID号,表示该节点属于哪一个簇)、节点类型标识(标识为簇头、中继、普通三者之一)。举例说明,如图1所示,簇2的簇头节点是节点4,节点4的前驱节点为节点2。每个节点也含有一个邻居列表,记录邻居节点的ID号、能量值、完成代价(见定义)、簇头号、响应时间等信息。
配置完以上信息之后,网络开始部署。
方法流程
该广播认证方法的完整过程将具体描述如下:
一基于DFA的分簇过程
将DFA作为每个节点的属性特征,即每个节点都含有某一种改进的模nDFA,用于识别和处理分簇建立过程中的接收信号。改进的模nDFA通过对接收信号的处理得到各自的完成代价,即当接收信号和模nDFA确定时,所对应的完成代价也确定。这样,综合完成代价、能量值等因素来确定所需要选择的节点的优先级,选择优先级高的节点作为所需要的节点。
基站的邻居节点建立过程
步骤1)基站节点广播发送“邻居建立”消息,即包含[消息类型,源节点ID,一串随机的0、1字符串]的数据包;
步骤2)若接收节点尚未有簇头节点,则立即反馈应答消息,即[消息类型,源节点ID,本节点ID,能量信息,完成代价],并将基站节点作为簇头节点记录下来;
步骤3)基站节点将所有接收节点信息存入邻居节点列表中,并以完成代价升序排列;
基站的簇头选举过程
步骤4)基站节点从上向下遍历邻居列表,选择响应时间小于时间阈值TT、能量值大于能量阈值QT(簇头数量可通过调整TT和QT来确定)的节点为簇头节点;
步骤5)基站节点广播发送“簇建立消息”,按照[消息类型,源节点ID,选为簇头节点ID]的格式进行;
步骤6)接收节点收到“簇建立消息”后,若被选举为簇头节点,则将类型标识改为“簇头”,簇头节点ID改为自己的ID;
簇头的邻居节点建立过程
步骤7)任一簇头节点(不妨称为节点i)广播发送“邻居建立”消息,即包含[消息类型,源节点ID,一串随机的0、1字符串]的数据包;
步骤8)若接收节点尚未有簇头节点,则立即反馈应答消息,即[消息类型,源节点ID,本节点ID,能量信息,完成代价],并将节点i作为簇头节点记录下来;
步骤9)节点i将所有接收节点信息存入邻居节点列表中,并以完成代价升序排列;
簇头的中继节点的选举过程
步骤10)簇头节点i从上向下遍历邻居列表,选择类型标识为“普通”、响应时间小于时间阈值TTi、能量值大于能量阈值QTi(中继节点的数量可通过调整TTi和QTi来确定)的节点为中继节点;
步骤11)节点i广播发送“中继节点选举消息”,按照[消息类型,源节点ID,选为中继节点ID]的格式进行;
步骤12)接收节点收到“中继节点选举消息”后,若被选举为中继节点,则将类型标识改为“中继”;
中继的邻居节点建立过程
步骤13)任一中继节点(不妨称为节点j)广播发送“邻居建立”消息,即包含[消息类型,源节点ID,一串随机的0、1字符串]的数据包;
步骤14)若接收节点尚未有簇头节点,则立即反馈应答消息,即[消息类型,源节点ID,本节点ID,能量信息,完成代价];
步骤15)中继节点将所有接收节点信息存入邻居节点列表中,并以完成代价升序排列;
中继的后继簇头节点选举过程
步骤16)中继节点j从上向下遍历邻居列表,选择类型标识为“普通”、响应时间小于时间阈值TTi、能量值大于能量阈值QTi(中继节点的数量可通过调整TTi和QTi来确定)的节点为簇头节点;
步骤17)节点j广播发送“簇头节点选举”消息,按照[消息类型,源节点ID,选为簇头节点ID]的格式进行;
步骤18)接收节点收到“簇头节点选举消息”后,若被选举为簇头节点,则将类型标识改为“簇头”,簇头节点ID改为自己的ID;
新节点的加入过程
步骤19)任一新节点(不妨称为节点k)广播发送“邻居建立”消息,即包含[消息类型,源节点ID,一串随机的0、1字符串]的数据包;
步骤20)接收节点立即反馈应答消息,即[消息类型,源节点ID,本节点ID,能量信息,完成代价,节点类型];
步骤21)节点k将所有接收节点信息存入邻居节点列表中,将“簇头”节点优先排在前面,再以完成代价升序排列;
步骤22)节点k从上向下遍历邻居列表,若没有邻居则此节点失效,加入失败,结束;
步骤23)若邻居节点中有簇头节点,则向簇头发送“请求加入”消息,按照[消息类型,簇头节点ID,本节点ID]的格式进行;
步骤24)簇头节点收到请求消息后,发送“新邻居更新”消息,即包含[消息类型,源节点ID,新节点ID,一串随机的0、1字符串]的数据包;
步骤25)节点k立即反馈应答消息,即[消息类型,源节点ID,本节点ID,能量信息,完成代价],并将簇头ID记录下来;
步骤26)簇头节点按照完成代价由小到大的顺序,将节点k的信息插入邻居节点列表中;
步骤27)若邻居节点全部为普通节点,节点k从上向下遍历邻居列表,选择响应时间小于时间阈值TTi、能量值大于能量阈值QTi的节点(不妨称为节点p)为中继节点,向节点p发送“中继节点选举”消息,按照[消息类型,源节点ID,选为中继节点ID]的格式进行;
步骤28)节点p收到被选举消息后,发送“新邻居更新”消息,即包含[消息类型,源节点ID,新节点ID,一串随机的0、1字符串]的数据包;
步骤29)节点k立即反馈应答消息,即[消息类型,源节点ID,本节点ID,能量信息,完成代价],并将中继ID记录下来记为簇头节点;
二基于生命游戏的WSN数据流量的模拟过程
采用L*L(表示整个平面横向网格有L个,纵向网格也有L个)的正方形网格的二维模型,每个网格为一个元胞,“工作”状态的元胞数即为网络流量数。其中,L值由网络的最大流量数dgmax确定,即L*L≥dgmax。
将一维的网络流量映射到二维的网格中,通过对网格生命状态的模拟近似得到网络流量的分布。每个离散时刻点(例如,时刻点为q)所有“工作”状态的网格数即为对应时间段(对应的时间段为(q-1)*tdg到q*tdg,其中tdg为一段固定的时长)内基站节点需要广播的数据包个数。
网络启动时流量的模拟过程:
步骤30)置L*L个网格的初始状态为0(即表示“休眠”状态),不妨设初始时刻时间为0,即0*tdg;
步骤31)随机选择rdm(rdm为小于2*L的随机值,这样符合网络刚刚启动时数据流量较少的情况)个网格,将其状态置为1(即表示“工作”状态),此时刻记为1*tdg,表示0*tdg到1*tdg时段内数据包流量为rdm;
步骤32)所有的网格会根据生命游戏的S23/B3规则,随着tdg前的系数q(q=1,2,3,…)的递增不断地变换其状态,对应于(q-1)*tdg到q*tdg时段内数据包流量不断变化;
步骤33)网络启动过程中(启动过程表示从1*tdg到20*tdg时间段),流量是一个宏观的递增过程,因此,当“工作”状态网格数目小于rdm/2时,需要增加rdn(rdn为小于rdm的随机数)个“工作”网格,即再次随机选择rdn个网格,将其状态置为1;
网络稳定时流量的模拟过程:
步骤34)网络稳定过程中(稳定过程表示从21*tdg往后的时间段),所有的网格会根据生命游戏的S23/B3规则,随着tdg前的系数q的递增不断地变换其状态,对应于(q-1)*tdg到q*tdg时段内数据包流量不断变化;
步骤35)在网络稳定过程中,若出现数据流量长时间(长时间表示tdg递增了30次,即表示整个网格的状态连续变换了30次)低于阈值numsmall(numsmall=L)的情况,则需要增加rdk(rdk为小于L的随机数)个“工作”网格,即随机选择rdk个网格,将其状态置为1;
三Hash密钥链的构造、基于网络流量的发布和验证过程
假设在(q-1)*tdg到q*tdg时间段内的数据包总数目为dgq,且以速度dgq/tdg匀速到达基站。即表示在(q-1)*tdg到q*tdg时间段内,dgq个数据包每个以tdg/dgq的时间间隔依次到达基站。
将一个tdg长的时间段可分为dgq个小时段,每个小时段长为tdg/dgq,每个小时段用I表示(例如第i个小时段记为Ii)。每一小时段拥有一对对称密钥Ki,用于加密和解密需要广播的内容。并且,在第Ii小时段内广播第i个广播密文和公布第i-d(d表示密钥发布的延迟尺寸)个密钥Ki-d,显然,发布广播密钥较发布密文的时间差(d*tdg/dgq)要长于基站节点与最远节点之间的一次包交换时间。
步骤36)基站生成一个随机数R,并利用伪随机函数H,计算H(R),H2(R),…,Hn(R)分别作为n(n>>dgq)次会话的密钥存放在密钥池中,将Hn(R)作为密钥头K0,并规定第i小时段的密钥Ki=Hn-i(R)(其中,i=1,2,…,n,且H0(R)=R);
步骤37)基站广播初始参数消息,即[消息类型,源节点ID,当前基站时钟TB,开始时间T1,密钥头K0,时间间隔tdg/dgq,密钥发布的延迟尺寸d,最大时钟差异δmax];
步骤38)每级簇头节点和中继节点转发基站的广播初始参数消息;
步骤39)各节点收到后,将各自的时钟与基站节点的时钟同步,并且记录下T1、K0、tdg/dgq、d、δmax等信息;
步骤40)基站节点在第i个小时段内,广播第i个数据包密文和发布第i-d个密钥Ki-d;
步骤41)接收节点收到第i个tdg/dgq的数据包密文后,判断密钥Ki是否已经发布过,若已经发布则丢弃此包;若尚未发布则先验证Ki-d的真假,若为真则缓存此包并且解密第i-d时段密文数据包,否则丢弃;
步骤42)(q-1)*t
dg到q*t
dg时间段内的数据包广播完成后,hash密钥链从
用到
则从q*t
d往后的时间段的数据包使用从
开始往后的密钥,以此类推直到密钥链用完。
有益效果:本发明提出了基于自动机和生命游戏的无线传感器网络广播认证方法,该方法具有如下优点:
(1)通过利用基于DFA的分簇算法一定程度上克服了平面式网络结构的缺陷,扩大了基站节点的通信范围,并且实现了网络中节点能量的合理分配;
(2)通过利用基于生命游戏的模拟流量算法,一定程度上能够模拟WSN中的一种或多种网络流量形态,并可以根据实际情况对流量模型进行实时的改变。
附图说明
图1层簇式WSN网络拓扑结构图,
图2改进的模3DFA,
图3改进的模5DFA,
图4改进的模7DFA,
图5沃尔夫勒姆(Wolfram)一维CA,
图6S23/B3规则,
图7生命游戏,
图8WSN流量模拟启动过程,
图9WSN流量模拟稳定过程。
具体实施方式
以下将以图1到图9为例,通过一个具体的例子来进一步详细说明本发明的技术方案和方法流程。
首先完成网络的初始化,即分配给每个节点唯一的ID、某个模n的DFA、并且在节点中存储以下内容:能量值、簇头节点、节点类型标识、邻居列表[邻居节点ID、能量值、完成代价、簇头节点、响应时间]。以图1中的节点1为例,节点1的ID为ID1,存放着一个模3的DFA,能量值为2J,簇头节点为基站的ID(ID0),节点类型为“簇头”,邻居列表中存在四项内容,代表它有四个邻居,即分别为节点2、节点7、节点8、节点9,其中邻居节点2的信息为:ID2,1.5J,8/5,0.2ms。
一基于DFA的分簇过程
基站的邻居节点建立过程
以基站节点、节点1、节点8、节点10、节点11为例说明。
步骤1)基站节点广播发送“邻居建立”消息Mbn=[“邻居建立”,ID0,00110110],其中“邻居建立”是消息类型,ID0是源节点ID,00110110是一串随机的0、1字符串;
步骤2)节点1收到基站发来的Mbn消息,首先检查自己的的簇头节点,为空,则立即反馈应答消息Mr=[“邻居应答”,ID0,ID1,2J,7/3],其中“邻居应答”是消息类型,ID0是源节点ID,ID1是本节点ID,2J是能量信息,7/3是完成代价(节点1中的DFA是模3DFA),节点8反馈消息为Mr=[“邻居应答”,ID0,ID8,0.5J,19/7](节点8中的DFA是模7DFA),节点10反馈消息为Mr=[“邻居应答”,ID0,ID10,2J,3](节点10中的DFA是模5DFA),节点11反馈消息为Mr=[“邻居应答”,ID0,ID11,1.2J,7/3](节点11中的DFA是模3DFA);
步骤3)假设节点1、8、10、11的响应时间分别为:0.2ms,0.3ms,0.4ms,1.0ms,基站收到反馈的应答消息后,将应答消息和响应时间一并存入邻居节点列表中,顺序为节点1、节点11、节点8、节点10(先按照完成代价升序排列,完成代价相同则按照响应时间升序排列,响应时间相同则按照能量值升序排列,能量值相同则按照ID号排列);
基站的簇头选举过程
以基站节点、节点1、节点8、节点10、节点11为例说明。
步骤4)基站节点从上向下遍历邻居列表,选择响应时间小于时间阈值TT=0.5ms、能量值大于能量阈值QT=1J的节点为簇头节点,符合条件的只有节点1和节点10;
步骤5)基站节点广播发送“簇建立”消息Mbc=[“簇建立”,ID0,ID1、ID10],其中“簇建立”为消息类型,ID0为源节点ID,ID1、ID10为被选为簇头节点ID;
步骤6)节点1、8、10、11收到“簇建立消息”后,节点1和节点10将其类型标识改为“簇头”,簇头节点改为自己的ID;
簇头的邻居节点建立过程
以节点1、节点2、节点7、节点8、节点9为例说明。
步骤7)节点1(簇头)广播发送“邻居建立”消息Mbn=[“邻居建立”,ID1,10011110],其中“邻居建立”是消息类型,ID1是源节点ID,10011110是一串随机的0、1字符串;
步骤8)节点2簇头为空,将ID1作为“簇头节点”,并反馈消息为Mr=[“邻居应答”,ID1,ID2,1.5J,15/7](节点2中的DFA是模7DFA),节点7簇头为空,将ID1作为“簇头节点”,并反馈消息为Mr=[“邻居应答”,ID1,ID7,1.2J,8/5](节点7中的DFA是模5DFA),节点8簇头为空,将ID1作为“簇头节点”,并反馈消息为Mr=[“邻居应答”,ID1,IDg,0.5J,3](节点8中的DFA是模3DFA),节点9“簇头节点”是ID10,所以不反馈应答消息;
步骤9)假设节点2、7、8的响应时间分别为:0.3ms,0.2ms,0.1ms,节点1收到反馈的应答消息后,将应答消息和响应时间一并存入邻居节点列表中,顺序为节点7、节点2、节点8(先按照完成代价升序排列,完成代价相同则按照响应时间升序排列,响应时间相同则按照能量值升序排列,能量值相同则按照ID号排列);
簇头的中继节点的选举过程
以节点1、节点2、节点7、节点8为例说明。
步骤10)节点1(簇头)从上向下遍历邻居列表,选择类型标识为“普通”、响应时间小于时间阈值TTi=0.5ms、能量值大于能量阈值QTi=1J的节点为中继节点,符合条件的只有节点2和节点7;
步骤11)节点1广播发送“中继节点选举”消息Mbm=[“中继节点选举”,ID1,ID2、ID7],其中“中继节点选举”为消息类型,ID1为源节点ID,ID2、ID7为被选为中继节点ID;
步骤12)节点2、7、8节点收到“中继节点选举”消息后,节点2和节点7将其类型标识改为“中继”;
中继的邻居节点建立过程
以节点2、节点3、节点4为例说明。
步骤13)节点2(中继节点)广播发送“邻居建立”消息Mbn=[“邻居建立”,ID2,11001000],其中“邻居建立”是消息类型,ID2是源节点ID,11001000是一串随机的0、1字符串;
步骤14)节点3簇头为空,立即反馈消息为Mr=[“邻居应答”,ID2,ID3,0.5J,11/5](节点3中的DFA是模5DFA),节点4簇头为空,立即反馈消息为Mr=[“邻居应答”,ID2,ID4,1.2J,7/3](节点4中的DFA是模3DFA);
步骤15)假设节点3、4的响应时间分别为:0.3ms,0.2ms,节点2收到反馈的应答消息后,将应答消息和响应时间一并存入邻居节点列表中,顺序为节点3、节点4(先按照完成代价升序排列,完成代价相同则按照响应时间升序排列,响应时间相同则按照能量值升序排列,能量值相同则按照ID号排列);
中继的后继簇头节点选举过程
以节点2、节点3、节点4为例说明。
步骤16)节点2(中继节点)从上向下遍历邻居列表,选择类型标识为“普通”、响应时间小于时间阈值TTi=0.5ms、能量值大于能量阈值QTi=1J的节点为簇头节点,符合条件的只有节点4;
步骤17)节点2广播发送“簇头节点选举”消息Mbc=[“簇头节点选举”,ID2,ID4],其中“簇头节点选举”为消息类型,ID2为源节点ID,ID4为被选为簇头节点ID;
步骤18)节点3、4节点收到“簇头节点选举”消息后,节点4将其类型标识改为“簇头”,“簇头节点”改为ID4;
新节点的加入过程
以节点6、节点12、节点13、节点14、节点15为例说明(节点13、14、15为新节点)。
步骤19)新节点13广播发送“邻居建立”消息Mbn=[“邻居建立”,ID13,01111100],其中“邻居建立”是消息类型,ID13是源节点ID,01111100是一串随机的0、1字符串;
新节点14广播发送“邻居建立”消息Mbn=[“邻居建立”,ID14,00111111];
新节点15广播发送“邻居建立”消息Mbn=[“邻居建立”,ID15,10011101];
步骤20)节点6立即反馈应答消息Mr=[“邻居应答”,ID13,ID6,1.5J,3,“簇头”](节点6中的DFA是模5DFA),节点12立即反馈应答消息Mr=[“邻居应答”,ID13,ID12,2.5J,10/3,“普通”](节点12中的DFA是模3DFA);
节点12立即反馈应答消息Mr=[“邻居应答”,ID14,ID12,2.5J,3,“普通”](节点12中的DFA是模3DFA);
没有节点反馈应答消息给节点15;
步骤21)节点13将邻居节点信息存入邻居节点列表中,节点6的信息排在节点12的前面(簇头节点优先排在前面,再以完成代价升序排列);
节点14将邻居节点信息存入邻居节点列表中(只有一个邻居节点,所以不用排序);
节点15邻居节点列表中邻居节点信息为空;
步骤22)节点15从上向下遍历邻居列表,没有邻居,节点15失效,加入失败,结束;
步骤23)节点13从上向下遍历邻居列表,发现节点6为簇头节点,则向节点6发送“请求加入”消息Mjc=[“请求加入”,ID6,ID13],其中“请求加入”为消息类型,ID6为簇头节点ID,ID13为本节点ID,再转到步骤24);
步骤24)节点6(簇头)收到请求消息后,发送“新邻居更新”消息Mnu=[“新邻居更新”,ID6,ID13,10000001],其中“新邻居更新”为消息类型,ID6为源节点ID,ID13为新节点ID,10000001为一串随机的0、1字符串;
步骤25)节点13立即反馈应答消息Mr=[“邻居应答”,ID13,ID6,2.0J,8/7],其中“邻居应答”为消息类型,ID13为源节点ID,ID6为本节点ID,2.0J为能量信息,8/7为完成代价](节点13中的DFA是模7DFA),并且将簇头节点改为ID6;
步骤26)节点6按照完成代价由小到大的顺序,将新节点13的信息插入邻居节点列表中,节点13加入成功,结束;
步骤27)节点14从上向下遍历邻居列表,发现只有一个邻居节点且为普通节点,向节点12发送“中继节点选举”消息Mbm=[“中继节点选举”,ID14,ID12],其中“中继节点选举”为消息类型,ID14为源节点ID,ID12为被选为中继节点ID;
步骤28)节点12收到被选举消息后,发送“新邻居更新”消息Mnu=[“新邻居更新”,ID12,ID14,00110110],其中,“新邻居更新”为消息类型,ID12为源节点ID,ID14为新节点ID,00110110一串随机的0、1字符串;
步骤29)节点14立即反馈应答消息Mr=[“邻居应答”,ID12,ID14,2.5J,7/3],其中“邻居应答”为消息类型,ID12为源节点ID,ID14为本节点ID,2.5J为能量信息,7/3为完成代价,并将中继ID记录下来记为簇头节点;
二基于生命游戏的WSN数据流量的模拟过程
简单起见,取网络的最大流量数为120,且取L值为12,满足12*12≥120。即采用12*12(表示整个平面横向网格有12个,纵向网格也有12个)的正方形网格的二维模型。tdg为固定时长,不妨取为1min。
网络启动时流量的模拟过程:
步骤30)置12*12个网格的初始状态为0(即表示“休眠”状态),不妨设初始时刻时间为0,用0*tdg表示;
步骤31)随机选择rdm(rdm为小于2*12的随机值,不妨取22)个网格,将其状态置为1(即表示“工作”状态),此时刻记为1*tdg,如图8中1*tdg的小图所示,表示0*tdg到1*tdg时段内数据包流量为22;
步骤32)所有的网格会根据生命游戏的S23/B3规则,随着tdg前的系数q(q=0,1,2,3,…)的递增不断地变换其状态,如图8所示,小图1*tdg中有22个“工作”元胞,小图2*tdg中有20个“工作”元胞,表示从1*tdg到2*tdg时段内数据包流量减少了2个;
步骤33)从1*tdg到20*tdg时间段(启动过程),流量是一个宏观的递增过程。图8中20*tdg小图中的“工作”状态网格数目为10(表示19*tdg到20*tdg时段内数据包流量为10)小于阈值rdm/2=11,需要增加rdn(rdn为小于rdm的随机数,不妨取20)个“工作”网格,如图8中21*tdg的小图所示,增加了20个“工作”状态的网格,即“工作”网格变成了10+20=30个(表示20*tdg到21*tdg时段内数据包流量为30);
网络稳定时流量的模拟过程:
步骤34)从21*tdg往后的时间段(稳定过程),所有的网格会根据生命游戏的S23/B3规则,随着tdg前的系数q的递增不断地变换其状态,如图9所示,小图50*tdg中有37个“工作”元胞,小图51*tdg中有50个“工作”元胞,小图52*tdg中有34个“工作”元胞,表示从50*tdg到51*tdg时段内数据包流量增加了13个,从51*tdg到52*tdg时段内数据包流量减少了16个;
步骤35)在网络稳定过程中,出现数据流量长时间(长时间表示tdg递增了30次)低于阈值numsmall(numsmall=L,本例中取12)的情况,如图9中231*tdg到261*tdg的小图所示,此30*tdg时段中,“工作”网格数目一直低于12(表示231*tdg到261*tdg时段内数据包流量一直低于12)。则需要增加rdk(rdk为小于L的随机数,不妨取11)个“工作”网格,如图9中到262*tdg的小图所示,增加了11个“工作”状态的网格,即“工作”网格变成了8+11=19个(表示261*tdg到262*tdg时段内数据包流量为19);
三Hash密钥链的构造、基于网络流量的发布和验证过程
以50*tdg到51*tdg时间段为例说明,时段长1min,假设在此时间段内,数据包总数目为50,则数据包以50/1(个/min)的速度匀速到达基站。即表示在50*tdg到51*tdg时间段内,50个数据包每个以1/50min=1.25s的时间间隔依次到达基站。
一个1min长的时间段可分为50个小时段,每个小时段长为1.25s,每个小时段用I表示(例如第i个小时段记为Ii)。每一小时段拥有一对对称密钥Ki,用于加密和解密需要广播的内容。并且,在第Ii小时段内广播第i个广播密文和公布第i-2(2表示密钥发布的延迟尺寸)个密钥Ki-2,显然广播密钥较密文发布的延迟时间(2*1.25s)要长于基站节点与最远节点之间的一次包交换时间。
步骤36)基站生成一个随机数R,并利用伪随机函数H,计算H(R),H2(R),…,H1000(R)分别作为1000(1000>>50)次会话的密钥存放在密钥池中,将H1000(R)作为密钥头K0,并规定第i时段的密钥Ki=H1000-i(R)(其中,i=1,2,…,1000,且H0(R)=R);
步骤37)基站广播初始参数消息Mip=[“初始参数配置”,ID0,12:00:00’00”,12:01:00’00”,00100011...11001110,1.25s,2,20ms],其中“初始参数配置”为消息类型,ID0为源节点ID,12:00:00’00”为当前基站时钟时间TB,12:01:00’00”为开始时间T1,00100011...11001110为密钥头K0,1.25s为时间间隔tdg/dgq,2为密钥发布的延迟尺寸d,20ms为最大时钟差异δmax;
步骤38)每级簇头节点和中继节点转发基站的广播初始参数消息;
步骤39)各节点收到后,将各自的时钟与基站节点的时钟同步,并且记录下T1=12:01:00’00”、K0=00100011...11001110、tdg/dgq=1.25ms、d=2、δmax=20ms等信息;
步骤40)基站节点在第i个1.25s内,广播第i个数据包密文和发布第i-2个密钥Ki-d;
步骤41)接收节点收到第i个1.25s内的数据包密文后,判断密钥Ki是否已经发布过,若已经发布则丢弃此包;若尚未发布则先验证Ki-2的真假,若为真则缓存此包并且解密第i-2时段密文数据包,否则丢弃;
步骤42)50*t
dg到51*t
dg时间段内的数据包共有50个,因此50个数据包广播完成后,hash密钥链已经使用了
个密钥,则从51*t
dg往后的时间段的数据包使用从
开始往后的密钥,以此类推直到密钥链用完。