本发明涉及信息通信领域,特别是一种网络编码方法及安全网络。
背景技术:
网络编码的思想是将信源消息分为多块并从多条链路同时发出,并允许网络中各节点对收到的信息块进行编码,这种思想在高效利用网络资源的同时也带来安全收益。现有的网络编码技术可分为确定性网络编码和随机网络编码。确定性网络编码需要一个全局节点保存整个网络的拓扑信息,并且为网络中每个节点分配编码矩阵,实际应用较为困难。随机网络编码无需全局节点参与,但需要在数据包前添加全局编码系数以使信宿正确接收,这意味信宿节点有可能无法正确接收,并且系统在多探针窃听攻击下更为脆弱。
技术实现要素:
本发明所要解决的技术问题是,针对现有技术不足,提供一种网络编码方法及安全网络,显著提高数据传输的安全性,不需要预先得知网络拓扑和窃听链路信息,并且克服随机线性网络编码的概率接收缺陷。
为解决上述技术问题,本发明所采用的技术方案是:一种网络编码方法,包括正向传输阶段和/或反向传输阶段;其中,
正向传输阶段,信源节点将信息分块发送至信源节点的接入路由器s,一次传输的信息分块数为ω,每个信息分块包含相应编号,经网络中间节点处理后,信宿节点从信宿节点的接入路由器d一次收到ω个分块,并根据分块编号恢复原始信息;其中,ω≤ω′,ω′为网络一次传输允许的最大信息分块数;
反向传输阶段,收到信宿节点的请求包后,信宿节点的接入路由器d产生随机数据块并发送,经网络节点处理后,接入路由器s收到相应的数据分块,计算出编码矩阵,并将网络一次传输的信息分块数值ω发送给信源节点。
本发明的方法不需要预先得知网络拓扑和窃听链路信息,并且克服了随机线性网络编码的概率接收缺陷(即信宿节点有可能无法正确接收),显著提高了网络数据传输的效率和安全性。
具体地,本发明方案分为以下几种情况:
①当网络中的任一节点v是信宿节点的接入路由器d时,所述反向传输阶段具体实现过程包括:
s1、节点v从信宿节点收到请求包,确认该请求;
s2、生成一个|in(v)|×|in(v)|的矩阵kv,矩阵kv中各元素均在有限域gf(2m)中随机选取;其中,m是矩阵元素的二进制位数,即每个元素由m比特组成;|in(v)|为节点v的输入链路集合in(v)的链路总数;
s3、将矩阵kv的每一行按照端口号从相应端口发送;
s4、当收到信源节点的接入路由器s传来的位置信息p时,根据p中的ω个位置数据,从kv中选择对应下标的ω个列向量组成新的矩阵k'v;其中,k'v为一个|in(v)|×ω矩阵。
所述正向传输阶段具体实现过程包括:
s5、节点v将收到的|in(v)|个数据分块按行组成矩阵x,矩阵x的每个元素都是长度为m的二进制数;其中,|in(v)|为节点v的输入链路集合in(v)的链路总数;
s6、在有限域gf(2m)下计算y=k'vt·x,其中,k'vt表示矩阵k'v的转置;m是矩阵元素的二进制位数,即每个元素由m比特组成;
s7、依次将矩阵y的每一行作为一个数据分块发送至信宿节点。
②当网络中的任一节点v是中间节点时,所述反向传输阶段具体实现过程包括:
s1、节点v将从|out(v)|个端口收到的数据按行组成矩阵x,矩阵x的每个元素都是长度为m的二进制数;其中,|out(v)|为节点v的输出链路集合out(v)的链路总数;
s2、节点v生成一个|in(v)|×|out(v)|的矩阵kv,矩阵kv中各元素均在有限域gf(2m)中随机选取,之后在有限域gf(2m)下计算y=kv·x;其中,|in(v)|为节点v的输入链路集合in(v)的链路总数;|out(v)|为节点的输出链路集合out(v)的链路总数;m是矩阵元素的二进制位数,即每个元素由m比特组成;
s3、将矩阵y的每一行按照端口号从相应端口发送。
所述正向传输阶段具体实现过程包括:
s4、节点v将从|in(v)|个端口收到的数据分块按行组成矩阵x,矩阵x的每个元素都是长度为m的二进制数;其中,|in(v)|为节点v的输入链路集合in(v)的链路总数;
s5、在有限域gf(2m)下计算y=kvt·x;其中,kvt表示矩阵kv的转置;m是矩阵元素的二进制位数,即每个元素由m比特组成;
s6、将矩阵y的每一行按照端口号从相应端口发送。
③当网络中的任一节点v是信源节点的接入路由器s时,所述反向传输阶段具体实现过程包括:
s1、节点v将从|out(v)|个端口收到的数据按行组成矩阵x,矩阵x的每个元素都是长度为m的二进制数;其中,|out(v)|为节点v的输出链路集合out(v)的链路总数;
s2、令网络一次传输允许的最大信息分块数ω′=rank(x),利用ω′和x生成矩阵kv和位置信息p,其中,rank(x)表示矩阵x的秩,等于网络一次传输的最大信息分块数;矩阵kv的大小为ω×|out(v)|,ω≤ω′;|out(v)|为节点v的输出链路集合out(v)的链路总数;
s3、将p传送给信宿节点的接入路由器d,将网络一次传输的信息分块数ω发送给信源节点。
所述正向传输阶段具体实现过程包括:
s4、节点v将收到的数据分块按行组成矩阵x,矩阵x的每个元素都是长度为m的二进制数;矩阵x的行数为ω,即网络一次传输的信息分块数;
s5、在有限域gf(2m)下计算y=kvt·x;其中,m是矩阵元素的二进制位数,即每个元素由m比特组成;
s6、将矩阵y的每一行按照端口号从相应端口发送。
本发明中,信源节点的接入路由器s的编码矩阵kv和位置信息p的具体计算过程包括:
1)初始化一个空位置信息数组p和一个空矩阵t*;
2)判断矩阵x的列数是否等于ω′,若等于,则t*=x,并把所有列位置信息保存在数组p,进入步骤10);否则,进入步骤3);
3)初始化矩阵t为空矩阵,p*为空位置信息数组;
4)令i=1;
5)将x的第i个列向量记为t;
6)若rank(t+t)>rank(t),则需更新矩阵t和位置信息数组p,得到更新后的矩阵t*和更新后的位置信息数组p*,t*=t+t,p*=p+i,进入步骤7);若rank(t+t)==rank(t),进入步骤9);其中,二元运算t+t表示在矩阵t的最右边增加列向量t;二元运算p+i表示在位置信息数组最右边增加一个元素i;rank(t)和rank(t+t)分别表示矩阵t和t+t的秩;符号“==”表示逻辑比较;
7)若rank(t*)==ω′,则进入步骤10);否则,进入步骤8);
8)t=t*,p=p*;
9)i的值加1,并返回步骤5),直至i大于x的列数;
10)从矩阵t*选取ω列或选择矩阵t*的所有列,得到新的矩阵t**和对应的新位置信息数组;
11)生成kv,使其满足kv·t**=iω;其中,iω为ω阶单位矩阵的值加。
上述计算过程简单可靠,实用性强。
相应地,本发明还提供了一种安全网络,包括信源节点的接入路由器、信宿节点的接入路由器;所述信源节点的接入路由器与所述信宿节点的接入路由器通过多个中间节点通信;所述信源节点的接入路由器与所述信宿节点的接入路由器根据上述方法进行数据传输。
与现有技术相比,本发明所具有的有益效果为:与传统网络编码技术相比,本发明的方法不需要知道网络拓扑的任何先验知识,也不需要知道窃听链路信息,具有很强的实用性。因为采用反向传输过程来确定路由器s和d的编码矩阵和网络传输维度,克服了随机线性网络编码的概率接收缺陷,因此不但可以显著提高数据传输的效率,而且提高了整个系统的安全性。
附图说明
图1为网络模型结构示意图;
图2为本发明节点v数据传输的流程图。
具体实施方式
主机alice有保密信息需要传给主机bob(信宿节点),两台主机通过图1所示网络相连,该网络是一个从节点s到节点d的有向无环图,节点为可实现网络编码功能的路由器或交换机,节点s与主机alice(信源节点)相连,节点d与主机bob相连,其余节点称为中间节点,对于网络中任意一个节点v,其每个端口都有相应标号,记节点v的入边和出边的集合分别为in(v)和out(v),记节点v的编码矩阵为kv。
方案中数据传输方向可分为反向和正向,反向传输阶段中主机bob发送一个特殊的请求包给节点d,接入路由器d产生随机数据块并按行发送,经网络中节点处理后,alice从节点s得到网络一次传输的信息分块数和编码矩阵;正向传输阶段中主机alice会将保密信息分块发送给节点s,分块个数为ω,每个分块包含相应编号,经网络中节点处理后,bob从节点d收到ω个分块(ω小于网络一次传输的最大信息分块数),并根据分块编号恢复原始保密信息。方案中数据包的ip报头中含可选字段,节点v通过读取该可选字段可以判断当前安全传输阶段以及自己在网络中所处的位置。
根据节点v在网络中位置以及当前数据传输方向,节点v对数据的处理分为如下情况:
一、如果节点v是节点d
(1)反向传输阶段
s1.节点v从主机bob收到特殊请求包,确认该请求。
s2.生成一个|in(v)|×|in(v)|的矩阵kv,矩阵中各元素均在有限域gf(2m)中随机选取,其中m是矩阵元素的二进制位数,即每个元素由m比特组成。
s3.将矩阵kv的每一行按照端口号序号从相应端口发送。
s4.等待反向传输阶段结束后由节点s传来的位置信息p,根据p中的ω个位置数据,从kv中选择对应下标的ω个列向量组成新的k'v(k'v大小为|in(v)|×ω);|in(v)|为节点v的输入链路集合in(v)的链路总数;ω≤ω′,ω′为网络一次传输的最大信息分块数。
(2)正向传输阶段
s1.节点v将收到的|in(v)|个数据分块按行组成矩阵x,矩阵的每个元素都是长度为m的二进制数,每个行向量对应从一个端口收到的数据串,矩阵的行向量按照对应端口号排列。
s2.在有限域gf(2m)下计算y’=k'vt·x,其中,k'vt是矩阵k'v的转置。
s3.依次将矩阵y的每一行作为一个数据分块发送给主机bob。
二、节点v是中间节点
(1)反向传输阶段
s1.节点v将从|out(v)|个端口收到的数据按行组成矩阵x,矩阵的每个元素都是长度为m的二进制数,每个行向量对应从一个端口收到的数据串,矩阵的行向量按照对应端口号排列,矩阵x的行数为ω。其中,|out(v)|为节点v的输出链路集合out(v)的链路总数。
s2.节点v生成一个|in(v)|×|out(v)|的矩阵kv,矩阵中各元素均在有限域gf(2m)中随机选取,之后在有限域gf(2m)下计算y=kv·x。
s3.将矩阵y的每一行按照端口号序号从相应端口发送。
(2)正向传输阶段
s1.节点v将收到的数据按行组成矩阵x,矩阵的每个元素都是长度为m的二进制数,每个行向量对应从一个端口收到的数据串,矩阵的行向量按照对应端口号排列。
s2.在有限域gf(2m)下计算y=kvt·x。
s3.将矩阵y的每一行按照端口号从相应端口发送。
三、节点v是节点s
(1)反向传输阶段
s1.节点v将收到的数据按行组成矩阵x,矩阵的每个元素都是长度为m的二进制数,每个行向量对应从一个端口收到的数据串,矩阵的行向量按照对应端口号排列。
s2.令ω′=rank(x),运行算法1生成kv(即ks)和位置信息p;其中,取ω≤ω′。
s3.将p传送给节点d,将网络一次传输的信息分块数ω发送给主机alice。
(2)正向传输阶段
s1.节点v将收到的ω个数据块按行组成矩阵x,矩阵的每个元素都是长度为m的二进制数,矩阵的每个行向量对应从主机alice收到的一个数据分块。
s2.在有限域gf(2m)下计算y=kvt·x。
s3.将矩阵y的每一行按照端口号从相应端口发送。