关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > 一种基于数字水印的无线传感器网络敏感数据通信协议

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

作者:时间:2010-03-16来源:网络收藏
具有节点成本低、电源消耗小、自组织等优点,已广泛地应用于很多领域[1]。
在很多应用中,存在着在节点间传输信息的需求。数据是指密钥、ID、军事领域中的关键数据、节点的身份验证信息等涉及系统安全、稳定运行的一类关键数据。这类数据通常要求采用一种比常规通信方式更安全、可靠的方式传递。数据的传输有很多种方法,比较常见的是加密技术来实现。但由于节点资源有限,复杂的算法无法在节点中实现[2],这些算法在资源耗费方面、加密强度方面尚不完美。
 本文的原理来实现敏感数据的传输,通过信息隐藏来实现敏感数据的传输。与加密传输相比,该算法具备简单高效、不易察觉等优点,适合于在传感器网络中实现。
 (digital watermarking)技术是实现信息隐藏的一种主要手段。敏感信息可以毫无察觉地嵌入到数据中,嵌入的信息就叫做[3]。水印是信息隐藏学的一个分支,是利用人类感觉器官的不敏感及多媒体数据中存在的冗余,将秘密信息隐藏到宿主信息中,水印的添加不会影响原数据的正常使用[4-7]。
 以上原理,本文提出一种基于数字水印技术和信息隐藏的敏感信息通信
 目前绝大多数传感器节点都支持16位的寄存器,传感数据在通信时也是基于16位无符号数整数传输的。而16位无符号整数的取值范围是0~65 535。当实际采集的传感数据值比较大时,改变最低位对传感器数据值的影响很小,可以忽略不计。
 因此,本文通过16位无符号整数的最低位来传输敏感数据,并利用数字水印嵌入算法将敏感数据嵌入其中,达到敏感数据隐蔽传输的目的。为避免最低位的改变对传感数据的精度造成太大影响,本文设置了一个阀值,只有大于该值的数据才会被嵌入敏感信息。

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

本文引用地址:http://www.eepw.com.cn/article/163209.htm


敏感数据的嵌入算法描述如下:
#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(TheBitIndexTheIBS.Size)
{
CurrentUintData=TheIUS.Read(TheUintIndex,1);
CurrentBitData=TheIBS.Read(TheBitIndex,1);
/**若当前无符号整数值小于阀值,则读取下一个值,
*直到大于阀值时,停止循环 **/


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭