一种安全高效的物联网实现方法
技术领域
本发明涉及一种实现方法,尤其涉及的是一种安全高效的物联网实现方法。
背景技术
在典型的物联网构架中,一个电子标签具有全球唯一的电子编码,将其附着在物品上标识目标对象。目前的物联网架构能够很好地跟踪目标对象,但仍存在以下不足:
1)用户只能通过数据库服务器来获取目标对象信息,无法实现与目标对象直接地点到点通信;
2)用户只能查询目标对象的信息,无法直接控制目标对象的状态;
3)目标对象信息只能通过读写器被动地读取,目标对象无法根据当前的状态主动请求数据更新或发出警报信息。
发明内容
发明目的:本发明所要解决的技术问题是针对现有技术的不足,提供一种安全高效的物联网实现方法。
技术方案:本发明公开了一种安全高效的物联网实现方法,所述物联网包括一个服务器和两个以上的节点,节点划分为生产者节点、消费者节点和普通节点;
一种类型的数据由一个数据名称唯一标识,一个数据名称由名称前缀和名称ID构成;一个节点由节点名称标识,一个节点名称由数据名称和深度值构成;一个节点能够拥有两个以上的节点名称;
生产者节点有权限产生、保存和提供一种类型的数据,一个消费者能够有权限获取一种类型的数据,普通节点能够保存和提供一种类型的数据;
针对一种类型的数据,只有一个生产者节点有权限产生该种类型的数据;
有权限获取一种类型数据的所有消费者节点构成一个多播组,一个多播组由一个多播地址唯一标识,针对每个多播组,第三方认证机构为该多播组分配一对公有秘钥和私有秘钥,该公有秘钥为该多播组的多播地址;第三方认证机构为每个生产者分配一对公有秘钥和私有秘钥,公有秘钥为该生产者的单播地址;第三方认证机构可以是证书授权中心的服务器;
所述物联网包含一个服务器,该服务器维护一个公有秘钥表,一个公有秘钥表项包含数据名称域、公有秘钥域和角色域,其中,消费者节点的角色域值为1,生产者节点的角色域值为0;
每个生产者节点对应一个数据树,该数据树的根节点为该生产者节点;
一个节点保存一个节点名称集合以记录自己所拥有的节点名称;
一个生产者节点通过发布消息创建数据树,一个发布消息包含消息类型、数据名称和深度域;
数据C1由数据名称NA1标识,生产者节点P1产生数据C1后,执行下述过程创建数据树:
步骤101:开始;
步骤102:生产者节点P1构建一个节点名称,该节点名称的数据名称域值为NA1,深度值为0,生产者节点P1将该节点名称加入到自己的节点名称集合中;生产者节点P1发送一个发布消息,该发布消息的消息类型为1,数据名称为NA1,深度为1;
步骤103:接收到发布消息的节点查看自己的节点名称集合,如果存在一个节点名称,该节点名称的数据名称等于该发布消息的数据名称且深度小于该发布消息中的深度,则执行步骤107,否则执行步骤104;
步骤104:接收到发布消息的节点查看自己的节点名称集合,如果存在一个节点名称,该节点名称的数据名称等于该发布消息的数据名称且深度大于该发布消息中的深度,则执行步骤105,否则执行步骤106;
步骤105:接收到发布消息的节点从自己的节点名称集合删除一个节点名称,该节点名称的数据名称等于该发布消息的数据名称且深度大于该发布消息中的深度;
步骤106:接收到发布消息的节点构建一个节点名称,该节点名称的数据名称等于该发布消息的数据名称且深度值等于该发布消息的深度值,将该节点名称加入到自己的节点名称集合中;该节点将接收到的发布消息的深度递增1,转发该发布消息,执行步骤103;
步骤107:结束。
生产者节点通过上述过程建立数据树,这样节点通过数据树无需路由发现过程即可获取自己需要的数据,上述过程有效限制了数据树的深度,因此节点到达生产者节点的路由路径长度大幅度降低,从而有效降低了数据通信延迟和代价。
本发明所述方法中,物联网中的服务器由节点名称标识,并保存一个节点名称集合用于保存自己的节点名称;
服务器对应一个数据树,该数据树的根节点为该服务器;
服务器S1执行下述过程创建数据树:
步骤201:开始;
步骤202:服务器S1构建一个节点名称,该节点名称的数据名称域值为空,深度值为0,将该节点名称加入到自己的节点名称集合中;服务器S1发送一个发布消息,该发布消息的消息类型为1,数据名称为空,深度为1;
步骤203:接收到发布消息的节点查看自己的节点名称集合,如果存在一个节点名称,该节点名称的数据名称等于该发布消息的数据名称且深度小于该发布消息中的深度,则执行步骤207,否则执行步骤204;
步骤204:接收到发布消息的节点查看自己的节点名称集合,如果存在一个节点名称,该节点名称的数据名称等于该发布消息的数据名称且深度大于该发布消息中的深度,则执行步骤205,否则执行步骤206;
步骤205:接收到发布消息的节点从自己的节点名称集合删除一个节点名称,该节点名称的数据名称等于该发布消息的数据名称且深度大于该发布消息中的深度;
步骤206:接收到发布消息的节点构建一个节点名称,该节点名称的数据名称等于该发布消息的数据名称且深度值等于该发布消息的深度值,将该节点名称加入到自己的节点名称集合中;该节点将接收到的发布消息的深度递增1,转发该发布消息,执行步骤203;
步骤207:结束。
服务器通过上述过程建立到达服务器的数据树,由于到达服务器的数据树无需路由发现过程即可自动实现路由,因此降低了节点与服务器之间的通信延迟和代价,此外,上述过程有效限制了数据树的深度,因此节点与服务器之间的的路由路径长度大幅度降低,进一步降低了节点与服务器之间的通信延迟和代价。
本发明所述方法中,消费者节点获取公有秘钥和私有秘钥后,使用注册消息向物联网内服务器注册该公有秘钥;
注册消息包含消息类型,数据名称,公有秘钥域,角色域和源节点名称域;
在网络内的服务器为S1,数据C1由数据名称NA1唯一标识,有权限获取数据C1的所有消费者节点构建成多播组MG1,多播组MG1的多播地址为MA1,消费者节点CS1为多播组MG1的成员的条件下,消费者节点CS1获取公有秘钥和私有秘钥后,公有秘钥为多播地址MA1,执行下述过程向服务器S1执行注册操作:
步骤301:开始;
步骤302:消费者节点CS1从节点名称集合中选择一个节点名称,该节点名称的数据名称为空,消费者节点CS1发送一个注册消息,该注册消息的消息类型为2,数据名称为NA1,公有秘钥域值为多播地址MA1,角色域值为1,源节点名称域值为选择的节点名称;
步骤303:如果服务器S1接收到该注册消息,则执行步骤307,否则执行步骤304;
步骤304:接收到注册消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称为空;如果选择的节点名称中的深度小于注册消息中的源节点名称中的深度,则执行步骤305,否则执行步骤306;
步骤305:接收到注册消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称为空,将注册消息的源节点名称更新为选择的节点名称,转发该注册消息,执行步骤303;
步骤306:接收到注册消息的节点丢弃该注册消息,执行步骤303;
步骤307:服务器S1接收到注册消息后,查看公有秘钥表,如果存在一个公有秘钥表项,该公有秘钥表项的数据名称域值,公有秘钥域值以及角色域值分别等于该注册消息中的数据名称域值,公有秘钥域值以及角色值,则执行步骤309,否则执行步骤308;
步骤308:服务器S1接收到注册消息后,创建一个公有秘钥表项,该公有秘钥表项的数据名称域值,公有秘钥域值以及角色域值分别等于该注册消息中的数据名称域值,公有秘钥域值以及角色值;
步骤309:结束。
消费者节点通过上述过程向服务器进行注册操作以维护自己的公共密钥等信息,这样,其他节点可以通过查询服务器可以获取所需节点的公共密钥从而实现安全通信。
本发明所述方法中,生产者节点获取公有秘钥和私有秘钥后,使用注册消息向网络内服务器注册该公有秘钥;
生产者节点P1有权限产生数据C1,数据C1由数据名称NA1唯一标识,生产者节点P1的单播地址为UA1;生产者节点P1获取公有秘钥和私有秘钥后,公有秘钥为单播地址UA1,执行下述过程向服务器S1执行注册操作:
步骤401:开始;
步骤402:生产者节点P1从节点名称集合中选择一个节点名称,该节点名称的数据名称为空,生产者节点P1发送一个注册消息,该注册消息的消息类型为2,数据名称为NA1,公有秘钥域值为单播地址UA1,角色域值为0,源节点名称域值为选择的节点名称;
步骤403:如果服务器S1接收到该注册消息,则执行步骤407,否则执行步骤404;
步骤404:接收到注册消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该注册消息源节点名称中的数据名称;如果选择的节点名称中的深度小于注册消息中的源节点名称中的深度,则执行步骤405,否则执行步骤406;
步骤405:接收到注册消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该注册消息源节点名称中的数据名称,将注册消息的源节点名称更新为选择的节点名称,转发该注册消息,执行步骤403;
步骤406:接收到注册消息的节点丢弃该注册消息,执行步骤403;
步骤407:服务器S1接收到注册消息后,查看公有秘钥表,如果存在一个公有秘钥表项,该公有秘钥表项的数据名称域值,公有秘钥域值以及角色域值分别等于该注册消息中的数据名称域值,公有秘钥域值以及角色值,则执行步骤409,否则执行步骤408;
步骤408:服务器S1接收到注册消息后,创建一个公有秘钥表项,该公有秘钥表项的数据名称域值,公有秘钥域值以及角色域值分别等于该注册消息中的数据名称域值,公有秘钥域值以及角色值;
步骤409:结束。
生产者节点通过上述过程向服务器进行注册操作以维护自己的公共密钥等信息,这样,其他节点可以通过查询服务器可以获取生产者节点的公共密钥从而实现安全通信。
本发明所述方法中,每个节点维护一个数据表,每个数据表项包含数据名称域和数据域;
消费者节点采用秘钥请求消息,秘钥响应消息,数据请求消息和数据响应消息获取数据;
秘钥请求消息包括消息类型,数据名称域,源节点名称域,目的节点名称域和负载域;秘钥请求消息的消息类型为3;
秘钥响应消息包括消息类型,数据名称域,目的节点名称域和负载域;秘钥响应消息的消息类型为4;
数据请求消息包括消息类型,数据名称域,源节点名称域,目的节点名称域和负载域;数据请求消息的消息类型为5;
数据响应消息包括消息类型,数据名称域,目的节点名称域和负载域;数据响应消息的消息类型为6;
网络内的服务器为S1,数据C1由数据名称NA1唯一标识,有权限获取数据C1的所有消费者节点构建成多播组MG1,多播组MG1的多播地址为MA1,数据C1由数据名称NA1标识;消费者节点CS1为多播组MG1的成员;生产者节点P1有权限产生数据C1,单播地址UA1;
如果消费者节点CS1需要获取数据C1且只有生产者节点P1能够提供数据C1,则消费者节点CS1通过下述过程从生产者节点P1获取数据C1:
步骤501:开始;
步骤502:消费者节点CS1从节点名称集合中选择一个节点名称,该节点名称的数据名称为空,消费者节点CS1发送一个秘钥请求消息,该秘钥请求消息的消息类型为3,数据名称为NA1,源节点名称和目的节点名称域值等于选择的节点名称,负载为角色值0;
步骤503:如果服务器S1接收到该秘钥请求消息,则执行步骤507,否则执行步骤504;
步骤504:接收到秘钥请求消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该秘钥请求消息目的节点名称中的数据名称;如果选择的节点名称中的深度小于秘钥请求消息中的目的节点名称中的深度,则执行步骤505,否则执行步骤506;
步骤505:接收到秘钥请求消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该秘钥请求消息目的节点名称中的数据名称,将该秘钥请求消息的目的节点名称更新为选择的节点名称,转发该秘钥请求消息,执行步骤503;
步骤506:接收到秘钥请求消息的节点丢弃该秘钥请求消息,执行步骤503;
步骤507:服务器S1接收到秘钥请求消息后,查看公有秘钥表,选择一个公有秘钥表项,该公有秘钥表项的数据名称域值以及角色域值分别等于该秘钥请求消息中的数据名称域值以及负载中的角色值,服务器S1发送一个秘钥响应消息,该秘钥响应消息的消息类型为4,数据名称等于该秘钥请求消息的数据名称,目的节点名称等于该秘钥请求消息的源节点名称,负载为选中的公有秘钥表项的公有秘钥域值;
步骤508:如果消费者节点CS1接收到该秘钥响应消息,则执行步骤512,否则执行步骤509;
步骤509:接收到秘钥响应消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该秘钥响应消息目的节点名称中的数据名称;如果选择的节点名称中的深度小于该秘钥响应消息中的目的节点名称中的深度,则执行步骤510,否则执行步骤511;
步骤510:接收到秘钥响应消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该秘钥响应消息目的节点名称中的数据名称,将该秘钥响应消息的目的节点名称更新为选择的节点名称,转发该秘钥响应消息,执行步骤508;
步骤511:接收到秘钥响应消息的节点丢弃该秘钥响应消息,执行步骤508;
步骤512:消费者节点CS1接收到秘钥响应消息后,利用该秘钥响应消息负载中的公有秘钥加密自己的公有秘钥,即多播地址MA1,消费者节点CS1从节点名称集合中选择一个节点名称,该节点名称的数据名称等于NA1,消费者节点CS1发送一个数据请求消息,该数据请求消息的消息类型为5,数据名称为NA1,源节点名称和目的节点名称域值等于选择的节点名称,负载为加密后的公有秘钥;
步骤513:如果生产者节点P1接收到该数据请求消息,则执行步骤517,否则执行步骤514;
步骤514:接收到数据请求消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该数据请求消息目的节点名称中的数据名称;如果选择的节点名称中的深度小于数据请求消息中的目的节点名称中的深度,则执行步骤515,否则执行步骤516;
步骤515:接收到数据请求消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该数据请求消息目的节点名称中的数据名称,将该数据请求消息的目的节点名称更新为选择的节点名称,转发该数据请求消息,执行步骤513;
步骤516:接收到数据请求消息的节点丢弃该数据请求消息,执行步骤513;
步骤517:生产者节点P1接收到数据请求消息后,利用自己的私有秘钥解密该数据请求消息负载中的数据从而获取消费者节点CS1的公有秘钥,利用消费者节点CS1的公有秘钥加密该数据请求消息数据名称所标识的数据;生产者节点P1发送一个数据响应消息,该数据响应消息的消息类型为6,数据名称等于该数据请求消息的数据名称,目的节点名称等于该数据请求消息的源节点名称,负载为加密的数据;
步骤518:如果消费者节点CS1接收到该数据响应消息,则执行步骤522,否则执行步骤519;
步骤519:接收到数据响应消息的节点创建一个数据表项,该数据表项的数据名称域值等于该数据响应消息的数据名称,数据域值等于该数据响应消息负载中的加密数据,同时接收到数据响应消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该数据响应消息目的节点名称中的数据名称,如果选择的节点名称中的深度小于该数据响应消息中的目的节点名称中的深度,则执行步骤520,否则执行步骤521;
步骤520:接收到数据响应消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该数据响应消息目的节点名称中的数据名称,将该数据响应消息的目的节点名称更新为选择的节点名称,转发该数据响应消息,执行步骤518;
步骤521:接收到数据响应消息的节点丢弃该数据响应消息,执行步骤518;
步骤522:消费者节点CS1接收到数据响应消息后,利用自己的私有秘钥解密该数据响应消息负载中的加密数据以获取数据C1;
步骤523:结束。
消费者节点CS1通过上述过程通过生产者节点获取数据,由于上述过程通过密钥对响应数据进行了加密,因此有效地保护了数据的安全性,即使恶意节点截获响应数据,由于没有私钥进行解密,因此也无法获取数据C1,因此确保了数据通信的安全性。
本发明所述方法中,网络内的服务器为S1,数据C1由数据名称NA1唯一标识,有权限获取数据C1的所有消费者节点构建成多播组MG1,多播组MG1的多播地址为MA1;消费者节点CS1为多播组MG1的成员;生产者节点P1有权限产生数据C1,单播地址UA1;
如果消费者节点CS1需要获取数据C1且除了生产者节点P1之外还有两个以上的节点能够提供数据C1,则消费者节点CS1通过下述过程从除了生产者节点P1之外的其他节点获取数据C1:
步骤601:开始;
步骤602:消费者节点CS1从节点名称集合中选择一个节点名称,该节点名称的数据名称为空,发送一个秘钥请求消息,该秘钥请求消息的消息类型为3,数据名称为NA1,源节点名称和目的节点名称域值等于选择的节点名称,负载为角色值0;
步骤603:如果服务器S1接收到该秘钥请求消息,则执行步骤607,否则执行步骤604;
步骤604:接收到秘钥请求消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该秘钥请求消息目的节点名称中的数据名称;如果选择的节点名称中的深度小于秘钥请求消息中的目的节点名称中的深度,则执行步骤605,否则执行步骤606;
步骤605:接收到秘钥请求消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该秘钥请求消息目的节点名称中的数据名称,将该秘钥请求消息的目的节点名称更新为选择的节点名称,转发该秘钥请求消息,执行步骤603;
步骤606:接收到秘钥请求消息的节点丢弃该秘钥请求消息,执行步骤603;
步骤607:服务器S1接收到秘钥请求消息后,查看公有秘钥表,选择一个公有秘钥表项,该公有秘钥表项的数据名称域值以及角色域值分别等于该秘钥请求消息中的数据名称域值以及负载中的角色值,发送一个秘钥响应消息,该秘钥响应消息的消息类型为4,数据名称等于该秘钥请求消息的数据名称,目的节点名称等于该秘钥请求消息的源节点名称,负载为选中的公有秘钥表项的公有秘钥域值;
步骤608:如果消费者节点CS1接收到该秘钥响应消息,则执行步骤612,否则执行步骤609;
步骤609:接收到秘钥响应消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该秘钥响应消息目的节点名称中的数据名称;如果选择的节点名称中的深度小于该秘钥响应消息中的目的节点名称中的深度,则执行步骤610,否则执行步骤611;
步骤610:接收到秘钥响应消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该秘钥响应消息目的节点名称中的数据名称,将该秘钥响应消息的目的节点名称更新为选择的节点名称,转发该秘钥响应消息,执行步骤608;
步骤611:接收到秘钥响应消息的节点丢弃该秘钥响应消息,执行步骤608;
步骤612:消费者节点CS1接收到秘钥响应消息后,利用该秘钥响应消息负载中的公有秘钥加密自己的公有秘钥,即多播地址MA1,从节点名称集合中选择一个节点名称,该节点名称的数据名称等于NA1,发送一个数据请求消息,该数据请求消息的消息类型为5,数据名称为NA1,源节点名称和目的节点名称域值等于选择的节点名称,负载为加密后的公有秘钥;
步骤613:接收到数据请求消息的节点查看数据表,如果存在一个数据表项,该数据表项的数据名称等于该数据请求消息的数据名称,则执行步骤617,否则执行步骤614;
步骤614:接收到数据请求消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该数据请求消息目的节点名称中的数据名称;如果选择的节点名称中的深度小于数据请求消息中的目的节点名称中的深度,则执行步骤615,否则执行步骤616;
步骤615:接收到数据请求消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该数据请求消息目的节点名称中的数据名称,将该数据请求消息的目的节点名称更新为选择的节点名称,转发该数据请求消息,执行步骤613;
步骤616:接收到数据请求消息的节点丢弃该数据请求消息,执行步骤613;
步骤617:接收到数据请求消息的节点选择一个数据表项,该数据表项的数据名称等于该数据请求消息的数据名称;该节点发送一个数据响应消息,该数据响应消息的消息类型为6,数据名称等于该数据请求消息的数据名称,目的节点名称等于该数据请求消息的源节点名称,负载为该数据表项中的数据域值;
步骤618:如果消费者节点CS1接收到该数据响应消息,则执行步骤622,否则执行步骤619;
步骤619:接收到数据响应消息的节点创建一个数据表项,该数据表项的数据名称域值等于该数据响应消息的数据名称,数据域值等于该数据响应消息负载中的数据,同时从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该数据响应消息目的节点名称中的数据名称,如果选择的节点名称中的深度小于该数据响应消息中的目的节点名称中的深度,则执行步骤620,否则执行步骤621;
步骤620:接收到数据响应消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该数据响应消息目的节点名称中的数据名称,将该数据响应消息的目的节点名称更新为选择的节点名称,转发该数据响应消息,执行步骤618;
步骤621:接收到数据响应消息的节点丢弃该数据响应消息,执行步骤618;
步骤622:消费者节点CS1接收到数据响应消息后,利用自己的私有秘钥解密该数据响应消息负载中的加密数据以获取数据C1;
步骤623:结束。
消费者节点CS1通过上述过程从中间节点获取数据,由于消费者节点到达中间节点的路径长度要小于消费者节点到达生产者节点的路径长度,因此降低了数据通信延迟和代价。此外,上述过程通过密钥对响应数据进行了加密,因此有效地保护了数据的安全性。
本发明所述方法中,生产者节点P1有权限产生数据C1,单播地址UA1;如果生产者节点P1更新了数据C1,则采用更新消息执行更新操作;更新消息包含消息类型,数据名称域,目的节点名称域和负载域;网络中的服务器为S1;
步骤701:开始;
步骤702:生产者节点P1从节点名称集合中选择一个节点名称,该节点名称的数据名称为空,生产者节点P1发送一个秘钥请求消息,该秘钥请求消息的消息类型为3,数据名称为NA1,源节点名称和目的节点名称域值等于选择的节点名称,负载为角色值1;
步骤703:如果服务器S1接收到该秘钥请求消息,则执行步骤707,否则执行步骤704;
步骤704:接收到秘钥请求消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该秘钥请求消息目的节点名称中的数据名称;如果选择的节点名称中的深度小于秘钥请求消息中的目的节点名称中的深度,则执行步骤705,否则执行步骤706;
步骤705:接收到秘钥请求消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该秘钥请求消息目的节点名称中的数据名称,将该秘钥请求消息的目的节点名称更新为选择的节点名称,转发该秘钥请求消息,执行步骤703;
步骤706:接收到秘钥请求消息的节点丢弃该秘钥请求消息,执行步骤703;
步骤707:服务器S1接收到秘钥请求消息后,查看公有秘钥表,选择一个公有秘钥表项,该公有秘钥表项的数据名称域值以及角色域值分别等于该秘钥请求消息中的数据名称域值以及负载中的角色值,服务器S1发送一个秘钥响应消息,该秘钥响应消息的消息类型为4,数据名称等于该秘钥请求消息的数据名称,目的节点名称等于该秘钥请求消息的源节点名称,负载为选中的公有秘钥表项的公有秘钥域值;
步骤708:如果生产者节点P1接收到该秘钥响应消息,则执行步骤712,否则执行步骤709;
步骤709:接收到秘钥响应消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该秘钥响应消息目的节点名称中的数据名称;如果选择的节点名称中的深度小于该秘钥响应消息中的目的节点名称中的深度,则执行步骤710,否则执行步骤711;
步骤710:接收到秘钥响应消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该秘钥响应消息目的节点名称中的数据名称,将该秘钥响应消息的目的节点名称更新为选择的节点名称,转发该秘钥响应消息,执行步骤708;
步骤711:接收到秘钥响应消息的节点丢弃该秘钥响应消息,执行步骤708;
步骤712:生产者节点P1接收到秘钥响应消息后,利用该秘钥响应消息负载中的公有秘钥加密更新的数据,生产者节点P1从节点名称集合中选择一个节点名称,该节点名称的数据名称等于NA1,发送一个更新消息,该更新消息的消息类型为7,数据名称为NA1,目的节点名称域值等于选择的节点名称,负载为加密的数据;
步骤713:接收到更新消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该更新消息目的节点名称中的数据名称;如果该节点为多播组MG1的成员,则使用自己的私有秘钥解密更新消息负载中的加密数据从而获取更新后的数据;如果该节点的数据表中存在一个数据表项,该数据表项的数据名称等于该更新消息的数据名称,则将该数据表项的数据域值更新为该更新消息负载中的加密数据;如果该节点选择的节点名称中的深度小于更新消息中的目的节点名称中的深度,则执行步骤714,否则执行步骤715;
步骤714:接收到更新消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该更新消息目的节点名称中的数据名称,将该更新消息的目的节点名称更新为选择的节点名称,转发该更新消息,执行步骤713;
步骤715:接收到更新消息的节点丢弃该更新消息;
步骤716:结束。
生产者节点通过上述过程实现的数据的更新操作从而确保消费者节点获取实时正确的数据。由于上述过程通过密钥对更新的数据进行了加密,因此有效地保护了数据的安全性。
有益效果:本发明提供了一种安全高效的物联网实现方法,节点通过本发明提供的方法能够快速获取数据,从而降低数据通信延迟和代价,提高服务质量。本发明可应用于农业工程化、智能医疗等诸多领域,具有广泛的应用前景。
附图说明
下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
图1为本发明所述的生产者节点创建数据树流程示意图。
图2为本发明所述的服务器创建数据树流程示意图。
图3为本发明所述的消费者节点注册流程示意图。
图4为本发明所述的生产者节点注册流程示意图。
图5为本发明所述的数据通信流程示意图。
图6为本发明所述的获取数据流程示意图。
图7为本发明所述的更新数据流程示意图。
具体实施方式:
本发明提供了一种安全高效的物联网实现方法,节点通过本发明提供的方法能够快速获取数据,从而降低数据通信延迟和代价,提高服务质量。本发明可应用于农业工程化、智能医疗等诸多领域,具有广泛的应用前景。
图1为本发明所述的生产者节点创建数据树流程示意图。所述物联网包括一个服务器和两个以上的节点,节点划分为生产者节点、消费者节点和普通节点;
一种类型的数据由一个数据名称唯一标识,一个数据名称由名称前缀和名称ID构成;一个节点由节点名称标识,一个节点名称由数据名称和深度值构成;一个节点能够拥有两个以上的节点名称;
生产者节点有权限产生、保存和提供一种类型的数据,一个消费者能够有权限获取一种类型的数据,普通节点能够保存和提供一种类型的数据;
针对一种类型的数据,只有一个生产者节点有权限产生该种类型的数据;
有权限获取一种类型数据的所有消费者节点构成一个多播组,一个多播组由一个多播地址唯一标识,针对每个多播组,第三方认证机构为该多播组分配一对公有秘钥和私有秘钥,该公有秘钥为该多播组的多播地址;第三方认证机构为每个生产者分配一对公有秘钥和私有秘钥,公有秘钥为该生产者的单播地址;
所述物联网包含一个服务器,该服务器维护一个公有秘钥表,一个公有秘钥表项包含数据名称域、公有秘钥域和角色域,其中,消费者节点的角色域值为1,生产者节点的角色域值为0;
每个生产者节点对应一个数据树,该数据树的根节点为该生产者节点;
一个节点保存一个节点名称集合以记录自己所拥有的节点名称;
一个生产者节点通过发布消息创建数据树,一个发布消息包含消息类型、数据名称和深度域;
数据C1由数据名称NA1标识,生产者节点P1产生数据C1后,执行下述过程创建数据树:
步骤101:开始;
步骤102:生产者节点P1构建一个节点名称,该节点名称的数据名称域值为NA1,深度值为0,生产者节点P1将该节点名称加入到自己的节点名称集合中;生产者节点P1发送一个发布消息,该发布消息的消息类型为1,数据名称为NA1,深度为1;
步骤103:接收到发布消息的节点查看自己的节点名称集合,如果存在一个节点名称,该节点名称的数据名称等于该发布消息的数据名称且深度小于该发布消息中的深度,则执行步骤107,否则执行步骤104;
步骤104:接收到发布消息的节点查看自己的节点名称集合,如果存在一个节点名称,该节点名称的数据名称等于该发布消息的数据名称且深度大于该发布消息中的深度,则执行步骤105,否则执行步骤106;
步骤105:接收到发布消息的节点从自己的节点名称集合删除一个节点名称,该节点名称的数据名称等于该发布消息的数据名称且深度大于该发布消息中的深度;
步骤106:接收到发布消息的节点构建一个节点名称,该节点名称的数据名称等于该发布消息的数据名称且深度值等于该发布消息的深度值,将该节点名称加入到自己的节点名称集合中;该节点将接收到的发布消息的深度递增1,转发该发布消息,执行步骤103;
步骤107:结束。
图2为本发明所述的服务器创建数据树流程示意图。物联网中的服务器由节点名称标识,并保存一个节点名称集合用于保存自己的节点名称;
服务器对应一个数据树,该数据树的根节点为该服务器;
服务器S1执行下述过程创建数据树:
步骤201:开始;
步骤202:服务器S1构建一个节点名称,该节点名称的数据名称域值为空,深度值为0,将该节点名称加入到自己的节点名称集合中;服务器S1发送一个发布消息,该发布消息的消息类型为1,数据名称为空,深度为1;
步骤203:接收到发布消息的节点查看自己的节点名称集合,如果存在一个节点名称,该节点名称的数据名称等于该发布消息的数据名称且深度小于该发布消息中的深度,则执行步骤207,否则执行步骤204;
步骤204:接收到发布消息的节点查看自己的节点名称集合,如果存在一个节点名称,该节点名称的数据名称等于该发布消息的数据名称且深度大于该发布消息中的深度,则执行步骤205,否则执行步骤206;
步骤205:接收到发布消息的节点从自己的节点名称集合删除一个节点名称,该节点名称的数据名称等于该发布消息的数据名称且深度大于该发布消息中的深度;
步骤206:接收到发布消息的节点构建一个节点名称,该节点名称的数据名称等于该发布消息的数据名称且深度值等于该发布消息的深度值,将该节点名称加入到自己的节点名称集合中;该节点将接收到的发布消息的深度递增1,转发该发布消息,执行步骤203;
步骤207:结束。
图3为本发明所述的消费者节点注册流程示意图。消费者节点获取公有秘钥和私有秘钥后,使用注册消息向物联网内服务器注册该公有秘钥;
注册消息包含消息类型,数据名称,公有秘钥域,角色域和源节点名称域;
在网络内的服务器为S1,数据C1由数据名称NA1唯一标识,有权限获取数据C1的所有消费者节点构建成多播组MG1,多播组MG1的多播地址为MA1,消费者节点CS1为多播组MG1的成员的条件下,消费者节点CS1获取公有秘钥和私有秘钥后,公有秘钥为多播地址MA1,执行下述过程向服务器S1执行注册操作:
步骤301:开始;
步骤302:消费者节点CS1从节点名称集合中选择一个节点名称,该节点名称的数据名称为空,消费者节点CS1发送一个注册消息,该注册消息的消息类型为2,数据名称为NA1,公有秘钥域值为多播地址MA1,角色域值为1,源节点名称域值为选择的节点名称;
步骤303:如果服务器S1接收到该注册消息,则执行步骤307,否则执行步骤304;
步骤304:接收到注册消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称为空;如果选择的节点名称中的深度小于注册消息中的源节点名称中的深度,则执行步骤305,否则执行步骤306;
步骤305:接收到注册消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称为空,将注册消息的源节点名称更新为选择的节点名称,转发该注册消息,执行步骤303;
步骤306:接收到注册消息的节点丢弃该注册消息,执行步骤303;
步骤307:服务器S1接收到注册消息后,查看公有秘钥表,如果存在一个公有秘钥表项,该公有秘钥表项的数据名称域值,公有秘钥域值以及角色域值分别等于该注册消息中的数据名称域值,公有秘钥域值以及角色值,则执行步骤309,否则执行步骤308;
步骤308:服务器S1接收到注册消息后,创建一个公有秘钥表项,该公有秘钥表项的数据名称域值,公有秘钥域值以及角色域值分别等于该注册消息中的数据名称域值,公有秘钥域值以及角色值;
步骤309:结束。
图4为本发明所述的生产者节点注册流程示意图。生产者节点获取公有秘钥和私有秘钥后,使用注册消息向网络内服务器注册该公有秘钥;
生产者节点P1有权限产生数据C1,数据C1由数据名称NA1唯一标识,生产者节点P1的单播地址为UA1;生产者节点P1获取公有秘钥和私有秘钥后,公有秘钥为单播地址UA1,执行下述过程向服务器S1执行注册操作:
步骤401:开始;
步骤402:生产者节点P1从节点名称集合中选择一个节点名称,该节点名称的数据名称为空,生产者节点P1发送一个注册消息,该注册消息的消息类型为2,数据名称为NA1,公有秘钥域值为单播地址UA1,角色域值为0,源节点名称域值为选择的节点名称;
步骤403:如果服务器S1接收到该注册消息,则执行步骤407,否则执行步骤404;
步骤404:接收到注册消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该注册消息源节点名称中的数据名称;如果选择的节点名称中的深度小于注册消息中的源节点名称中的深度,则执行步骤405,否则执行步骤406;
步骤405:接收到注册消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该注册消息源节点名称中的数据名称,将注册消息的源节点名称更新为选择的节点名称,转发该注册消息,执行步骤403;
步骤406:接收到注册消息的节点丢弃该注册消息,执行步骤403;
步骤407:服务器S1接收到注册消息后,查看公有秘钥表,如果存在一个公有秘钥表项,该公有秘钥表项的数据名称域值,公有秘钥域值以及角色域值分别等于该注册消息中的数据名称域值,公有秘钥域值以及角色值,则执行步骤409,否则执行步骤408;
步骤408:服务器S1接收到注册消息后,创建一个公有秘钥表项,该公有秘钥表项的数据名称域值,公有秘钥域值以及角色域值分别等于该注册消息中的数据名称域值,公有秘钥域值以及角色值;
步骤409:结束。
图5为本发明所述的数据通信流程示意图。每个节点维护一个数据表,每个数据表项包含数据名称域和数据域;
消费者节点采用秘钥请求消息,秘钥响应消息,数据请求消息和数据响应消息获取数据;
秘钥请求消息包括消息类型,数据名称域,源节点名称域,目的节点名称域和负载域;秘钥请求消息的消息类型为3;
秘钥响应消息包括消息类型,数据名称域,目的节点名称域和负载域;秘钥响应消息的消息类型为4;
数据请求消息包括消息类型,数据名称域,源节点名称域,目的节点名称域和负载域;数据请求消息的消息类型为5;
数据响应消息包括消息类型,数据名称域,目的节点名称域和负载域;数据响应消息的消息类型为6;
网络内的服务器为S1,数据C1由数据名称NA1唯一标识,有权限获取数据C1的所有消费者节点构建成多播组MG1,多播组MG1的多播地址为MA1,数据C1由数据名称NA1标识;消费者节点CS1为多播组MG1的成员;生产者节点P1有权限产生数据C1,单播地址UA1;
如果消费者节点CS1需要获取数据C1且只有生产者节点P1能够提供数据C1,则消费者节点CS1通过下述过程从生产者节点P1获取数据C1:
步骤501:开始;
步骤502:消费者节点CS1从节点名称集合中选择一个节点名称,该节点名称的数据名称为空,消费者节点CS1发送一个秘钥请求消息,该秘钥请求消息的消息类型为3,数据名称为NA1,源节点名称和目的节点名称域值等于选择的节点名称,负载为角色值0;
步骤503:如果服务器S1接收到该秘钥请求消息,则执行步骤507,否则执行步骤504;
步骤504:接收到秘钥请求消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该秘钥请求消息目的节点名称中的数据名称;如果选择的节点名称中的深度小于秘钥请求消息中的目的节点名称中的深度,则执行步骤505,否则执行步骤506;
步骤505:接收到秘钥请求消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该秘钥请求消息目的节点名称中的数据名称,将该秘钥请求消息的目的节点名称更新为选择的节点名称,转发该秘钥请求消息,执行步骤503;
步骤506:接收到秘钥请求消息的节点丢弃该秘钥请求消息,执行步骤503;
步骤507:服务器S1接收到秘钥请求消息后,查看公有秘钥表,选择一个公有秘钥表项,该公有秘钥表项的数据名称域值以及角色域值分别等于该秘钥请求消息中的数据名称域值以及负载中的角色值,服务器S1发送一个秘钥响应消息,该秘钥响应消息的消息类型为4,数据名称等于该秘钥请求消息的数据名称,目的节点名称等于该秘钥请求消息的源节点名称,负载为选中的公有秘钥表项的公有秘钥域值;
步骤508:如果消费者节点CS1接收到该秘钥响应消息,则执行步骤512,否则执行步骤509;
步骤509:接收到秘钥响应消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该秘钥响应消息目的节点名称中的数据名称;如果选择的节点名称中的深度小于该秘钥响应消息中的目的节点名称中的深度,则执行步骤510,否则执行步骤511;
步骤510:接收到秘钥响应消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该秘钥响应消息目的节点名称中的数据名称,将该秘钥响应消息的目的节点名称更新为选择的节点名称,转发该秘钥响应消息,执行步骤508;
步骤511:接收到秘钥响应消息的节点丢弃该秘钥响应消息,执行步骤508;
步骤512:消费者节点CS1接收到秘钥响应消息后,利用该秘钥响应消息负载中的公有秘钥加密自己的公有秘钥,即多播地址MA1,消费者节点CS1从节点名称集合中选择一个节点名称,该节点名称的数据名称等于NA1,消费者节点CS1发送一个数据请求消息,该数据请求消息的消息类型为5,数据名称为NA1,源节点名称和目的节点名称域值等于选择的节点名称,负载为加密后的公有秘钥;
步骤513:如果生产者节点P1接收到该数据请求消息,则执行步骤517,否则执行步骤514;
步骤514:接收到数据请求消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该数据请求消息目的节点名称中的数据名称;如果选择的节点名称中的深度小于数据请求消息中的目的节点名称中的深度,则执行步骤515,否则执行步骤516;
步骤515:接收到数据请求消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该数据请求消息目的节点名称中的数据名称,将该数据请求消息的目的节点名称更新为选择的节点名称,转发该数据请求消息,执行步骤513;
步骤516:接收到数据请求消息的节点丢弃该数据请求消息,执行步骤513;
步骤517:生产者节点P1接收到数据请求消息后,利用自己的私有秘钥解密该数据请求消息负载中的数据从而获取消费者节点CS1的公有秘钥,利用消费者节点CS1的公有秘钥加密该数据请求消息数据名称所标识的数据;生产者节点P1发送一个数据响应消息,该数据响应消息的消息类型为6,数据名称等于该数据请求消息的数据名称,目的节点名称等于该数据请求消息的源节点名称,负载为加密的数据;
步骤518:如果消费者节点CS1接收到该数据响应消息,则执行步骤522,否则执行步骤519;
步骤519:接收到数据响应消息的节点创建一个数据表项,该数据表项的数据名称域值等于该数据响应消息的数据名称,数据域值等于该数据响应消息负载中的加密数据,同时接收到数据响应消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该数据响应消息目的节点名称中的数据名称,如果选择的节点名称中的深度小于该数据响应消息中的目的节点名称中的深度,则执行步骤520,否则执行步骤521;
步骤520:接收到数据响应消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该数据响应消息目的节点名称中的数据名称,将该数据响应消息的目的节点名称更新为选择的节点名称,转发该数据响应消息,执行步骤518;
步骤521:接收到数据响应消息的节点丢弃该数据响应消息,执行步骤518;
步骤522:消费者节点CS1接收到数据响应消息后,利用自己的私有秘钥解密该数据响应消息负载中的加密数据以获取数据C1;
步骤523:结束。
图6为本发明所述的获取数据流程示意图。网络内的服务器为S1,数据C1由数据名称NA1唯一标识,有权限获取数据C1的所有消费者节点构建成多播组MG1,多播组MG1的多播地址为MA1;消费者节点CS1为多播组MG1的成员;生产者节点P1有权限产生数据C1,单播地址UA1;
如果消费者节点CS1需要获取数据C1且除了生产者节点P1之外还有两个以上的节点能够提供数据C1,则消费者节点CS1通过下述过程从除了生产者节点P1之外的其他节点获取数据C1:
步骤601:开始;
步骤602:消费者节点CS1从节点名称集合中选择一个节点名称,该节点名称的数据名称为空,发送一个秘钥请求消息,该秘钥请求消息的消息类型为3,数据名称为NA1,源节点名称和目的节点名称域值等于选择的节点名称,负载为角色值0;
步骤603:如果服务器S1接收到该秘钥请求消息,则执行步骤607,否则执行步骤604;
步骤604:接收到秘钥请求消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该秘钥请求消息目的节点名称中的数据名称;如果选择的节点名称中的深度小于秘钥请求消息中的目的节点名称中的深度,则执行步骤605,否则执行步骤606;
步骤605:接收到秘钥请求消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该秘钥请求消息目的节点名称中的数据名称,将该秘钥请求消息的目的节点名称更新为选择的节点名称,转发该秘钥请求消息,执行步骤603;
步骤606:接收到秘钥请求消息的节点丢弃该秘钥请求消息,执行步骤603;
步骤607:服务器S1接收到秘钥请求消息后,查看公有秘钥表,选择一个公有秘钥表项,该公有秘钥表项的数据名称域值以及角色域值分别等于该秘钥请求消息中的数据名称域值以及负载中的角色值,发送一个秘钥响应消息,该秘钥响应消息的消息类型为4,数据名称等于该秘钥请求消息的数据名称,目的节点名称等于该秘钥请求消息的源节点名称,负载为选中的公有秘钥表项的公有秘钥域值;
步骤608:如果消费者节点CS1接收到该秘钥响应消息,则执行步骤612,否则执行步骤609;
步骤609:接收到秘钥响应消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该秘钥响应消息目的节点名称中的数据名称;如果选择的节点名称中的深度小于该秘钥响应消息中的目的节点名称中的深度,则执行步骤610,否则执行步骤611;
步骤610:接收到秘钥响应消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该秘钥响应消息目的节点名称中的数据名称,将该秘钥响应消息的目的节点名称更新为选择的节点名称,转发该秘钥响应消息,执行步骤608;
步骤611:接收到秘钥响应消息的节点丢弃该秘钥响应消息,执行步骤608;
步骤612:消费者节点CS1接收到秘钥响应消息后,利用该秘钥响应消息负载中的公有秘钥加密自己的公有秘钥,即多播地址MA1,从节点名称集合中选择一个节点名称,该节点名称的数据名称等于NA1,发送一个数据请求消息,该数据请求消息的消息类型为5,数据名称为NA1,源节点名称和目的节点名称域值等于选择的节点名称,负载为加密后的公有秘钥;
步骤613:接收到数据请求消息的节点查看数据表,如果存在一个数据表项,该数据表项的数据名称等于该数据请求消息的数据名称,则执行步骤617,否则执行步骤614;
步骤614:接收到数据请求消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该数据请求消息目的节点名称中的数据名称;如果选择的节点名称中的深度小于数据请求消息中的目的节点名称中的深度,则执行步骤615,否则执行步骤616;
步骤615:接收到数据请求消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该数据请求消息目的节点名称中的数据名称,将该数据请求消息的目的节点名称更新为选择的节点名称,转发该数据请求消息,执行步骤613;
步骤616:接收到数据请求消息的节点丢弃该数据请求消息,执行步骤613;
步骤617:接收到数据请求消息的节点选择一个数据表项,该数据表项的数据名称等于该数据请求消息的数据名称;该节点发送一个数据响应消息,该数据响应消息的消息类型为6,数据名称等于该数据请求消息的数据名称,目的节点名称等于该数据请求消息的源节点名称,负载为该数据表项中的数据域值;
步骤618:如果消费者节点CS1接收到该数据响应消息,则执行步骤622,否则执行步骤619;
步骤619:接收到数据响应消息的节点创建一个数据表项,该数据表项的数据名称域值等于该数据响应消息的数据名称,数据域值等于该数据响应消息负载中的数据,同时从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该数据响应消息目的节点名称中的数据名称,如果选择的节点名称中的深度小于该数据响应消息中的目的节点名称中的深度,则执行步骤620,否则执行步骤621;
步骤620:接收到数据响应消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该数据响应消息目的节点名称中的数据名称,将该数据响应消息的目的节点名称更新为选择的节点名称,转发该数据响应消息,执行步骤618;
步骤621:接收到数据响应消息的节点丢弃该数据响应消息,执行步骤618;
步骤622:消费者节点CS1接收到数据响应消息后,利用自己的私有秘钥解密该数据响应消息负载中的加密数据以获取数据C1;
步骤623:结束。
图7为本发明所述的更新数据流程示意图。生产者节点P1有权限产生数据C1,单播地址UA1;如果生产者节点P1更新了数据C1,则采用更新消息执行更新操作;更新消息包含消息类型,数据名称域,目的节点名称域和负载域;网络中的服务器为S1;
步骤701:开始;
步骤702:生产者节点P1从节点名称集合中选择一个节点名称,该节点名称的数据名称为空,生产者节点P1发送一个秘钥请求消息,该秘钥请求消息的消息类型为3,数据名称为NA1,源节点名称和目的节点名称域值等于选择的节点名称,负载为角色值1;
步骤703:如果服务器S1接收到该秘钥请求消息,则执行步骤707,否则执行步骤704;
步骤704:接收到秘钥请求消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该秘钥请求消息目的节点名称中的数据名称;如果选择的节点名称中的深度小于秘钥请求消息中的目的节点名称中的深度,则执行步骤705,否则执行步骤706;
步骤705:接收到秘钥请求消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该秘钥请求消息目的节点名称中的数据名称,将该秘钥请求消息的目的节点名称更新为选择的节点名称,转发该秘钥请求消息,执行步骤703;
步骤706:接收到秘钥请求消息的节点丢弃该秘钥请求消息,执行步骤703;
步骤707:服务器S1接收到秘钥请求消息后,查看公有秘钥表,选择一个公有秘钥表项,该公有秘钥表项的数据名称域值以及角色域值分别等于该秘钥请求消息中的数据名称域值以及负载中的角色值,服务器S1发送一个秘钥响应消息,该秘钥响应消息的消息类型为4,数据名称等于该秘钥请求消息的数据名称,目的节点名称等于该秘钥请求消息的源节点名称,负载为选中的公有秘钥表项的公有秘钥域值;
步骤708:如果生产者节点P1接收到该秘钥响应消息,则执行步骤712,否则执行步骤709;
步骤709:接收到秘钥响应消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该秘钥响应消息目的节点名称中的数据名称;如果选择的节点名称中的深度小于该秘钥响应消息中的目的节点名称中的深度,则执行步骤710,否则执行步骤711;
步骤710:接收到秘钥响应消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该秘钥响应消息目的节点名称中的数据名称,将该秘钥响应消息的目的节点名称更新为选择的节点名称,转发该秘钥响应消息,执行步骤708;
步骤711:接收到秘钥响应消息的节点丢弃该秘钥响应消息,执行步骤708;
步骤712:生产者节点P1接收到秘钥响应消息后,利用该秘钥响应消息负载中的公有秘钥加密更新的数据,生产者节点P1从节点名称集合中选择一个节点名称,该节点名称的数据名称等于NA1,发送一个更新消息,该更新消息的消息类型为7,数据名称为NA1,目的节点名称域值等于选择的节点名称,负载为加密的数据;
步骤713:接收到更新消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该更新消息目的节点名称中的数据名称;如果该节点为多播组MG1的成员,则使用自己的私有秘钥解密更新消息负载中的加密数据从而获取更新后的数据;如果该节点的数据表中存在一个数据表项,该数据表项的数据名称等于该更新消息的数据名称,则将该数据表项的数据域值更新为该更新消息负载中的加密数据;如果该节点选择的节点名称中的深度小于更新消息中的目的节点名称中的深度,则执行步骤714,否则执行步骤715;
步骤714:接收到更新消息的节点从自己的节点名称集合中选择一个节点名称,该节点名称的数据名称等于该更新消息目的节点名称中的数据名称,将该更新消息的目的节点名称更新为选择的节点名称,转发该更新消息,执行步骤713;
步骤715:接收到更新消息的节点丢弃该更新消息;
步骤716:结束。
实施例1
基于表1的仿真参数,本实施例模拟了本发明中的一种安全高效的物联网实现方法,性能分析如下:当数据传输量增加时,网络性能下降,数据获取延迟有所增加,当数据传输量减少时,网络性能增加,数据获取延迟有所下降,数据获取的平均延迟为0.38s。
表1仿真参数
本发明提供了一种安全高效的物联网实现方法的思路,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部份均可用现有技术加以实现。