2、增强方案——带屏蔽参数的数据认证
传统的Merkle树协议能有效地抵抗多种网络攻击,是运用较多的一种传感器网络安全传输协议。但它只能检测接收的数据是否被更改,而没有办法在数据传输的过程中对其进行保护。因此将数据屏蔽与认证协议结合起来,既可以保护数据不被非法用户监听到,又可以认证其准确性和完整性。
2.1 利用屏蔽参数构建Merkle树
第一步:假设一个区域内的节点个数为8,节点ID记为S1,S2,…,S8,同上一方案,随机选择8个和为0的数R1、R2…R8,作为节点的屏蔽参数。同时,选择一个单向Hash函数,为8个发送节点分别计算Mi=H(Ri),(i=1,2,…,n)。
第二步:将n个Mi作为叶子节点构建一个Merkle树(如图2),其中父节点的值是由两个子节点联合后通过Hash函数计算而来,即Mij=H(Mi|Mj)。
第三步:基站向所有节点广播Merkle树根节点的M18值以及每个节点通向Merkle树根节点的所有兄弟节点的值。如图2中S1收到的初始化参数包为根节点M18以及兄弟节点{M1,M2,M34,M58}。
2.2、节点数据的采集、发送及验证
第一步:节点采集相应的数据Ki,采集完成后会自动加上该节点所对应的屏蔽参数Ri。
第二步:每个发送节点携带一个证书Parai,证书包含这个节点的初始化参数以及该节点到根节点路径上所有兄弟节点的M值,例如S1节点所发数据包为Para1={M1,M2,M34,M58},当其发送消息时就将该证书附在消息的后面发送给与其通信的接收节点,即发送{(Ki+Ri)||Parai}。
第三步:接收节点接收到发送节点的证书后,经过一系列Hash计算,将计算结果与预先存储的根节点的M值进行比较,如果一致,则通过认证。例如,控制中心的聚集节点接收到Para1后,计算H(H(H(H(M1)|M2)|M34)|M58)是否等于M18,如果相等则认证通过,否则丢弃该数据包。
第四步:控制中心的接收节点收到所有发送节点的数据后将所有数据求和,即为该区域的监测数据的总和。
该方法的不足是只能对某一个区域的数据进行求和与认证,当节点数目大量增加以后,数据传输所需要的计算与通信开销都会大大增加,因此本文又提出了带屏蔽参数的多级Merkle树方案。
3、扩展方案——带屏蔽参数的多级Merkle树认证方案
此方案将整个数据采集区域分成多个子区域,每个子区域都含有一定数量的节点,簇头即为每个子区域的聚集结点。首先采用带屏蔽参数的Merkle树协议在每个子区域都构建一个Merkle子树,并将数据传到簇头。然后每个区域的簇头作为叶子节点构成一个新的Merkle树,将数据传给二级总的聚集结点。如图3所示为多级Merkle树结构图。下面介绍具体实现方法。