基于MQTT协议的轻量化文本信息分发技术研究

2024-02-21 03:47:36熊风光韩慧妍焦世超
计算机技术与发展 2024年2期
关键词:服务端加密算法离线

熊风光,陈 霖,韩慧妍,张 元,庞 敏,焦世超

(1.中北大学 计算机科学与技术,山西 太原 030051;2.机器视觉与虚拟现实山西省重点实验室,山西 太原 030051 3.山西省视觉信息处理及智能机器人工程研究中心,山西 太原 030051)

0 引 言

随着移动互联网的发展和普及,越来越多的人使用手机、平板电脑等移动设备进行信息获取和交流[1]。借助传统的通信网络在一些偏远地区、灾害现场、海洋、航空等特殊场景下获取信息可能会受到限制。第一,传统的通信网络受限于地理位置和网络覆盖范围,导致其信号弱或没有信号;第二,传统的通信网络在自然灾害、战争等突发事件中容易受到破坏;第三,传统的通信网络需要铺设大量的基础设施才能实现信息传输。针对上述问题,卫星通信网络[2]的价值就体现了出来,卫星通信网络可以覆盖地面基站网络无法覆盖的地方,同时,卫星通信是天上的链路,不会受到地面灾害环境因素的影响,并且不依赖于基础设施建设。在复杂的环境场景下,使用卫星通信网络进行通信设备之间的通信是一个不错的选择。卫星通信网络虽有覆盖范围大、依赖性小等优点[3],但其存在着一些缺点:其一,卫星通信网络的网络时延大、丢包率高,导致数据在传输过程中会出现不稳定情况而丢失;其二,卫星通信网络的信道窄,在传输数据信息量比较大时会增加传输时间、降低传输效率。以上问题导致卫星通信网络无法完全在通信设备中展开使用。现有文本信息分发技术是基于JSON数据的传统分发技术以及数据分块和重组分发技术。但是已有技术在卫星通信网络环境下分发有以下不足之处:第一,由于卫星的频谱资源有限,分发大量的文本信息可能会导致带宽瓶颈,限制数据传输的速度和容量;第二,由于信号在地面和卫星之间的传输,有可能被恶意攻击者截获、窃听或篡改;第三,数据分块和重组分发技术是将文本信息分成较小的数据块,通过卫星链路逐个传输,然后在接收端重新组装成完整的文本信息。如果某个数据块丢失或出错,整个文本信息的完整性可能会受到影响。针对上述问题,该文研究了基于MQTT(Message Queuing Telemetry Transport)协议的轻量化文本信息分发技术。设计了数据校验加密算法、文本信息轻量化处理方法和离线消息存储机制。

1 相关工作

1.1 MQTT协议

MQTT[4]是采用发布/订阅模式、基于TCP/IP协议的通信协议,具有轻量级、简单、开放等特点。它能够在低带宽或者不可靠的网络上传输数据,功耗非常低,以轻量级、简单、易于部署等优点使MQTT成为约束环境下的理想通信协议[5]。

1.2 GZIP压缩算法

GZIP算法是一种基于DEFLATE算法[6]的数据压缩算法,这是HTTP标准中使用的压缩方案之一,通过减少网络传输的字节大小来最小化延迟。它采用了霍夫曼编码和LZ77算法对数据进行压缩,可以获得更高的压缩比和更快的解压速度[7]。GZIP广泛应用于各种领域,包括文件压缩、网页压缩、日志文件压缩等。它在Web服务器中常用于对传输的内容进行压缩,以减少数据传输的带宽消耗和提高用户访问速度。

1.3 AES加密算法

AES(Advanced Encryption Standard,高级加密标准)是一种安全可靠的对称加密算法,其密钥长度可达到128位、192位或者256位,具有安全性高、速度快、可靠性高等特点[8]。AES被认为是一种安全可靠的加密算法,已经通过了多个密码学标准的审查和认可,应用于保护敏感数据的安全性,包括网络通信、数据存储和加密文件等领域。

2 文中方法

2.1 总体架构

针对文本信息在卫星通信网络下的分发过程存在安全性弱、效率低下、可靠性不高的问题,该文开展轻量化文本信息分发技术研究。主要工作如下:

(1)基于MQTT协议进行设备通信准备工作,建立可靠的数据链路连接;

(2)针对文本信息安全性弱的问题,将AES加密算法与CRC校验工具结合使用,对加密的文本信息在分发至接收端进行解密后执行CRC校验,检验数据是否被篡改;

(3)针对文本信息分发效率低下的问题,对分发的文本信息进行轻量化操作,即利用GZIP压缩算法对待分发的信息进行压缩;

(4)针对文本信息分发过程中可靠性不高的问题,设计离线消息存储机制,确保文本信息可以被接收端接收。

轻量化文本信息分发流程如图1所示。文本信息由服务端分系统进行分发,应用端分系统接收并展示。首先进行创建主题、创建发布订阅机制、设计设备心跳和设备连接等过程,连通服务端分系统与应用端分系统的通信状态。然后服务端准备向应用端发送文本信息,服务端生成文本信息校验码、文本信息进行加密处理、文本信息进行轻量化处理、文本信息序列化。经过处理后的文本信息准备分发,分发之前判断应用端用户是否在线,若不在线,则将文本信息进行离线存储,待用户上线之后发送;若在线,则将文本信息分发至应用端。应用端在接收文本信息之后,进行文本信息反序列化、数据解密、数据完整性校验等一系列操作,数据完整性校验用于判断数据在分发的过程中是否被恶意篡改,若文本信息被篡改,则通知服务端文本信息被篡改并且在应用端不进行展示;若文本信息没有被篡改,则提取文本信息,进行文本信息展示。

图1 轻量化文本信息分发流程

2.2 设备通信准备工作

2.2.1 主题设计

主题[9]本质上是一个使用UTF-8编码的字符串,用来对发布的消息进行区分,在Publish报文中,随着消息载体一起发布。主题可以是由单一级别的主题组成,例如user1,也可以是由多个级别的主题组成,例如qingliang/clientUser/user1,主题的各个级别之间使用“/”进行分割。主题是区分大小写的,user和User是两个不同的主题。

客户端在订阅主题时,可以选择订阅特定的主题消息,也可以通过使用通配符订阅若干个主题消息。通配符只能在订阅主题时使用,而不能在发布消息时使用。主题通配符有两种存在形式:单级通配符、多级通配符。单级通配符使用“+”表示,例如qingliang/+/user,单级通配符可以代替一个主题层级。多级通配符使用“#”表示,例如qingliang/#/user,多级通配符可以代替任意数量的主题层级。

在轻量化文本信息分发技术的研究中,设计了两种主题,分别如下:

(1)登录主题:用于应用端登录的主题,服务端订阅;

(2)信息分发主题:用于服务端向应用端下发文本信息的主题,客户端订阅。

2.2.2 发布订阅机制

发布订阅(Publish/Subscribe)机制[10]是一种消息转发机制,在这种消息转发机制下,消息分发的完整流程分为三步:订阅-发布-转发。同一客户端既可以是消息的发布者,也可以是消息的订阅者。订阅-发布流程如图2所示,客户端3订阅主题qingliang/user/user2、客户端4订阅主题qingliang/user/user1,客户端1向主题qingliang/user/user1发布消息“10”、客户端2向主题qingliang/user/user2发布消息“20”。由于客户端3订阅主题与客户端2发布消息的主题匹配成功,客户端3会接收到由客户端2发布并且由服务器转发的消息“20”。同理,客户端4会接收到由客户端1发布并且经过服务器转发的消息“10”。

图2 发布订阅机制

2.2.3 设备连接设计

客户端设备与服务端建立可靠的连接是后续一切服务的基础,MQTT客户端之间想要实现发布订阅机制、通信等服务,必须要通过MQTT服务端,因此客户端与服务端建立连接是一项很重要的工作。

MQTT客户端与服务端在建立连接的过程中,客户端先向服务端发送CONNECT报文,服务端收到报文后,向客户端发送CONNACK报文。CONNECT报文包含了clientId,cleanSession,keepAlive,username,password等数据信息,其中clientId是客户端的唯一标识;cleanSession有true和false两个值,如果设置为true,则表示当服务端向客户端发送消息时,无论客户端是否收到,都不会再次发送,这种情况适用于发送不重要的报文,如果设置为false,则表示服务端会接收客户端的确认消息,服务端会保存信息继续发送,直至接收到客户端的确认收到消息,这种情况适合重要的报文,并且在此情况下Qos的设置要大于0;keepAlive是用于服务端实时监测客户端的连接情况。CONNACK报文包含了returnCode,sessionPresent等数据信息,其中returnCode是连接的状态码,用来表示客户端的连接情况,返回“0”表示客户端与服务端连接成功,返回非“0”值表示连接失败;sessionPresent表示当前clientId所对应的设备是否有未确认收到的消息,如果返回值为true,说明此时有尚未确认收到的消息,不需要重新订阅主题,连接之后会收到保存在服务端的消息;如果返回值为false,说明原本的订阅关系已消失,需要重新订阅主题。

2.2.4 设备心跳设计

设备心跳设计[11]是实现客户端与服务端建立可靠连接的关键。为了确认客户端与服务端的连接状态,除了客户端正常向服务端发送消息之外,在没有发送消息的空闲时间,客户端会在心跳时间主动向服务端发送消息,这条消息称为PINGREQ(心跳请求),如果服务端收到了客户端的消息,则认为客户端处于在线状态,同时会回复一条消息,这条消息称为PINGRESP(心跳响应),反之则处于离线状态。

由于心跳时间是在客户端设定的,为了让服务端知道客户端的心跳时间,客户端需要将该时间通知给服务端。在2.2.3设备连接时的CONNECT报文中有一个字段是keepAlive,这个字段就是用于设置心跳时间并通知服务端。

心跳机制是否会触发是根据客户端发送消息的频率来决定的。第一,客户端在心跳时间之内向服务端发送消息,此时服务端不需要心跳请求也可以知道客户端是在线的,这个时候心跳机制没有触发;第二,客户端在心跳时间之内没有向服务端发送消息,此时客户端需要发送心跳请求给服务端,这个时候触发了心跳机制。服务端在1.5倍的心跳时间之内没有收到客户端发送的心跳请求或者普通消息,如公式1,则认为客户端与服务端已经断开了连接。

stime>1.5×ctime

(1)

其中,ctime是客户端心跳时间,stime是服务端监测时间。

2.3 轻量化文本信息分发技术研究

2.3.1 数据校验加密算法

数据校验和加密算法是保护数据安全的重要措施。数据校验算法[12]可以检测到数据在传输过程中是否被篡改,确保数据的完整性;数据加密算法[13]可以将数据转换为一种难以理解的格式,防止数据被篡改,确保数据的机密性。数据在发送方要先校验后加密,接收方先解密后校验。该文将循环冗余校验算法(CRC)与AES加密算法相结合以确保数据在传输过程中的完整性和机密性。

数据校验算法是用于检测数据在传输或存储过程中是否被篡改或损坏的技术。常见的数据校验算法包括奇偶校验、循环冗余校验、校验和、哈希函数等。CRC可以高效地检测数据是否被篡改,不会占用过多的系统资源或带来太大的通信延迟;CRC与其他数据校验算法相比具有更强的检测能力。因此,该文的数据校验算法采用循环冗余校验算法(CRC)。

数据加密是保护数据安全的重要措施[14]。数据加密算法可以将数据转换为一种难以理解的格式,防止数据被篡改,确保数据的机密性。数据加密算法分为以下三类:对称加密算法、非对称加密算法、散列函数算法。由于对称加密具有加密和解密速度快、加密效率高等优点,该文选择对称加密算法中的AES进行加密。加密的具体流程如图3所示。

图3 数据加密流程

(1)字节代换。

每一轮的第一个阶段都是从字节代换开始,这一步依赖于非线性S-box,将原始矩阵通过S-box进行变换。将4×4矩阵的每一个字节都进行字节代换,高4位作为x值,低4位作为y值,通过x,y值在S-box中找到对应的目标值进行替换,得到一个新的矩阵。

(2)行位移。

字节代换之后执行状态的下一步是行位移,这一步是在每行中循环地将状态字节向左移动。第一行的字节保持不变,第二行的字节向左循环移动一个字节,第三行的字节向左循环移动两个字节,第四行的字节向左循环移动三个字节。新状态矩阵没有改变大小,仍然是原来的16字节,但是改变了状态字节的位置。

(3)列混合。

行位移的下一步是列混合,这一步只在前9轮中使用,第10轮是没有这一步的。这一步是将输入的矩阵左乘一个给定的4×4矩阵,得到一个新的矩阵,见公式2。由于列混合的运算是在GF(28)域上的运算,所以运算方式和平时的十进制运算方法是有所区别的。公式3计算第一行数据、公式4计算第二行数据、公式5计算第三行数据、公式6计算第四行数据。

(2)

K0,j=(2*S0,j)⊕(3*S1,j)⊕S2,j⊕S3,j

(3)

K1,j=S0,j⊕(2*S1,j)⊕(3*S2,j)⊕S3,j

(4)

K2,j=S0,j⊕S1,j⊕(2*S2,j)⊕(3*S3,j)

(5)

K3,j=(3*S0,j)⊕S1,j⊕S2,j⊕(2*S3,j)

(6)

给定的矩阵中只有01,02,03三种数据,接下来对这三种数据的运算进行描述。所有的运算都要转成二进制运算,01乘以任何数都是本身;02的二进制是00000010,02与其他数据相乘的规则见公式7;03的二进制是00000011,03与其他数据相乘的规则见公式8。

(00000010)*(a7a6a5a4a3a2a1a0)=

(7)

(00000011)*(a7a6a5a4a3a2a1a0)=

[(00000010)⊕(00000001)]*

(a7a6a5a4a3a2a1a0)=

[(00000010)*(a7a6a5a4a3a2a1a0)]⊕

(a7a6a5a4a3a2a1a0)

(8)

(4)轮密钥加。

列混合的下一步是轮密钥加,这一步是AES算法中最关键的阶段,能够在加密数据期间提供更多的安全性,创建密钥与密文之间的关系。轮密钥加的第一次运算(即初始变换)是将明文矩阵与原始密钥矩阵进行异或运算,剩下10次的轮密钥加运算是将经过密钥扩展产生的新密钥与上一步产生的新矩阵进行异或运算。

(5)密钥扩展。

AES算法是基于AES密钥扩展进行加密和解密的算法,密钥扩展是AES算法中重要的步骤。每一轮都会产生一把新密钥,新密钥用于每一轮的加密。密钥的大小是16字节(K0~K15),前四个字节K0~K3表示为W0,接下来的四个字节K4~K7表示为W1,以此类推。

每一轮密钥扩展运算规则如下:如果i不是4的倍数,那么第i列由式9确定;

W[i]=W[i-4]⊕W[i-1]

(9)

如果i是4的倍数,那么第i列由式10确定。

W[i]=W[i-1]⊕T(W[i-1])

(10)

公式10的函数T由3部分组成:字循环、字节代换和轮常量异或。字循环是将1个字中的4个字节循环左移1个字节;轮常量异或是将经过前两步得到的结果同轮常量Rcon[j]进行异或,其中j表示轮数。

上述加密过程是针对16字节的数据,但实际上文件大小不会是16字节。对于一个文件的加密解密过程如图4所示,将一个文件分成n个16字节长度的明文数据,定义一个16字节的初始向量counter1,对counter1进行AES加密,得到的数据和明文1进行异或得到密文1;counter1加1得到counter2,对counter2进行AES加密,得到数据和明文2进行异或得到密文2,以此类推,一直计算到最后一个密文n,将n个密文拼接在一起就是文件对应的密文。解密过程与加密过程类似,counter1进行AES加密后得到的数据与密文1进行异或得到明文1,counter2进行AES加密后得到的数据与密文2进行异或得到明文2,以此类推,一直计算到最后一个明文n,将n个明文拼接在一起就是解密后的文件数据。在这种加密解密过程中,双方互相需要知道counter1的值和AES的密钥。

图4 文件加密解密过程

2.3.2 文本信息轻量化处理

为了减轻网络带宽压力、提高传输效率,在文本信息分发之前需要进行轻量化处理。提出使用GZIP算法[15]结合文本信息的特点进行压缩。

轻量化文本信息分发技术结合GZIP算法进行文本信息压缩的流程如图5所示。首先,提取准备分发的文本消息,将提取到的消息使用GZIP压缩算法进行压缩,得到更小的空间占用;接着,将压缩后的消息转换为字节流数组,将字节流数组封装至待分发的消息体中;然后,将消息分发至应用端,应用端接收到消息之后进行转码解压缩;最后,将得到的消息进行完整展示。

图5 文本信息轻量化处理流程

2.3.3 离线消息存储

由于不稳定的网络环境,应用端设备会出现异常掉线的情况。在应用端设备异常掉线或者应用端设备用户没有登录的期间,可能会有应用端用户订阅的主题消息发布,为了保证应用端用户上线之后能够正常收到离线时发布的消息,系统需要将这部分离线的消息存储起来,等到应用端用户上线之后再将消息推送给应用端用户,以确保消息的可靠传输。

离线消息存储的设计对本系统的开发有以下优点:

(1)离线消息存储可以确保即使应用端用户处于离线状态,也能够在用户上线时接收到消息;

(2)应用端用户不用担心错过任何信息,增强用户的满意度和体验感;

(3)离线消息存储在数据库中,减少了消息的重复传输,从而降低了网络的负载,提高了传输的效率。

综上所述,该文将离线消息存储到MySQL数据中,并且根据应用端用户上线时的用户名关键字将离线消息推送给指定用户。具体的离线消息存储设计如下所示:

首先在MySQL数据库中创建一个离线消息存储表temporary_storage,包含字段主键(id)、接收者id(application_user_id)、消息id(message_id)、消息内容(content)、消息类型(type)。数据库表设计如表1所示。

表1 离线消息存储表temporary_storage

服务端用户在给应用端用户发送消息时,先将数据存储到temporary_storage表中,再发送给应用端用户。应用端用户收到消息后,返回至服务端一条确认收到消息,此时服务端将temporary_storage表中数据根据message_id进行删除;如果没有接收到应用端用户的确认消息,服务端则认为应用端用户处于离线状态,将数据存储至temporary_storage表中。当应用端用户登录时,根据用户名application_id关键字检查temporary_storage表中是否是该用户的离线消息,将属于该用户的离线消息进行补发。

3 实验结果与分析

为了验证本章消息分发技术的设计以及数据加密算法、消息轻量化处理、数据校验算法、离线消息存储的正确性、可行性以及有效性,本小节设计了如下实验,并且将本章所研究的轻量化文本信息分发技术与传统JSON文本信息分发技术进行对比。

(1)数据加密实验。

本节将使用的AES加密算法和目前流行的MD5,SHA-256,DES,RSA四种加密算法进行性能比较,使用hutool工具对五种加密算法进行加密速度上的实验对比。由于一次加密过程的计算时间具有偶然性,为了尽可能消除偶然性因素,在该实验中随机生成10个长度为100字节的字符串进行10次加密,记录每次加密的时间并计算平均耗时,时间单位为纳秒。实验对比结果如表2所示。

(2)消息轻量化处理实验。

(a)编排一条数据,采用文本信息轻量化处理技术发送给在线用户;

(b)同样的一条数据,采用传统JSON技术发送给在线用户;

(c)查看控制台输出的消息分发前的长度与分发后长度。

实验结果如表3所示。经过文本信息轻量化处理技术处理的文本信息长度小于原始文本信息。第二行是通过传统JSON文本信息进行分发的结果,原始文本信息为1 745 bytes,经过JSON分发的文本信息为1 755 bytes;第三行是经过该文研究的轻量化文本信息分发技术的结果,原始文本信息为1 745 bytes,经过轻量化处理之后文本信息为931 bytes。

表3 文本信息分发对比

(3)数据校验实验。

(a)应用端设备用户正常登录;

(b)一条数据,发送给应用端用户;

(c)编排一条新的数据,在后台对这条数据的字节进行修改,模拟数据被篡改,再次发送给应用端用户。

图6为验证结果,图6(a)是第一条数据分发情况,第一条数据成功被应用端所接收;图6(b)是第二条数据分发情况,第二条数据没有被应用端接收,并且在服务端显示数据被篡改。

(a)数据分发被应用段接收

(4)离线消息存储实验。

(a)应用端设备用户没有登录,处于离线状态;

(b)编排一条数据,发送给离线的用户;

(c)应用端用户登录账号,查看消息接收状态。

图7为验证结果,图7(a)表明用户离线时,数据接收失败,服务端显示用户不在线;图7(b)表明应用端用户登录之后,数据成功接收,并且在服务端显示接收成功。

(a)用户离线下的分发失败

实验结果分析:

(1)数据加密算法的实验过程及结果表明,AES在所对比的算法中具有较快的加密速度,证明了加密算法的先进性。

(2)轻量化处理验证过程及结果表明,文本信息通过轻量化处理技术分发后的长度明显小于消息分发前的长度,可见文本信息在发送时成功地进行了轻量化处理,证明了轻量化处理的可行性。

(3)数据校验算法的验证过程及结果表明,没有被篡改的数据可以被应用端用户成功接收,已经发生篡改的数据是不可以被应用端用户接收的,在服务端的分发结果界面可以看到实时每条数据的接收情况,证明了数据校验的有效性。

(4)离线消息存储的验证过程及结果表明,当用户离线时,已经发送的消息被暂存至数据库,待用户在线时,用户可以成功接收到该用户对应的离线数据,证明了离线消息存储机制的正确性、可靠性。

4 结束语

针对文本信息分发过程中存在的效率低下、可靠性不高的问题,研究了基于MQTT协议的轻量化文本信息分发技术。在文本信息分发过程中,为了保证数据的安全性、完整性和稳定性,提出了数据校验加密算法以及离线消息存储等方法。同时,为了适应网络带宽、提高分发效率,提出了对文本信息进行轻量化处理的方法。

但当前研究工作仍有待改进,文本信息分发技术采用的数据加密算法属于传统加密算法,在未来可以基于人工智能等新技术对加密算法有更深层次的研究,从而应对未来可能面临的各种安全威胁。

猜你喜欢
服务端加密算法离线
异步电机离线参数辨识方法
防爆电机(2021年4期)2021-07-28 07:42:46
呼吸阀离线检验工艺与评定探讨
浅谈ATC离线基础数据的准备
云存储中基于相似性的客户-服务端双端数据去重方法
新时期《移动Web服务端开发》课程教学改革的研究
消费导刊(2018年8期)2018-05-25 13:19:48
离线富集-HPLC法同时测定氨咖黄敏胶囊中5种合成色素
中成药(2018年2期)2018-05-09 07:20:09
在Windows Server 2008上创建应用
基于小波变换和混沌映射的图像加密算法
Hill加密算法的改进
对称加密算法RC5的架构设计与电路实现