一种安全的物联网通讯协议及方法与流程

文档序号:11524264阅读:776来源:国知局
一种安全的物联网通讯协议及方法与流程

本发明涉及通讯领域,具体涉及应用到物联网通讯、移动端消息通信的领域。



背景技术:

本发明方法涉及https、tcp、对称加密与协议解析等内容。即通过https登录获取对称密钥、token与tcp服务器地址,然后连接tcp服务器,通过自定义协议进行验证,最后开始加密的消息通讯的过程。

与本发明最相近的方法有cn103747004a樊建等人提出的一种物联网平台通信协议的实现方法,包括如下步骤:设计平台通信协议枚举类型;设定平台通信协议内容;序列化平台通信协议;协议解析。它解决了物联网平台传输数据量大、自成体系、难以兼容其他系统及难以扩展等缺陷。但在安全性能方面有待提升。



技术实现要素:

目前的物联网通讯协议一般是消息序列化后与协议头打包,然后直接发送到网络中。这种方式导致了通信的不安全,传输的数据应该经过安全的编码后再送入互联网中。而本发明方法克服此缺点,通过https登录获取对称密钥、token与tcp服务器地址,然后连接tcp服务器,通过自定义协议进行验证,最后开始加密的消息通讯的过程,提供一种安全可靠的通信协议。

图1是该协议实现的流程框图。主要包括登录https服务器、获取aes密钥与token、登录tcp服务器、维持连接与发送接收数据包四个步骤。

现有的物联网协议安全性都是通过tls来保证,这使得每个心跳包、不需要加密的消息等都必须运算加解密,无法灵活地选择性加密,因此服务器具有很大的计算压力,而且心跳包加密后,就变成了几十字节,而心跳包正是占据了整个通信系统的绝大部分流量,这将导致流量翻几倍甚至几十倍,非常浪费带宽。本发明采用了极具安全性的登录验证方式来交换aes密钥与token,并采用简易的二进制协议通信,心跳包仅仅2字节,使得tcp流量大大降低,并且可以灵活地选择加密数据字段,具有tls同样高级别的安全性。此外,本发明非常适合用于分布式架构。

附图说明

图1流程框图;

图2tcp接入验证流程图;

图3集群架构图;

图4逻辑架构图。

具体实施方式

下面结合实施例及附图对本发明作进一步详细的描述

一、登录

首先通过帐号密码登录https服务器,具体方式为两步:第一步向https服务器发送get请求,参数为帐号,服务器记录并返回一个随机数,第二步post提交表单,有userid字段为帐号,pwd字段为(随机数+帐号+密码的哈希值的)哈希值,服务器从记录中读取随机数,从数据库读取密码,进行相同计算后验证登录。

二、获取对称密钥与tcp接入地址

登录验证后,https服务器查询tcp服务器列表,随机选取一个,并生成aes密钥、token,返回给客户端,并通过消息队列把客户端信息(帐号、token、aes密钥等)发送到选中的tcp服务器。tcp服务器列表生成方式为:通过etcd服务发现,每个tcp服务器启动后,都会向etcd注册,https服务器可实时地接收到列表更新,若有tcp服务器故障或者获取心跳包超时,则从列表中删除该地址。消息队列采用nats,每个tcp服务器启动后生成自己的随机名字并向etcd注册,然后向nats订阅自己名称的主题,https服务器通过etcd得知每个tcp服务器的名称,由此来实现发布订阅消息的传输。

三、接入tcp服务器并验证

具体验证方式为:第0字节为0x31(固定,表示接入验证),接下来为序列后的数据data={uid,cipher},其中cipher=base64&aes(token),uid为帐号。然后接一个’\n’换行符。紧接着发送一个ping心跳包:0x3f+‘\n’。服务器解析取出数据,并用第二步中从消息队列订阅到的帐号相关信息进行同样的计算,验证cipher,假如验证成功,则服务器返回pong心跳包0x3e+‘\n’,否则断开连接。具体操作过程如图2所示。

四、维持tcp连接与发送接收消息

维持连接:验证成功后需要定时发送ping心跳包以告诉对方,对方接收到后需要立即回复pong心跳包,若超过一定次数没有收到回复则断开连接。每次接收的消息包长度都会被记录,用来动态调整接收缓冲区,如均是很小的数据包,则每次缓冲区都会减半,直至最小值32字节,反之最大值4096字节。

接收到的每个数据包都会被解析,若解析错误(如命令错误等)则断开连接。发送与接收数据包如下:

服务器发送:0x32+base64&aes&序列化(消息)+‘\n’,客户端响应:0x32+base64&aes&序列化(响应收到)+‘\n’。

客户端发送:0x33+base64&aes&序列化(消息)+‘\n’,服务器响应:0x33+base64&aes&序列化(响应结果)+‘\n’。

对本发明作进一步详细的描述系统可如图3所示。

一、设计协议命令与字段,连接验证、发送接收消息、心跳包等。

二、使用protobuf序列化方式。

三、使用md5哈希算法。

四、使用go语言编写https服务器。

五、使用go语言编写tcp服务器。

六、部署与启动etcd服务发现与nats消息队列。

七、部署postgresql数据库、redis缓存。

八、编写安卓客户端app。

九、编写网关客户端,放到orangepilite上运行。

十、使用app登录,发送消息,在网关即可收到。

具体的实现技术与方法,如图4所示。

以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变形或修改,这并不影响本发明的实质内容。



技术特征:

技术总结
针对目前物联网的通信安全、心跳包过大、数据字段加密不灵活等问题,提出了一个安全的通讯协议及方法。该方法通过动态随机数哈希验证方式登录并安全地协商对称密钥与TCP接入地址,协议可灵活运用选择性地对数据字段加密,并且协议的心跳包仅仅2字节。本方法提供了一种安全的物联网通讯协议及方法,可以很方便应用到物联网分布式架构,消息推送系统等。

技术研发人员:陈光科;钟毅凯;何炜婷;曾碧
受保护的技术使用者:广东工业大学
技术研发日:2017.03.20
技术公布日:2017.08.18
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1