1.软件定义传感网络可信通信系统,所述系统包括控制器和交换机,控制器包括资源管理模块、安全管理模块以及基础控制模块,交换机包括软件定义传感节点,其特征在于,所述系统包括控制器通过openflow协议与软件定义传感节点通信,并软件定义传感节点通过QKD分发秘钥;所述基础控制模块包括信息下发模块、身份认证模块和QKD秘钥分发模块,信息下发模块包括merkle树管理单元和认证路径单元,身份认证模块包括哈希表管理单元和节点信息管理单元,QKD秘钥分发模块包括随机序列单元和测量机组单元;所述软件定义传感节点包括身份认证单元、纠错单元以及秘钥分发单元;其中:信息下发模块,是SDN控制器收到传感节点发送来请求后,形成决策后将流表下发给下层节点信息;
身份认证模块,此模块是将节点身份信息加上交换得到的密钥哈希后形成哈希表,待后续验证身份使用;
QKD秘钥分发模块,控制器生成随机序列,将其转化成量子序列发送给交换机,交换机根据发来的序列自己随机生成一组量子序列,发给控制器,双方协商好索要使用的密钥;
哈希表管理单元,用于存储了所有的节点身份信息的哈希值与密钥;
节点信息管理单元,所有节点的身份信息;
随机序列单元,用于随机生成序列对用于测量;
测量基组单元,用于生成测量基组,并将序列转化为量子序列;
身份认证单元,用于进行哈希计算,并将计算的哈希值与控制器下发流表中的信息进行对比,来验证信息完整性;
密钥分发单元,用于与控制器相互分发密钥。
2.软件定义传感网络可信通信方法,其特征在于,包括以下步骤:S1、在控制器与接入点之间进行量子秘钥分发,控制器与接入点得到秘钥;
S2、得到秘钥后,将身份信息生成哈希表,控制器通过生成的哈希列表验证发送请求的节点身份信息;控制器验证请求节点的过程包括以下步骤:S21、确定接入网络的设备;
S22、网络设备将其MAC地址、ID、密钥、时间戳发送给控制器,时间戳为在生成密钥时生成的时间戳;
S23、控制端使用SHA算法将收到的网络设备的MAC地址、ID、密钥、时间戳加密钥值,即步骤S22得到的密钥,压缩成统一函数形式,构成一个哈希散列表;
S24、若网络设备向控制器发送请求,先验证设备的身份,并保证身份信息是在一定的时间阈值内;
S25、计算出哈希散列表中此设备相对应哈希函数的内容;
S26、对比设备的值与存储的内容是否一致;
S27、若对比成功,则进行数据传输,没有找到或对比错误,则丢弃请求,重新验证此节点是否为恶意节点;
S3、控制器与接入点之间进行信息的安全传递,具体包括:
S31、使用节点对应的哈希值生成一棵Merkel树;
S32、通过遍历算法计算出第一个叶节点的认证路径,并将树根一起写入流表,其他节点依次计算属于自己的认证路径;
S33、流表下发至目标节点后,目标节点使用认证路径计算出Merkel树根并与接收到的根值进行对比,验证一致则数据成功接收,否则向控制器报告错误信息;
S34、如果传感网络删除了某个节点则对Merkel树对应节点进行更新;
S35、如果传感节点添加某个节点数据,则返回至步骤S1先验证身份,再将其身份信息插入到叶子节点。
3.根据权利要求2所述的软件定义传感网络可信通信方法,其特征在于,在控制器与接入点之间进行量子秘钥分发包括以下步骤:S11、令交换机与控制器之间建立联系;
S12、控制器产生随机序列对a,随机选定测量基,生成基组,将此基组的发送给接入点;
S13、接入点根据收到的光子随机选择测量基,生成数据序列,接入点将使用的测量基组发送给控制器;
S14、控制器将从接入点收到的基组与控制器中的基组对比,得到两组基组相同的基组位,将相同的位置通知交换机;
S15、控制器和接入点通过这些相同基组位得到密钥。
4.根据权利要求2所述的软件定义传感网络可信通信方法,其特征在于,构建哈希散列表的过程包括:将节点的身份信息分为512bit大小的块,消息分解为n个块,哈希函数散列算法完成n次迭代,n次迭代的结果就是最终的哈希值,即256bit的数字摘要;
一个256‑bit的摘要的初始值H0,经过第一个数据块进行运算,得到H1,即完成了第一次迭代H1经过第二个数据块得到H2,…,依次处理,最后得到Hn,Hn即为最终的256‑bit消息摘要;
256‑bit的第i个数据块Hi包括8个小块,经过循环映射合并后得到散列字符串。
5.根据权利要求2所述的软件定义传感网络可信通信方法,其特征在于,Merkel树的遍历算法包括:若树高为H,h=H,leaf索引指向叶子节点,先将索引leaf所指节点的编号赋值给n,若n为偶数,则获取其兄弟节点的哈希值即n+1的值,送入栈Stack0;在遍历上一层的认证节点,令h=h‑1,获取h层的认证节点,令n=n/2,判断此时的n为偶数还是奇数,如果是偶数,认证节点编号为n+1,将n+1的值送入栈Stack1;如果为奇数,认证节点编号为n‑1,将n‑1的值送入栈Stack1;令h=h‑1,再查询h层的认证节点,直到H‑h=1,不再向上一层查询,最后直接将根节点的值存入栈中;
若n为奇数,获取其兄弟节点的哈希值即n‑1的值,送入栈Stack0;令h=h‑1,获取h层的认证节点,此时令n=(n‑1)/2,判断此时n为偶数还是奇数,若为偶数,认证节点编号为n+1;
将n+1的值送入栈Stack1;如果为奇数,认证节点编号为n‑1,将n‑1的值送入栈Stack1;再向上一层依次查询认证节点,直到H‑h=1,不再向上一层查询,最后直接将根节点的值存入栈中;
此时第一个叶节点查询完毕,接着查询下一个节点,令leaf=leaf+1,继续上述操作,一层一层地查找认证节点,将整个路径存储入栈中,这样一步步使leaf每次递增,直到没有节点,完成遍历。