发明名称 用于无线传感器网络数据采集的网络编码方法
摘要 本发明公开了一种用于无线传感器网络数据采集的网络编码方法,能够达到提高数据传输安全性的目的;该方法的步骤为:给定各会话密钥和传感器节点的存储单元形式;传感器节点获取事件信息并进行编码更新;Sink节点进行译码:Sink节点随机选择多个传感器节点并采集编码包,加密得到包头hf;分别利用各会话密钥,对相应的hf解密得到编码矩阵C和编码包矩阵F;若C满秩,根据C<sup>-1</sup>和F,计算得到数据包b<sub>l-N</sub>,b<sub>l-N+1</sub>…,b<sub>l-1</sub>;否则,利用全局密钥GK进行加密并广播m<sub>1</sub>,…,m<sub>p</sub>;选取编码初始值为m<sub>1</sub>,…,m<sub>p</sub>中的一个的传感器节点;利用各会话密钥再次提取新采集的编码包包头中的信息,构建编码矩阵C<sub>1</sub>和编码包矩阵F<sub>1</sub>,若C<sub>1</sub>满秩,根据C<sub>1</sub>的逆<img file="DDA0000157410500000011.GIF" wi="89" he="49" />计算得到有效数据包b<sub>l-N</sub>,b<sub>l-N+1</sub>…,b<sub>l-1</sub>;否则,译码结束。
申请公布号 CN102665206B 申请公布日期 2015.06.03
申请号 CN201210126316.6 申请日期 2012.04.26
申请人 北京邮电大学;北京工业大学 发明人 武斌;王秀娟;张冬梅;郑康锋;杨奎武;查选;丁靓子
分类号 H04W12/02(2009.01)I;H04L1/00(2006.01)I 主分类号 H04W12/02(2009.01)I
代理机构 北京理工大学专利中心 11120 代理人 郭德忠;李爱英
主权项 一种用于无线传感器网络数据采集的网络编码方法,该方法所涉及的无线传感器网络中设有无线传感器节点和Sink节点,其特征在于,该方法的具体步骤如下:1)数据初始化;在所述传感器网络中,所有传感器节点都共享一个全局密钥GK,同时Sink节点分别与每个传感器节点共享一个会话密钥,各会话密钥两两不同,每个传感器节点有B个存储单元S<sub>x</sub>,x为存储单元序号,x=0,…,B‑1,每个存储单元用于存储编码包、编码初始值和编码系数,其中,编码包用于根据编码初始值,选取相应的有效数据包,将该有效数据包与相应的编码系数进行加权求和,得到该编码包值;随机分配编码初始值k给传感器节点各存储单元,k的取值范围为[0,N‑1]的整数,N为编码周期;当编码初始值k确定后,每个传感器节点在域<img file="FDA0000584875040000013.GIF" wi="59" he="57" />内进行编码系数c<sub>x</sub>的选取,编码系数c<sub>x</sub>的选取原则为:对于同一传感器节点,在其任意两个存储单元中,若两个编码初始值相同,则所选取的两个存储单元的编码系数必须不同;所述<img file="FDA0000584875040000014.GIF" wi="59" he="57" />为伽罗瓦域GF(2<sup>q</sup>);2)传感器节点获取事件信息并进行编码更新;传感器网络中的所有传感器节点开始获取事件信息并生成数据包,当所有传感器开始进行事件信息获取后,每个传感器节点对所生成的有效数据包进行过时与否的判定,判定规则为:若所获取的有效数据包共N个,依次为b<sub>0</sub>…b<sub>j</sub>…b<sub>N‑1</sub>,当该传感器节点再获取一个有效数据包b<sub>N</sub>时,则认为有效数据包b<sub>0</sub>过时,N>B;基于所述判定规则,每个传感器节点对自身的编码包进行编码更新的过程为:①当每个传感器节点获取到的有效数据包为b<sub>j‑1</sub>,j≤N时,有效数据包未过时,判断j‑1是否为当前编码初始值k中的一个,如果是,对编码初始值k≤j‑1的编码包进行更新:给每个编码包f<sub>x</sub>加上<img file="FDA0000584875040000011.GIF" wi="192" he="85" />否则,仅对编码初始值k<j‑1的编码包进行更新:给每个编码包f<sub>x</sub>加上<img file="FDA0000584875040000012.GIF" wi="185" he="83" />②当传感器节点获取到的有效数据包为b<sub>j‑1</sub>,j>N时,将当前有效数据包的编号j‑1减去N,判断(j‑1)‑N是否为当前编码初始值k中的一个,如果是,则将编码初始值为(j‑1)‑N的编码包形式替换为b<sub>j‑1</sub>,并对编码初始值(j‑1)‑N加N,同时对其他存储单元的编码包形式进行更新:给每个编码包f<sub>x</sub>加上<img file="FDA0000584875040000021.GIF" wi="196" he="90" />否则,对所有的编码包形式进行更新:给每个编码包f<sub>x</sub>加上<img file="FDA0000584875040000022.GIF" wi="188" he="85" />3)Sink节点进行编码包解码;S00、Sink节点随机地选择n个传感器节点进行数据采集;S01、被选中的传感器节点在自身的多个存储单元中随机选择一个编码包f<sub>x</sub>,并对该编码包中的编码初始值进行加密并生成包头,将该编码包以及其包头发送至Sink节点;所述包头包含的信息包括相应编码包初始值k、编码系数c<sub>x</sub>和各传感器节点已生成的有效数据包个数l,l≥N;S02、Sink节点分别利用与每个传感器节点的会话密钥,对相应的包头解密得到c<sub>x</sub>、k和l,并将c<sub>x</sub>和N‑l+k个0构成一个长度为N的编码向量<img file="FDA0000584875040000023.GIF" wi="174" he="77" />为:<img file="FDA0000584875040000024.GIF" wi="1433" he="80" />Sink节点根据得到的所有编码向量,将这些编码向量记为<img file="FDA0000584875040000025.GIF" wi="286" he="76" />n>N,则编码包矩阵F表示为:<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><mi>F</mi><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>f</mi><mn>1</mn></msub></mtd></mtr><mtr><mtd><msub><mi>f</mi><mn>2</mn></msub></mtd></mtr><mtr><mtd><msub><mi>f</mi><mn>3</mn></msub></mtd></mtr><mtr><mtd><msub><mi>f</mi><mn>4</mn></msub></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><msub><mi>f</mi><mi>n</mi></msub></mtd></mtr></mtable></mfenced><mo>=</mo><mi>C</mi><mo>&CenterDot;</mo><msub><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mi>N</mi></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mi>N</mi><mo>+</mo><mn>1</mn></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mi>N</mi><mo>+</mo><mn>2</mn></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mi>N</mi><mo>+</mo><mn>3</mn></mrow></msub></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mn>1</mn></mrow></msub></mtd></mtr></mtable></mfenced><mrow><mi>N</mi><mo>&times;</mo><mn>1</mn></mrow></msub><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mover><mi>c</mi><mo>&RightArrow;</mo></mover><mn>1</mn></msub></mtd></mtr><mtr><mtd><msub><mover><mi>c</mi><mo>&RightArrow;</mo></mover><mn>2</mn></msub></mtd></mtr><mtr><mtd><msub><mover><mi>c</mi><mo>&RightArrow;</mo></mover><mn>3</mn></msub></mtd></mtr><mtr><mtd><msub><mover><mi>c</mi><mo>&RightArrow;</mo></mover><mn>4</mn></msub></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><msub><mover><mi>c</mi><mo>&RightArrow;</mo></mover><mi>n</mi></msub></mtd></mtr></mtable></mfenced><mo>&CenterDot;</mo><msub><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mi>N</mi></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mi>N</mi><mo>+</mo><mn>1</mn></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mi>N</mi><mo>+</mo><mn>2</mn></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mi>N</mi><mo>+</mo><mn>3</mn></mrow></msub></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mn>1</mn></mrow></msub></mtd></mtr></mtable></mfenced><mrow><mi>N</mi><mo>&times;</mo><mn>1</mn></mrow></msub><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>2</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000584875040000026.GIF" wi="1422" he="453" /></maths>其中,C为编码矩阵;f<sub>1</sub>,f<sub>2</sub>,...,f<sub>n</sub>为所有编码向量<img file="FDA0000584875040000027.GIF" wi="236" he="75" />对应的编码包;b<sub>l‑N</sub>,b<sub>l‑N+1</sub>...,b<sub>l‑1</sub>为传感器节点的最近的N个有效数据包;S03、Sink节点对编码矩阵C进行化简并求秩,并判断编码矩阵C是否满秩;若编码矩阵C满秩,即秩为N,则对编码矩阵C进行求逆并得到编码矩阵C的逆C<sup>‑1</sup>,根据C<sup>‑1</sup>和编码包矩阵F,计算得到数据包b<sub>l‑N</sub>,b<sub>l‑N+1</sub>...,b<sub>l‑1</sub>,并转至步骤S05;若编码矩阵C不满秩,即秩不为N,则编码矩阵C不可逆;记Sink节点所选取的传感器节点的编码包f<sub>1</sub>,f<sub>2</sub>,...,f<sub>n</sub>的编码初始值分别为K<sub>1</sub>,K<sub>2</sub>,...,K<sub>n</sub>,结合(2)式,如果编码矩阵C满秩,则K<sub>1</sub>,K<sub>2</sub>,...,K<sub>n</sub>应取遍[l‑N,l‑1]内所有整数,而这里编码矩阵C不满秩,将K<sub>1</sub>,K<sub>2</sub>,...,K<sub>n</sub>在[l‑N,l‑1]内未取到的所有整数记为:m<sub>1</sub>,…,m<sub>p</sub>,p为所述未取到的所有整数的个数;Sink节点利用全局密钥GK对m<sub>1</sub>,…,m<sub>p</sub>,进行加密并在传感器网络中广播;每个传感器节点在接收到Sink节点的广播数据后,对该广播数据进行解密得到m<sub>1</sub>,…,m<sub>p</sub>,该传感器节点判断自身存储单元中的编码初始值包含有m<sub>1</sub>,…,m<sub>p</sub>中的一个,若包含,则该传感器节点被Sink节点选中,被选中的传感器节点随机选择m<sub>1</sub>,…,m<sub>p</sub>中的一个,并以步骤S01中的方式生成包头,向Sink节点发送相应的编码包和包头;S04、Sink节点在收到多个传感器节点发送的编码包后,按照步骤S02的方法对其包头进行解密,并得到的相应编码矩阵C’和编码包矩阵F’,Sink节点根据C’和C,得到编码向量矩阵<maths num="0002" id="cmaths0002"><math><![CDATA[<mfenced open='[' close=']'><mtable><mtr><mtd><mi>C</mi></mtd></mtr><mtr><mtd><msup><mi>C</mi><mo>&prime;</mo></msup></mtd></mtr></mtable></mfenced>]]></math><img file="FDA0000584875040000031.GIF" wi="109" he="158" /></maths>并作初等行变换,可将冗余的编码系数消除并得到阶梯矩阵<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>C</mi><mn>1</mn></msub></mtd></mtr><mtr><mtd><mn>0</mn></mtd></mtr></mtable></mfenced><mo>,</mo></mrow>]]></math><img file="FDA0000584875040000032.GIF" wi="134" he="155" /></maths>同样地,根据F和F’,得到阶梯矩阵<maths num="0004" id="cmaths0004"><math><![CDATA[<mrow><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>F</mi><mn>1</mn></msub></mtd></mtr><mtr><mtd><mn>0</mn></mtd></mtr></mtable></mfenced><mo>;</mo></mrow>]]></math><img file="FDA0000584875040000033.GIF" wi="137" he="155" /></maths>其中,C<sub>1</sub>为N×N矩阵,F<sub>1</sub>为N×1矩阵;Sink节点对矩阵C<sub>1</sub>进行化简并求秩,并判断编码矩阵C<sub>1</sub>是否满秩;若矩阵C<sub>1</sub>满秩,则对矩阵C<sub>1</sub>进行求逆并得到编码矩阵C<sub>1</sub>的逆<img file="FDA0000584875040000034.GIF" wi="106" he="74" />由于,<maths num="0005" id="cmaths0005"><math><![CDATA[<mrow><mfenced open='[' close=']'><mtable><mtr><mtd><mi>F</mi></mtd></mtr><mtr><mtd><msup><mi>F</mi><mo>&prime;</mo></msup></mtd></mtr></mtable></mfenced><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><mi>C</mi></mtd></mtr><mtr><mtd><msup><mi>C</mi><mo>&prime;</mo></msup></mtd></mtr></mtable></mfenced><msub><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mi>N</mi></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mi>N</mi><mo>+</mo><mn>1</mn></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mi>N</mi><mo>+</mo><mn>2</mn></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mi>N</mi><mo>+</mo><mn>3</mn></mrow></msub></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mn>1</mn></mrow></msub></mtd></mtr></mtable></mfenced><mrow><mi>N</mi><mo>&times;</mo><mn>1</mn></mrow></msub><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>3</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000584875040000035.GIF" wi="1319" he="468" /></maths>且<maths num="0006" id="cmaths0006"><math><![CDATA[<mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>C</mi><mn>1</mn></msub></mtd></mtr><mtr><mtd><mn>0</mn></mtd></mtr></mtable></mfenced>]]></math><img file="FDA0000584875040000036.GIF" wi="108" he="155" /></maths>和<maths num="0007" id="cmaths0007"><math><![CDATA[<mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>F</mi><mn>1</mn></msub></mtd></mtr><mtr><mtd><mn>0</mn></mtd></mtr></mtable></mfenced>]]></math><img file="FDA0000584875040000037.GIF" wi="106" he="157" /></maths>分别是由<maths num="0008" id="cmaths0008"><math><![CDATA[<mfenced open='[' close=']'><mtable><mtr><mtd><mi>C</mi></mtd></mtr><mtr><mtd><msup><mi>C</mi><mo>&prime;</mo></msup></mtd></mtr></mtable></mfenced>]]></math><img file="FDA0000584875040000038.GIF" wi="107" he="158" /></maths>和<maths num="0009" id="cmaths0009"><math><![CDATA[<mfenced open='[' close=']'><mtable><mtr><mtd><mi>F</mi></mtd></mtr><mtr><mtd><msup><mi>F</mi><mo>&prime;</mo></msup></mtd></mtr></mtable></mfenced>]]></math><img file="FDA0000584875040000039.GIF" wi="110" he="157" /></maths>作相同的初等行变换得到的,则有:<maths num="0010" id="cmaths0010"><math><![CDATA[<mrow><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>F</mi><mn>1</mn></msub></mtd></mtr><mtr><mtd><mn>0</mn></mtd></mtr></mtable></mfenced><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>C</mi><mn>1</mn></msub></mtd></mtr><mtr><mtd><mn>0</mn></mtd></mtr></mtable></mfenced><msub><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mi>N</mi></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mi>N</mi><mo>+</mo><mn>1</mn></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mi>N</mi><mo>+</mo><mn>2</mn></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mi>N</mi><mo>+</mo><mn>3</mn></mrow></msub></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mn>1</mn></mrow></msub></mtd></mtr></mtable></mfenced><mrow><mi>N</mi><mo>&times;</mo><mn>1</mn></mrow></msub><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>4</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000584875040000041.GIF" wi="1408" he="463" /></maths>即:<maths num="0011" id="cmaths0011"><math><![CDATA[<mrow><msub><mi>F</mi><mn>1</mn></msub><mo>=</mo><msub><mi>C</mi><mn>1</mn></msub><msub><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mi>N</mi></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mi>N</mi><mo>+</mo><mn>1</mn></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mi>N</mi><mo>+</mo><mn>2</mn></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mi>N</mi><mo>+</mo><mn>3</mn></mrow></msub></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><msub><mi>b</mi><mrow><mi>l</mi><mo>-</mo><mn>1</mn></mrow></msub></mtd></mtr></mtable></mfenced><mrow><mi>N</mi><mo>&times;</mo><mn>1</mn></mrow></msub><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>5</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000584875040000042.GIF" wi="1214" he="470" /></maths>Sink节点根据<img file="FDA0000584875040000043.GIF" wi="77" he="68" />和矩阵F<sub>1</sub>,计算得到每个传感器节点的有效数据包为b<sub>l‑N</sub>,b<sub>l‑N+1</sub>...,b<sub>l‑1</sub>;若编码矩阵C<sub>1</sub>不满秩,则转至步骤S05;S05、Sink节点译码结束。
地址 100876 北京市海淀区西土城路10号