APP下载

基于LoRa技术的加密无线通信系统设计

2019-12-20赵二刚郭天勇

自动化与仪表 2019年11期
关键词:数组接收端校验

赵二刚,郭天勇

(1.南开大学 电子信息与光学工程学院,天津 300071;2.南开大学 计算机学院,天津 300071)

物联网技术已经越来越多地融入人们生产生活的各个方面,由于无线通信具有不必铺设电缆,扩展性、灵活性强等优势,物联网中子节点间及子节点和中心节点间的通信一般采用无线的形式。常见的无线通信技术包括Zig-Bee,蓝牙(Bluetooth),无线宽带(Wi-Fi),LoRa等[1-3]。 远距离无线电 LoRa(long range radio)技术与上述几种无线通信技术相比具有功耗低、传输距离远、信号穿透性强等优势[4-6]。鉴于上述原因在此研究了一种基于LoRa技术的无线通信方法,并在通信过程中加入加密机制。所研究的技术方案,可以为物联网节点间的通信特别是需要数据加密通信的应用场景,提供有益的参考。

1 系统整体方案设计

系统的硬件结构包括无线发送端及无线接收端2个部分。待传输的数据以bin文件的形式存储于发送端的SD卡中。发送端的处理器通过检测按键来触发一次bin文件的传输过程,如果按键有效则首先生成密钥数组,然后开始通过LoRa模块与接收端进行握手通信,如果握手成功则通过LoRa模块传送bin文件,在传送过程中加入加密机制、拆帧机制、CRC校验机制[7-10]、错误重传机制及接收超时退出机制。接收端处理器对收到的数据帧进行解密、校验,最终将数据以bin文件格式存入SD卡中。基于LoRa技术的加密无线通信系统的结构如图1所示。

图1 基于LoRa技术的加密无线通信系统框图Fig.1 Block diagram of encrypted wireless communication system based on LoRa technology

2 系统设计实现

由图1可见,无线发送端和接收端的硬件结构是一样的,均利用处理器与LoRa模块进行通信及利用SD卡实现bin文件的存储。

2.1 系统硬件设计

2.1.1 嵌入式处理器及SD卡接口

在此,采用意法半导体公司的基于ARM Cortex-M7 32位RISC内核的STM32F767IGT6处理器作为无线收、发端的主控芯片,该处理器工作频率可达216 MHz,内置1 MB的闪存,512 kB SRAM及多种外设和通信接口。利用该处理器内置的SDIO接口驱动SD卡,SD卡接口部分的电路原理如图2所示。

2.1.2 LoRa模块

LoRa无线通信模块采用安信可公司的LoRa扩频无线模块Ra-02。该模块基于SEMTECH公司的无线收发芯片SX1278设计开发,SX1278芯片采用SEMTECH的LoRaTM专利调制技术,接收灵敏度高达-148 dBm,功率输出可达+20 dBm,传输距离远,可靠性高。Ra-02模块采用SPI总线与处理器进行通信,3.3 V供电,该部分的电路原理如图3所示。

2.2 系统软件设计

发送、接收端的STM32F767IGT6处理器利用SPI总线和LoRa模块进行通信。首先初始化该模块,设置其载波频率、扩频因子SF(spreading factor)、编码率 CR(code rate)、校验模式、带宽 BW(bandwidth)等,然后利用LoRa模块实现数据的无线收发。

图2 SD卡接口电路Fig.2 SD card interface circuit

图3 LoRa模块接口电路Fig.3 LoRa module interface circuit

2.2.1 加密算法

加密主要采用异或及换序算法。假定有randomA、randomB及randomC三个数组,这3个数组的元素均为8位无符号类型(取值范围0~255)。randomA为收、发端公共密钥;randomB为换序密钥;randomC为异或密钥。

randomA数组共有256个元素,数组中每个元素的值都不相同,并且以常量数组的形式预先存储在发送及接收端的程序中。假定无线传输每帧数据的长度为SEND_LEN个字节,则令RandomB,randomC数组元素的个数为SEND_LEN。

STM32F767IGT6处理器内部集成了硬件随机数发生器 RNG(random number generator),发生器以连续模拟噪声为基础产生32位的随机数。利用该发生器产生randomB数组。首先,在程序中使能RNG的时钟,并配置RRNG_CR寄存器来初始化RNG,待RNG准备就绪后就可以调用STM32F7处理器HAL库的HAL_RNG_GetRandomNumber函数产生随机数;对所产生的随机数进行取模处理,可以产生指定范围的随机数,即RNG产生的随机数对SEND_LEN进行取模,就可以产生0~SEND_LEN-1范围内的随机数。令randomB数组每个元素的初始值均为0,把利用所述方法产生的随机数填充到该数组中,同时地址下标加1。其填充规则是每次产生的随机数与数组中已经填充的所有元素都不相等才能填充。这样当地址下标加到SEND_LEN时,randomB数组中的元素即为互不相等的随机数且取值范围为0~SEND_LEN-1。

randomC数组由数组randomA与randomB按照式(1)异或得到。即:

式中:randomC[i]为randomC数组中的第i个元素。发送端在传输bin文件时,将文件拆分成若干帧,每帧SEND_LEN-4个字节,最后一帧(“尾帧”)长度可能少于SEND_LEN-4。然后对每一帧加入帧序(2 B)及CRC16校验值(2 B),这样每一帧的总长度仍为SEND_LEN个字节。另外,将bin文件的长度(4 B)、文件内容的CRC32校验值(4 B)及randomB数组整合成一帧,再加入帧序及CRC16校验值最终封装成“首帧”。在传输文件时,“首帧”和“尾帧”采用与randomA数组异或的方式加密,其他帧的加密方式为先异或再换序:先与randomC数组异或得到buf数组,然后buf数组再根据randomB数组换序最终得到buf_chv数组。异或的方法同式(1),换序方法为

式中:buf_chv数组为最终发送给接收端的加密数据,buf_chv[i]为buf_chv 数组中的第 i个元素。根据发送端的加密算法及异或运算的特性,接收端对“首帧”和“尾帧”采用与randomA数组异或的方式即可进行解密,然后就可以得到randomB数组,再根据式(1)进而得到randomC数组。其他帧先根据式(2)换序然后再与randomC数组异或进行解密。

2.2.2 发送端和接收端的程序流程

发送端的STM32F767IGT6处理器在上电或复位后,首先初始化LoRa模块,然后检测按键。如果按键被按下,则生成randomB及randomC数组,读取SD卡中的bin文件,并通过所述拆帧机制和加密算法,将bin文件通过LoRa模块发送给接收端。在传送过程中加入CRC校验机制、错误重传机制及接收超时退出机制,如果收到接收端回应的“ok”则传送下一帧,如果收到“error”或1 s内均未收到回应则重传该帧,如果重传超过10次则中断发送并给出错误提示。如果所有帧均发送完毕,则给出bin文件发送成功提示,并重新检测按键,等待下次发送新的bin文件。发送端的程序流程如图4所示。

图4 无线发送端程序流程Fig.4 Flow chart of wireless sender

接收端的STM32F767IGT6处理器上电后,首先初始化LoRa模块,然后查询LoRa模块是否接收到数据,如果接收到“首帧”则进行异或解密,再CRC16校验,校验通过则回复给发送端“ok”,同时提取文件长度、文件内容的CRC32校验值及randomB数组,并进入数据帧接收流程,否则回复给发送端“error”。

在数据帧接收流程中,对每一帧都以先换序再异或的方式解密(“尾帧”只进行异或解密),解密后进行CRC16校验,如果校验通过则回应给主机“ok”,并按照帧序将数据存入内部RAM,如果校验失败则回应给主机“error”,如果10 s内均未收到数据或连续10次收到的数据CRC16校验都不通过,则退出整个bin文件的接收,重新等待发送端下次发送新的bin文件。如果所有的数据帧都接收完毕,则对存入RAM的所有数据进行CRC32校验,如果校验值和“首帧”的CRC32校验值一致,则将上述数据写入bin文件并保存在SD卡中,然后重新等待“首帧”,准备接收新的bin文件。接收端的程序流程如图5所示。

图5 无线接收端程序流程Fig.5 Flow chart of wireless receiver

3 系统测试

将不同大小的bin文件存入SD卡中,测试加密无线通信的效果。测试条件:无线发送、接收端距离50 m左右(楼宇内)。将bin文件拆分成64 B每帧,设置LoRa模块的带宽wb=500 kHz,扩频因子fs=7,编码率 rc=4/6,则求得数据速率(Data Rate)为

在实际传输数据帧时考虑到收发握手机制、加密解密及LCD显示等时间消耗,每传输1帧数据(64 B)大概耗时0.07 s。利用3个bin进行测试,测试结果数据见表1,系统实物及LCD显示的测试结果如图6所示。

表1 加密无线通信系统测试结果Tab.1 Encrypted wireless communication system test result

图6 无线加密通信系统实物Fig.6 Actual picture of encrypted wireless communication system

多次试验结果表明,无线传输bin文件的耗时与理论计算时间基本一致,发送、接收端SD卡中的bin文件内容完全一致。

4 结语

本文设计了一种基于LoRa技术的无线通信系统,并对通信过程中用到的加密算法进行了研究。实测结果证明了该技术方案的可行性。该技术方案可以为需要无线通信特别是通信数据需要加密的应用场景提供有益的参考。

猜你喜欢

数组接收端校验
使用Excel朗读功能校验工作表中的数据
JAVA稀疏矩阵算法
基于扰动观察法的光通信接收端优化策略
基于多接收线圈的无线电能传输系统优化研究
JAVA玩转数学之二维数组排序
手机无线充电收发设计
智能电能表的现场快速校验方法探讨
更高效用好 Excel的数组公式
电子式互感器校验方式研究
寻找勾股数组的历程