目录
一、OTAA
1、名词解释
2、入网流程
二、ABP
三、两种入网方式的比较
一、OTAA
1、名词解释
(1)AppEUI:64位(8字节)的唯一标识符,用于标识特定的应用程序或组织(如果用的是chirpstack,终端这里可以配一个随机数)。
(2)DevEUI:64位(8字节)的唯一标识符,用于标识单个LoRaWAN设备,每个设备都有一个唯一的DevEUI。
(3)DevNonce:一个随机数,根据LoRa射频模块的RSSI(信号强度)算出。
(4)AppNonce:由服务端提供的随机值,用于计算NwkSKey 和AppSKey。
(5)NetID:网络ID,也用于计算NwkSKey 和AppSKey。
(6)DevAddr:32bit组成,用于标识当前网络中的终端设备,是在入网过程中由网络服务器NS 分配。
(7)AppSKey:应用会话密钥。
(8)NwkSKey:网络会话密钥。
2、入网流程
(1)终端节点发送Join_Request
Join_Request格式如下:
MHDR 为帧头,表示数据的类型(入网请求);入网请求会携带AppEUI和DevEUI,服务器会通过该数据决定是否允许设备入网DevNonce 是一个随机值,通过LoRa射频模块的RSSI(信号强度)算出。服务端会将收到的DevNonce进行存储 ,如果同一个AppEUI的DevNonce是重复发送,服务器会丢弃该入网请求。MIC是校验码,是通过AppKey计算得来的。
(2)服务器处理入网请求
Join_Request发送至NS处,NS会通过MIC检查数据是否合法,如果合法会将请求交给AS处理。AS 根据报文中的AppEUI和DevEUI来判断是否接收入网请求。
(3)NS下发Join_Accept
如果服务器接受入网,NS将会下发一个Join_Accept命令帧。Join_Accept格式如下:
AS验证设备后会生成AppNonce,NS会生成一个网络标识符NetID,还分配一个4字节的DevAddr。
(4)生成密钥AppSKey和NwkSKey
终端节点收到Join_Accept后,会根据AppKey生成两个密钥:AppSKey和NwkSKey,生成方式如下:
NwkSKey
NwkSKey = aes128_encrypt(AppKey, 0x01 | AppNonce | NetID | DevAddr | DevNonce)
AppSKey
AppSKey = aes128_encrypt(AppKey, 0x02 | AppNonce | NetID | DevAddr | DevNonce)
入网后,后续的通信都使用生成的AppSKey和NwkSKey进行加密和解密(AS端也会计算出AppSKey和NwkSKey),确保数据的机密性和完整性。
整体数据加解密过程大致如下图所示:
二、ABP
ABP入网的方式比较简单,不需要像ABP那样动态获取信息。ABP这种方法比较简单粗暴,以chirpstack为例,我们可以直接在服务器上配置DevAddr,NwkSKey,AppSKey,然后在终端节点上直接配置与服务器相同的DevAddr,NwkSKey,AppSKey。因为已经直接进行配置,就不再需要join流程了。在这种情况下,这个设备是可以直接发应用数据的,当ABP终端成功发送了第一条数据之后,我们就认为ABP终端入网成功了。
三、两种入网方式的比较
两种入网方式各有各的优势与短板,具体怎么选择我们还是要看设备以及环境等因素。
1、ABP
优点
(1)快速入网:ABP不需要执行join过程,可直接开始通信。
(2)无网络覆盖依赖:在网络信号弱或者不稳定的区域,ABP不依赖于设备与网络服务器的交互进行入网,因此在某些恶劣的网络条件下可能更可靠。
缺点
安全性较低:设备的密钥在开始时就已经预设,若这些信息被泄露,攻击者可以伪装成设备进行攻击。
2、OTAA
优点
安全性高:因为设备在入网过程中会通过网络服务器生成新的会话密钥(NwkSKey 和 AppSKey),并使用 AppKey 进行加密。这样,密钥在每次入网时都是唯一的。而且密钥动态生成,难以被提前获取或破解。
缺点
依赖网络覆盖:在网络信号弱或不稳定的区域,OTAA 的入网过程可能会失败,因为设备需要与网络服务器进行交互。如果网络覆盖不好,设备可能无法完成入网过程。