目录
1 前言
在LoRaWAN协议中,设备都需要入网激活。入网成功后,终端设备会被分配一个唯一地址(DevAddr)。同时会生成加密密钥NwkSKey和AppSKey,用于双方后续通信命令的加密和校验。
入网方式有2种:
- 空中激活OTAA
通过入网命令流程来激活设备,并获取DevAddr,NwkSKey以及AppSKey
- 本地激活ABP
DevAddr,NwkSKey以及AppSKey终端设备和服务器提前约定好,保存在各自的本地中。无需在通过入网命令来激活
2 相关数据
终端设备激活后,需在本地保存好如下数据:DevAddr,NwkSKey以及AppSKey,用于入网后的上下链路通信。
2.1 DevAddr
32bit组成,用于标识当前网络中的终端设备。是在入网过程中由网络服务器分配。
2.2 NwkSKey
网络会话密钥,用于加密FRMPayload以及MIC校验。
PS:加密和MIC校验过程参考《LoRaWAN协议-MAC帧格式详解》一文
2.3 AppSKey
应用会话密钥,用于加密FRMPayload
PS:加密过程参考《LoRaWAN协议-MAC帧格式详解》一文
3 OTAA
- 入网前,双方需提前约定好AppEUI(JoinEUI),DevEUI和APPKey
- 终端设备和服务器通过命令Join-Request和Join-Accept来进行入网流程,最终节点设备会获取到DevAddr,NwkSKey和AppSKey完成激活
- 终端设备收到命令Join-Accept后,通过该命令中携带的数据,以AppKey作为密钥,通过AES128加密计算出NwkSKey和AppSKey
- Join-Request命令帧未加密,而Join-Accept命令帧有加密。
3.1 入网准备
入网前终端设备和服务器端需提前约定好AppEUI(JoinEUI),DevEUI,APPKey。
1)DevEUI
作为EUI64地址空间中的一个全局终端设备ID,唯一的设备标识。建议设备出厂前就固定化到存储器中。
2)AppEUI(JoinEUI)
在不同版本名字不一样,AppEUI或者JoinEUI。作为应用标识,对设备来说并不是唯一的。同一设备入网不同的后台使用不同的应用服务器,就可以使用AppEUI来区分了。
3)AppKey
作为AES-128加密的密钥,在入网过程中主要有三个作用:
- 用于入网命令MIC校验码计算。在《LoRaWAN协议-MAC帧格式详解》一文中有提到,LoRaWAN帧结构中MIC校验是由NwkSkey作为密钥计算出来的。但入网还未结束,设备终端和服务器都还未获取到NwkSkey,此时入网命令Join-request和Join-accept的MIC校验码暂时通过AppKey来计算。
- 用于加密衍生出NwkSkey和AppSKey
- 用于加密命令Join-Accept。(命令Join-Request未加密)
3.2 Join-Request
由终端设备主动发送命令Join-Request开始入网请求
- MHDR作为帧头,MIC作为校验码,已在《LoRaWAN协议-MAC帧格式详解》做出详解分析
- AppEUI & DevEUI:入网请求命令中会携带这两个数据,服务器收到命令后,会通过该数据决定是否允许设备入网。
- DevNoce:每次请求时,该值设定为随机值。服务端会持续记录近段时间的DevNoce,如果同一个AppEUI的DeviNoce之前有重复,服务端会自动过滤Join-request命令。
- MIC校验码:唯一需要注意的是,其值是通过AppKey作为密钥计算的,MIC取AES运算后的前4字节。
- 入网请求命令只做了数据校验,并未加密
3.3 Join-Accept
服务器接收到命令后,匹配后台的AppEUI/DevEUI,如果允许入网则会回复Join-Accept
1) 什么是DR
《LoRaWAN协议-物理层(PHY)详解》一文中已经分析过了,LoRaWAN协议采用LoRa调制作为PHY层,其调制配置参数除了扩频因子SF和带宽BW,其他参数在协议中都是固定不变的。协议规定DR0~DR15,在不同区域使用不同的SF,BW组合,即表示不同的调制配置,比如:
对用户来说,最直观的理解就是终端设备和网关需要配置相同的DR才能正常通信,不同的DR意味着不同的速率以及传播距离。
2) 命令解析
- MHDR/MIC和Join-Request原理一样,这里就不做分析了
- JoinNoce:由服务端提供的随机值,该值唯一的作用就是计算NwkSKey和AppSKey
- NetID:网络ID,同时也用于计算NwkSKey和AppSKey
- DevAddr:分配给终端设备的地址
- DLSettings
a. RX1DROffset:服务端告知节点,下行RX1窗口的DR和上行的DR偏差,一般默认0.
b. RX2DataRate:服务端告知节点,下行RX2窗口的DR(0~15)
- RXDealy:下行RX1窗口开启的延时时间,按标准是默认1s
- CFLIST: 可选字段,用于信道分配,后续单独文章说明
3)加密
Join-Accept命令帧使用AppKey做为密钥,AES128加密算法,ECB模式进行加密。加密作用域如下:
3.4 NwkSKey/AppSKey计算
- 使用AppKey做为密钥
- 使用到JoinNonce,NetID,DevNoce字段数据进行AES128计算得出NwkSKey和AppSKey
4 ABP
本地激活方式是直接连入网络,终端设备和服务器约定好DevAddr,NwkSKey和AppSKey,这样就省去了Join-Request和Join-Accept命令过程。