LoRaWAN与NBIoT不同之一是入网方式。首先它适用于私有网络和公有网络(如果法规允许)。其次,不同规模网络的终端数量和入网方式可能是不一样的。LoRaWAN支持ABP和OTAA方式。
ABP,Activation By Personalization
所谓Personalization就是生产环节预配置录入的方式。在设备个性化时,把三个参数直接分别烧录到设备NVMEM和云端数据库中。流程简单,容易理解。但是相对安全性较低,适合私有网络。这三个参数是:
- DevAddr: 设备地址 (32bit)
- NwkSKey: 网络会话秘钥 (128bit)
- AppSKey: 应用会话秘钥 (128bit)
一般来说,由MCU的UID串号通过算法得到64bit DevEUI,继而由云端生成DevAddr/NwkSKey/AppSKey,并且录入到对应设备中。这样可以实现每台设备与三个参数一一对应。
ABP在生产环节多了一个工位,但是注册流程简单。
OTAA,Over the Air Activation
空口激活,即空白设备通过LoRaWAN的空中通道实现设备激活入网。
空白设备入网需要三个原始参数:
- AppEUI: 在某些代码中被写成ArtEUI
- DevEUI:
- DevKey:
推导算法
上图来自Rime博客
首先,生产环节依然要烧录AppEUI/DevEUI,其中AppEUI是要烧录的,而DevEUI来自UID。
其次,上传Join Request报文中,包括AppEUI/DevEUI和DevNonce,所谓DevNonce就是随机数,可以来自网络RSSI或者时间戳。
第三,在服务器中生成AppNonce/NetID/DevAddr,其中AppNonce是随机产生的,而NetID则与网络有关,DevAddr是从一个地址池中获取。
第四,产生主密钥AppKey,与DevAddr一起通过Join Accept报文下发给终端。
最后,设备将DevAddr,并且通过主密钥推导出NwkSKey/AppSKey两个秘钥,保存在NVMEM中。
之后的通讯,设备都是通过DevAddr/NwkSKey/AppSKey进行通讯的。
这里面没有基站网关出现,是因为在网络中,网关不涉及到LoRaWAN的MAC层,所有报文交换发生在MAC层中。在实际网络中,由于设备漫游等需求,此类密集的入网请求,需要在多个Join Server间进行处理。
其他
入网还需要避免集中入网导致的网络堵塞,以及感知信道等。
但是上图中,AppKey是加密后传输给终端的,但是AES128的Key/IV是如何产生的没有说明,难道是从AppEUI/DevEUI中产生的?位数倒是正好128bit。
隐忧
由于LoRaWAN起源于私有网络,未来发生公有和私有网络彼此覆盖的问题。加上LoRaWAN覆盖范围较大,同频干扰、同类架构彼此覆盖的情况可能会出现。好在不同频段还是可以通过频段和调制度避免这些问题。但是基于微基站的漫游交换,复杂度不低。
所以,暂时还就是停留在私有网络比较合乎现实。