物聯傳媒 旗下網站
登錄 注冊
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)算法簡單,易于實現。

  因此,該協議能很好地應用于無線傳感器網絡需要傳輸敏感信息的場合中。