发明名称 无线传感器网络中高效节能的链路安全方法
摘要 无线传感器网络中高效节能的链路安全方法属于无线传感器网络和信息安全交叉技术领域。该发明创建了邻居列表,邻居列表存储了链路安全方法所用到的各项参数。该发明采用了将数据帧首部的序列号字段和帧校验序列字段与网络分组部分一块进行加密的方法,能够防止恶意节点对无线传感器网络数据的窃听和流量分析,以及对抗恶意节点发起的重放和拒绝服务等主动攻击。该发明在不改变IEEE 802.15.4通用数据帧结构的情况下实施链路加密,做到简单易用。整个方案包括邻居列表建立、数据转发和邻居列表维护三个阶段。由于邻居列表的精巧设计,三个阶段都保证了传感器节点在计算、通信和存储方面的开销很小,因此该发明非常适合于资源有限的无线传感器网络。
申请公布号 CN101820619B 申请公布日期 2012.10.24
申请号 CN201010034175.6 申请日期 2010.01.15
申请人 北京工业大学 发明人 何泾沙;张兴;韦潜;孙旭光
分类号 H04W12/02(2009.01)I;H04W12/04(2009.01)I;H04W40/24(2009.01)I 主分类号 H04W12/02(2009.01)I
代理机构 北京思海天达知识产权代理有限公司 11203 代理人 刘萍
主权项 1.无线传感器网络中高效节能的链路安全方法,其特征在于,包括邻居列表建立、数据转发和邻居列表维护三个阶段;在无线传感器网络部署完成之后,就进入到邻居列表建立阶段;在网络运行期间,如果有新节点的加入,它也要与周围的旧节点建立邻居关系;如果有一些节点被撤销,那么它们的邻居节点将从邻居列表中删除相关的数据;1)邻居列表建立阶段邻居列表建立阶段包括邻居节点之间会话密钥的建立和序列号的协商;各节点通过网络初始化时的路由请求信息建立邻居关系;当一个节点第一次接收到路由请求信息,则将源节点的ID写入到邻居列表的第一行,同时也广播一条路由请求信息;如果又收到其它节点广播的路由请求信息,则只需将新信息的源ID写入到邻居列表即可;根据这些路由请求信息,一个节点要记录它所有邻居的初始序列号,用于计算会话密钥和共享的序列号;设定BS为收集网络节点感应信息的基站;网络部署后,首先由基站BS开始广播路由请求信息,信息类型用requet表示;设定D和G为任意相邻节点,以下同;节点D和G在接收到路由请求信息后,也要分别广播一条路由请求信息;以D和G这两个节点为例来说明无线传感器网络中相邻节点之间会话密钥和序列号的协商过程,其余的相邻节点之间会话密钥和序列号的协商过程与D和G的协商过程是一致的:D→*:request||ID<sub>d</sub>||SN<sub>d</sub>||energy<sub>d</sub>||C(K<sub>d</sub>,[ID<sub>d</sub>||SN<sub>d</sub>||energy<sub>d</sub>])G→*:request||ID<sub>g</sub>||SN<sub>g</sub>||energy<sub>g</sub>||C(k<sub>g</sub>,[ID<sub>g</sub>||SN<sub>g</sub>||energy<sub>g</sub>])<maths num="0001"><![CDATA[<math><mrow><msub><mi>K</mi><mi>dg</mi></msub><mo>=</mo><mi>f</mi><mrow><mo>(</mo><msub><mi>K</mi><mi>d</mi></msub><mo>&CirclePlus;</mo><msub><mi>K</mi><mi>g</mi></msub><mo>,</mo><msub><mi>SN</mi><mi>d</mi></msub><mo>&CirclePlus;</mo><msub><mi>SN</mi><mi>g</mi></msub><mo>)</mo></mrow></mrow></math>]]></maths>SN<sub>dg</sub>=f(SN<sub>d</sub>,SN<sub>g</sub>)*表示向所有邻居广播;||为连接符;SN<sub>d</sub>和SN<sub>g</sub>分别为节点D和G的初始序列号,一个节点必须要记录它所有邻居的初始序列号;SN<sub>dg</sub>为节点D和G之间共享的序列号;energy为节点当前的能量值;k<sub>d</sub>和k<sub>g</sub>为节点D和G的个体密钥,而K<sub>dg</sub>为两个相邻节点D和G之间共享的会话密钥;C(K<sub>d</sub>,[ID<sub>d</sub>||SN<sub>d</sub>||energy<sub>d</sub>])表示用节点D的个体密钥K<sub>d</sub>计算D所发送信息的验证码,用于验证此广播信息的完整性;f()是伪随机函数;<img file="FSB00000862597500012.GIF" wi="56" he="44" />为异或运算;K<sub>I</sub>是网络初始化密钥,由网络部署者随机生成;f()和K<sub>I</sub>在网络部署之前被预先分配给每个节点,一个节点通过f()和K<sub>I</sub>能够计算网络内其它任意节点的个体密钥;在利用发送节点的个体密钥验证接收到的路由请求信息无误后,相邻节点D和G就能获得相同的会话密钥和序列号,<img file="FSB00000862597500021.GIF" wi="705" he="90" />SN<sub>dg</sub>=f(SN<sub>d</sub>,SN<sub>g</sub>);一个节点将它计算得到的会话密钥和序列号按照对应的邻居节点ID存入邻居列表,邻居列表由邻居节点ID、会话密钥、密钥生命周期、序列号和能量五个字段组成;邻居列表中节点的能量值通过路由请求信息中energy字段的值获得;2)数据转发阶段邻居列表建成后,中间节点就要根据邻居列表来转发数据;监视区域的节点在得到兴趣信息后,要汇聚这些信息到基站BS;节点G和D,D和A分别为相邻节点,以它们为例来说明数据转发过程;当节点G获得了兴趣信息,根据邻居列表,它要传送信息给基站必须要通过节点D;D在得到G传送的信息后,根据邻居列表和路由表选择节点D的父节点A作为下一跳;以此类推,直至将信息传送到基站BS;节点D将源节点G发送来的数据分组转发给节点A的过程如下:(1)G→D:E(K<sub>dg</sub>,[SN<sub>dg</sub>||NPDU||FCS<sub>1</sub>])(2)D→G:E(K<sub>dg</sub>,[(SN<sub>dg</sub>+n)||FCS<sub>2</sub>])(3)D→A:E(K<sub>da</sub>,[SN<sub>da</sub>||NPDU||FCS<sub>3</sub>])(4)A→D:E(K<sub>da</sub>,[(SN<sub>da</sub>+n)||FCS<sub>4</sub>])步骤(1)中,节点G用它和节点D之间共享的会话密钥K<sub>dg</sub>加密兴趣信息,其中SN<sub>dg</sub>是它们之间共享的序列号;||为连接符;NPDU为网络分组,即数据帧的数据;FCS<sub>1</sub>为该数据帧的校验序列;步骤(2)中,节点D首先判断接收到的数据帧首部的源ID是否在自己的邻居列表当中,若ID不在表中则直接丢弃此数据帧;看到节点G的ID在邻居列表之中,D就用它和G共享的会话密钥K<sub>dg</sub>解密此数据帧,得到此帧中包含的SN′<sub>dg</sub>、NPDU和FCS′<sub>1</sub>;用得到的SN′<sub>dg</sub>与邻居列表中的SN<sub>dg</sub>相比较,如果不同则证明这是恶意节点利用合法节点ID发起的伪造攻击,要丢弃此数据帧;如果两个SN相同,则要重新计算此数据帧的校验序列FCS<sub>1</sub>;若FCS<sub>1</sub>与FCS′<sub>1</sub>不同,则证明这是恶意节点在已知合法节点SN的情况下发起的信息篡改攻击,要丢弃此数据帧;若两个FCS也相同,则要判断NPDU首部的目的ID和源ID是否在节点D在路由表中,若在则要根据路由表中对应的下一跳地址,查询邻居节点列表,找出能量最多的节点作为新数据帧的目的节点;然后,D修改邻居列表中对应上一跳节点G的序列号SN<sub>dg</sub>为SN<sub>dg</sub>+n,再向节点G发送确认帧,即E(K<sub>dg</sub>,[(SN<sub>dg</sub>+n)||FCS<sub>2</sub>]),n为自然数;FCS<sub>2</sub>为通过计算得到的该确认帧的校验序列;步骤(3)中,节点D要找出该分组的下一跳节点A所对应的会话密钥K<sub>da</sub>和序列号SN<sub>da</sub>,并计算新数据帧的校验序列,用K<sub>da</sub>将SN<sub>da</sub>、NPDU、FCS<sub>3</sub>一块加密,然后转发出去,即E(K<sub>da</sub>,[SN<sub>da</sub>||NPDU||FCS<sub>3</sub>]),FCS<sub>3</sub>为该帧的校验序列;步骤(4)中,在接收到下一跳节点A发送的确认帧E(K<sub>da</sub>,[(SN<sub>da</sub>+n)||FCS<sub>4</sub>])之后,节点D也要验证该确认帧的完整性、保密性和新鲜性,即确认帧的源地址ID<sub>a</sub>必须在D的邻居列表中,序列号必须是SN<sub>da</sub>+n,解密后得到的帧校验序列FCS′<sub>4</sub>必须和重新计算得到的帧校验序列FCS<sub>4</sub>一致;验证通过后,节点D要修改邻居列表中节点A对应的序列号SN<sub>da</sub>为SN<sub>da</sub>+n;当信息传到基站时,基站只需向信息的上一跳节点发送一个确认帧,并修改与信息的上一跳节点共享的序列号;如果节点D的父节点就是基站,转发过程与D的父节点是普通节点时一致;3)邻居列表维护阶段在路由维护过程中,邻居列表中节点的能量值相应地进行更新;在会话密钥生命周期达到预设的门限后,相邻节点之间要完成会话密钥和序列号的更新;更新只能由一方发起,即或者由节点D发起,或者由节点G发起,但不能由双方发起;假定由ID小的一方发起,节点D和G的邻居列表更新如下:If ID<sub>d</sub><ID<sub>g</sub> ThenD→G:update||ID<sub>d</sub>||ID<sub>g</sub>||E(K<sub>dg</sub>,[K′<sub>dg</sub>||ID<sub>d</sub>||ID<sub>g</sub>||SN<sub>dg</sub>||SN′<sub>dg</sub>])G→D:ID<sub>g</sub>||ID<sub>d</sub>||E(K′<sub>dg</sub>,[ID<sub>g</sub>||ID<sub>d</sub>||SN′<sub>dg</sub>+n])其中,update表示信息的类型为邻居列表更新;K′<sub>dg</sub>和SN′<sub>dg</sub>分别为新的会话密钥和序列号;若D的ID号小于G的ID号,则由节点D向G发起会话密钥和序列号的更新过程;D将它新生成的会话密钥K′<sub>dg</sub>和序列号SN′<sub>dg</sub>用旧会话密钥K<sub>dg</sub>加密后发往G,确保它们不会因被窃听而泄漏给攻击者,同时加密的ID<sub>d</sub>||ID<sub>g</sub>||SN<sub>dg</sub>能够检测出此信息是否被恶意篡改或重放;在接收到D发送的更新分组之后,G用新会话密钥SN′<sub>dg</sub>加密确认分组来表示此次协商的成功,同时加密的ID<sub>g</sub>||ID<sub>d</sub>||SN′<sub>dg</sub>+n能够保证确认分组的完整性和新鲜性;D、G两节点在更新会话密钥和序列号之后,分别将更新后的数据保存在它们的邻居列表当中;对于故障或能量耗尽的节点,在向它们发送数据失败后,如果多次重传仍收不到它们的确认帧,即重传次数达到预设的门限,则认为它们不可达;在通过入侵检测机制发现变节节点之后,由基站负责将相关的信息通知给变节节点的邻居;而对于故障或能量耗尽的节点以及变节节点的处理,邻居节点只需从它们的邻居列表中将相关的数据删除即可。
地址 100124 北京市朝阳区平乐园100号