2. 安全基石
聊LoRaWAN安全,很多人一上来就盯着加密算法看。我个人习惯是——先看架构。你想想看,一栋楼的安全系统,总不能只看门锁吧?监控、门禁、报警、巡逻,得有个全局图。
LoRaWAN的安全架构,说白了就是三层防御体系:网络层、应用层、设备层。每一层管的事不一样,用的密钥也不一样。我刚开始接触时也犯过糊涂,以为一个密钥走天下。后来在项目中吃过亏,才明白这三层各司其职的道理。
核心观点:LoRaWAN安全不是单点防护,而是分层纵深防御。攻击者突破一层,还有下一层等着。
2.1 设备层:安全的起点
设备层是所有安全的根基。为什么?因为密钥得从设备里出来。如果设备本身就不安全,上层再加密也没用。
我记得有个项目,客户把AppKey直接写死在固件里,还用的是明文。我当时就问他:你这设备要是被人拆了,读Flash怎么办?他愣住了。嗯,这就是典型的设备层安全没做好。
设备层主要管三件事:
- 密钥安全存储:AppKey和NwkKey必须放在安全区域,比如硬件安全模块(HSM)或安全元件(SE)。不能裸奔在Flash里。
- 物理防篡改:设备被拆开时,最好能主动销毁密钥。虽然成本高,但高安全场景必须考虑。
- 安全注入:密钥怎么写进设备的?生产线上的注入过程要可控。我见过有人在产线上用串口工具手动敲密钥,结果敲错了一位,整批设备报废。
避坑指南:我曾经在一个智能表计项目里,发现设备出厂时AppKey全部相同。这意味着只要破解一台,整个网络就沦陷了。后来我们强制要求每台设备独立密钥,并在产线增加自动化注入环节。
2.2 网络层:通信的守门员
网络层负责的是设备与网络服务器之间的通信安全。说白了,就是保证数据在传输过程中没被篡改,而且确实是来自合法的设备。
这里用到的密钥叫NwkSKey。它干两件事:
- 数据完整性校验(MIC):每个数据包后面都带一个4字节的MIC。接收方用NwkSKey重新计算一遍,对不上就丢弃。这能防止中间人篡改数据。
- 网络层加密:虽然LoRaWAN的网络层也加密,但注意——它只加密MAC命令和帧头的一部分。真正的应用数据,它不碰。
你可能会问:那网络层加密有什么用?
有用。它能防止攻击者伪造MAC命令,比如乱改设备的发射功率或频点。我在测试中就遇到过,有人伪造了LinkCheckReq,导致设备误以为信号不好,疯狂提高发射功率,电池两天就耗光了。
| 安全机制 | 作用 | 使用密钥 |
|---|---|---|
| 数据完整性校验 | 防止数据包被篡改 | NwkSKey |
| 帧计数器 | 防止重放攻击 | NwkSKey |
| MAC命令加密 | 保护网络控制指令 | NwkSKey |
个人经验:帧计数器是网络层最容易忽略的点。有些开发者图省事,把计数器设成固定值。结果攻击者抓到一个包就能无限重放。记住:计数器必须单调递增,且设备掉电后要持久化保存。
2.3 应用层:数据的最后一道防线
应用层才是真正保护你业务数据的地方。网络服务器能看到设备在通信,但它看不到通信内容。这就是应用层加密的价值。
应用层密钥叫AppSKey。它只做一件事:加密应用数据。而且是从设备到应用服务器,端到端加密。中间的网络服务器,哪怕被攻破了,也只能看到一堆乱码。
我参与过一个智慧农业项目,传感器采集的土壤数据需要上传到云端。客户一开始只用了网络层加密,觉得够了。我问他:你的网络服务器是第三方提供的,你敢把原始数据给它看吗?他想了想,最后还是加了应用层加密。
这里有个关键点:AppSKey和NwkSKey必须分开存储。有些实现图省事,把两个密钥混在一起管理。一旦泄露,两层防护全废。
重要提醒:LoRaWAN 1.0.x和1.1版本在密钥派生上略有不同。1.1版本引入了NwkKey和AppKey的分离,安全性更高。如果你还在用1.0.x,建议尽快升级。
2.4 三层如何协同工作?
光知道三层各自干什么还不够。你得理解它们怎么配合。我画个流程给你看:
- 设备入网时:设备层提供存储的AppKey,参与Join流程,派生出NwkSKey和AppSKey。
- 数据上行时:应用层先用AppSKey加密payload,网络层再用NwkSKey计算MIC并加密MAC命令。
- 数据下行时:网络服务器先验证MIC,通过后交给应用服务器,应用服务器用AppSKey解密。
你看,每一层各管各的,互不干扰。这就是分层设计的妙处。
调试技巧:我在排查安全问题时,会先看MIC是否正确。如果MIC不对,问题大概率在网络层。如果MIC对但数据乱码,那问题就在应用层。这个排查思路能省不少时间。
2.5 常见误区与避坑
这些年我见过不少安全翻车案例,总结几个典型误区:
- 误区一:以为LoRaWAN自带安全,就不做额外防护。其实协议只保证传输安全,设备本身的安全还得自己管。
- 误区二:把AppSKey和NwkSKey混在一起存储。一旦泄露,两层全完。
- 误区三:忽略帧计数器持久化。设备重启后计数器归零,攻击者就能重放旧数据包。
- 误区四:使用默认密钥或弱密钥。我见过有人用"1234567890ABCDEF"当AppKey的,这跟没锁门一样。
嗯,安全这东西,细节决定成败。LoRaWAN的架构设计本身没问题,但落地时稍不注意就会留漏洞。希望这张全景图能帮你建立起全局视角,后面我们再深入每个细节。