物联传媒 旗下网站
登录 注册
RFID世界网 >  技术文章  >  其他  >  正文

一种基于数字水印的无线传感器网络敏感数据通信协议

作者:RFID世界网 收编
来源:电子网
日期:2010-03-26 09:41:37
摘要:无线传感器网络在很多应用中,存在着在节点间传输敏感信息的需求。敏感数据是指密钥、ID、军事领域中的关键数据、节点的身份验证信息等涉及系统安全、稳定运行的一类关键数据。这类数据通常要求采用一种比常规通信方式更安全、可靠的方式传递。即基于加密技术来实现。

  无线传感器网络具有节点成本低、电源消耗小、网络自组织等优点,已广泛地应用于很多领域[1]。
 
  无线传感器网络在很多应用中,存在着在节点间传输敏感信息的需求。敏感数据是指密钥、ID、军事领域中的关键数据、节点的身份验证信息等涉及系统安全、稳定运行的一类关键数据。这类数据通常要求采用一种比常规通信方式更安全、可靠的方式传递。敏感数据的传输有很多种方法,比较常见的是基于加密技术来实现。但由于传感器节点资源有限,复杂的算法无法在节点中实现[2],这些算法在资源耗费方面、加密强度方面尚不完美。
 
  本文基于数字水印的原理来实现敏感数据的传输,通过信息隐藏来实现敏感数据的传输。与加密传输相比,该算法具备简单高效、不易察觉等优点,适合于在无线传感器网络中实现。
 
  数字水印(digital watermarking)技术是实现信息隐藏的一种主要手段。敏感信息可以毫无察觉地嵌入到数据中,嵌入的信息就叫做水印[3]。数字水印是信息隐藏学的一个分支,是利用人类感觉器官的不敏感及多媒体数据中存在的冗余,将秘密信息隐藏到宿主信息中,水印的添加不会影响原数据的正常使用[4-7]。
 
  基于以上原理,本文提出一种基于数字水印技术和信息隐藏的敏感信息通信协议。

  目前绝大多数传感器节点都支持16位的寄存器,传感数据在通信时也是基于16位无符号数整数传输的。而16位无符号整数的取值范围是0~65 535。当实际采集的传感数据值比较大时,改变最低位对传感器数据值的影响很小,可以忽略不计。

  因此,本文通过16位无符号整数的最低位来传输敏感数据,并利用数字水印嵌入算法将敏感数据嵌入其中,达到敏感数据隐蔽传输的目的。为避免最低位的改变对传感数据的精度造成太大影响,本文设置了一个阀值,只有大于该值的数据才会被嵌入敏感信息。

  1 敏感数据嵌入及提取过程

  嵌入敏感信息的方法与数字水印的嵌入方法基本相同。如图1所示,首先将敏感信息转化为一个二进制流,命名为输入二进制流;将传感数据转化为一个16位无符号整数流,命名为输入整数流;将输出的含有敏感数据的无符号整数流命名为输出整数流。则敏感数据嵌入过程描述如下:如果输入整数流当前位置的传感数据值大于或等于阀值,且输入二进制流中当前位置的二进制值为“1”,则将整数流当前位置的数据最低位置“1”,并添加到输出整数流中,否则置“0”;如果输入整数流当前位置的传感数据值小于阀值,则不添加水印,直接将该数添加到输出整数流中。

  敏感数据的嵌入算法描述如下:
 
  #define N  0x0100;                        //阀值 
  typedef BitStream TInputBitStream;    //定义输入二进制流 
  typedef Uint16Stream TInputUintStream; //定义输入无符号整数流 
  typedef Uint16Stream TOutputUintStream;//定义输出无符号整数流 
  //--------------------------------------- 
  /** 用敏感数据初始化输入二进制流 **/ 
  TInputBitStream * TheIBS=
  new TInputBitStream(SensitiveData aData); 
  /** 用传感数据初始化输入无符号整数流**/ 
  TInputUintStream * TheIUS=
  new TInputUintStream(SensorData aData); 
  /** 用空数据初始化输出无符号整数流 **/ 
  TOutputUintStream * TheOUS=new TOutputUintStream(); 
  //------------------------------------ 
  /**  数字水印嵌入方法 
  ** 注意:本方法假定输入整数流的长度 
  *足以嵌入所有的敏感数据 
  * 参数TheIBS: 输入二进制流 
  * 参数TheIUS:输入无符号整数流 
  * 参数N:预先定义的阀值 
  * 返回值:输出无符号整数流TheOUS  **/ 
  TOutputUintStream* InsertWaterMarking(TheIBS,TheIUS,N) 
  { 
  uint16_t  TheUintIndex=0; //用于保存输入整数流的位号 
  uint16_t  TheBitIndex=0; //用于保存输入二进制流的位号 
  uint16_t  CurrentUintData; //用于保存当前的无符号整数值 
  bit_t  CurrentBitData;     //用于保存当前的二进制值 
  while(TheBitIndex<TheIBS.Size) 
  { 
  CurrentUintData=TheIUS.Read(TheUintIndex,1); 
  CurrentBitData=TheIBS.Read(TheBitIndex,1); 
  /**若当前无符号整数值小于阀值,则读取下一个值, 
  *直到大于阀值时,停止循环   **/ 
  while(CurrentUintData<N) 
  { 
  TheOUS.Write(CurrentUintData);//将当前值加入输出流 
  TheUintIndex++; 
  CurrentUintData=TheIUS.Read(TheUintIndex,1); 
  } 
   /** 如果当前二进制值为1,则将当前无符号整数值的最后一位置为“1”,并将该值加入到输出流中;否则,将最后一位置为“0”,并将该值加入到输出流中。 **/
  if(CurrentBitData==1)
  TheOUS.Write(CurrentUintData|0x0001); 
  else TheOUS.Write(CurrentUintData&0xfff0); 
  TheBitIndex++; 
  TheUintIndex++; 
  }
  } 

  敏感数据的提取过程与嵌入过程相反,将接收到的含有敏感数据的16位无符号整数流命名为输入整数流,将提取出的二进制敏感数据流命名为输出二进制流,将输出的16位传感数据流命名为输出整数流。则敏感数据提取过程描述如下:首先将该值添加到输出无符号整数流中,然后检测输入整数流中当前位置的数据值,如果该值大于或等于阀值且最低位为“1”,则将“1”添加到二进制输出流中;否则,将“0”添加到二进制输出流中;如果该值小于阀值,则不往二进制输出流添加数据。最后,将输出二进制流转化为敏感数据,将输出无符号整数流转化为传感数据。 

  为进一步提升敏感数据传输的安全级别,还可以在预处理时对敏感数据加校验、加签名、加密等。

  2 实际验证
 
  无线传感器网络在某军事化应用中,多个节点被布设于一个生疏地域内,实时采集该地域的温度、湿度、光照等环境信息。为检测各个节点未被敌方捕获而传回虚假信息,各节点将不定时地传回自己的“识别码”,以证明自己的身份。“识别码”由节点ID、当前时间、基站回复码等信息实时运算生成,为一串数字。
 
  在该应用中,采用了本文所述方法传输“识别码”。具体做法是:在“光照”传感数据中,当数据值大于256(0x0100)时,嵌入“识别码”。如图2所示,“光照”数据的值通常白天在600以上,均大于阀值,方便嵌入水印,同时,嵌入水印后,对原值影响较小。



  嵌入“识别码”前后数据对照如表1所示。表中左列为未嵌入“识别码”时的“光照”数据,中间列为嵌入“识别码”后的“光照”数据,右列是“识别码”的二进制形式。中间列标有*的数字为嵌入“识别码”后发生变化的数据。





  3 结果分析

  3.1 水印嵌入对传感数据的影响 

  采用以上嵌入算法后,对传感数据的影响可分为以下三类:

  (1)传感数据的值大于等于阀值,且其最低位在嵌入水印时发生了变化,即原始数据的最低位由“0”变为“1”或由“1”变为“0”。这时,传感数据的值在嵌入水印后发生了变化,变化前后传感数据相差为“1”。其相对变化率如下:

  可见,其相对变化率小于1/N,当N=0x0100,即十进制数256时,其相对变化率小于0.39%

  (2)传感数据的值大于等于阀值,但其最低位在嵌入水印时未发生变化,其值不受影响。

  (3)传感数据的值小于阀值。传感数据的值小于阀值时,不嵌入水印,因此,其值不受影响。

  3.2 N值大小对协议的影响

  当N值较大时,水印嵌入对原始传感数据的影响较小(相对变化率较小),但满足条件的传感数据则会变少,传输敏感数据的周期会变长;当N值较小时,水印嵌入对原始数据的影响较大(相对变化率较大),但满足条件的传感数据多,敏感数据传输周期较短。因此,在实际应用中应根据数据的实际取值范围合理地选取N值。

  本文所提出的基于数字水印原则无线传感器网络敏感数据通信协议,具备以下特点:

  (1)可实现敏感数据的隐蔽传输。由于水印嵌入算法仅改变了传感数据的最低位,数据变化微小。在不知道原始数据的情况下,很难发现数据中嵌入了水印。达到了敏感数据隐蔽传输的目的;
  (2)对原始数据影响小。采用本协议后,仅大于阀值且最低位与水印当前位不一致的值会发生变化,变化结果为值加“1”或减“1”,相对变化率最大为1/N。当选取合适N值后,相对变化率可以控制在1%以下,基本上不会影响传感数据的后续应用;
  (3)算法简单,易于实现。

  因此,该协议能很好地应用于无线传感器网络需要传输敏感信息的场合中。