1. LoRaWAN 安全架构概述:威胁模型、安全目标与分层
各位好,我是老周。做 LoRaWAN 安全也有七八年了。今天咱们聊聊安全架构的底子——威胁模型、安全目标,还有那三层防护体系。这些东西看着基础,但我在项目里见过太多人栽在基础认知上。
说白了,LoRaWAN 不是 Wi-Fi,也不是 NB-IoT。它有自己的脾气。你想想看,一个终端节点可能在山沟里待三年,没人管,电池还不能换。这种场景下,安全设计能跟手机一样吗?
1.1 安全威胁模型:谁在盯着你的 LoRaWAN 网络?
先搞清楚敌人是谁。我习惯把威胁分成四类,每一类我都吃过亏。
| 威胁类型 | 攻击手段 | 真实案例(我遇到的) |
|---|---|---|
| 窃听 | 空中抓包,分析载荷 | 某水表项目,明文传输被竞争对手截获了抄表数据 |
| 重放 | 抓取合法报文后重复发送 | 智能门锁项目,攻击者重放开锁指令,门开了两次 |
| 篡改 | 修改报文内容再转发 | 温控器项目,篡改温度阈值导致空调系统崩溃 |
| 伪造 | 冒充合法节点入网 | 某资产追踪项目,伪造节点上报虚假位置 |
还有一个容易被忽略的点:物理攻击。终端节点部署在户外,攻击者可以直接拆设备、读芯片、提取密钥。我见过有人用逻辑分析仪直接从 SPI 总线上把 AES 密钥抓出来的。嗯,这个后面讲设备层安全时会细说。
1.2 安全三目标:CIA 在 LoRaWAN 里的落地
信息安全的老三样——机密性、完整性、可用性。但在 LoRaWAN 里,每个目标的实现方式都不一样。
机密性(Confidentiality)
说白了就是不让别人看懂你的数据。LoRaWAN 用 AES-128 做加密,但加密粒度有讲究:
- 网络层加密:用 NwkSKey 加密 MAC 命令,保护网络控制信息
- 应用层加密:用 AppSKey 加密应用数据,网络服务器也看不到业务内容
我建议你记住一个原则:应用数据必须走应用层加密。有些厂商图省事,只做网络层加密,结果网络服务器运维人员就能看到所有业务数据——这在很多行业是合规问题。
完整性(Integrity)
保证数据没被改过。LoRaWAN 用 MIC(消息完整性码)来实现。每个上行/下行报文都带 4 字节的 MIC,接收方用同样的密钥和算法重新计算,比对一致才算合法。
可用性(Availability)
这个在 LoRaWAN 里最容易被忽视。攻击者不需要破解加密,只需要在同一个频点持续发送干扰信号,就能让你的整个网络瘫痪。这就是所谓的 Jamming 攻击。
我记得有个智慧农业项目,传感器部署在开阔农田里。攻击者用一台 100mW 的发射机在 470MHz 频段持续发射,所有终端都连不上网关。最后我们加了跳频策略和信号强度异常检测才解决。
1.3 安全架构分层:三层各司其职
LoRaWAN 的安全架构分三层。我画了张图,帮你理清关系。
设备层——信任的起点
设备层是所有安全的根基。每个终端在出厂时就要烧录 AppKey(OTAA 入网)或 NwkKey(LoRaWAN 1.1 版本)。这些密钥一旦泄露,整个安全体系就垮了。
我建议你在设备选型时问供应商三个问题:
- 密钥是在产线上怎么烧录的?有没有加密传输?
- 芯片有没有安全存储区?密钥能不能被软件读出来?
- 有没有防拆机制?拆机后密钥会不会自毁?
网络层——通信的守门员
网络层负责保护 LoRaWAN 协议本身的通信安全。主要干三件事:
- MIC 校验:每个报文都带完整性校验码,防止篡改
- 帧计数器:防止重放攻击。发送方和接收方各自维护一个计数器,报文序号必须递增
- MAC 命令加密:网络控制指令(如 ADR、RX 窗口参数)用 NwkSKey 加密传输
帧计数器这块坑最多。我遇到过终端重启后计数器归零,但服务器还记着旧值,结果所有报文都被丢弃。解决办法是在终端侧做非易失性存储,每次发送前把计数器值写进 Flash。
应用层——业务的保险箱
应用层只做一件事:保护你的业务数据。用 AppSKey 对应用载荷做 AES-128 加密,网络服务器只能看到密文,解不开。
这里有个常见误区:有些人觉得"反正网络层已经加密了,应用层加不加密无所谓"。错!网络层加密只保护到网络服务器,如果你的网络服务器被攻破,或者运维人员有权限查看明文数据,应用数据就全裸奔了。
1.4 密钥体系:一张表说清楚
LoRaWAN 的密钥体系看着复杂,其实就几个核心概念。我整理了一张表,方便你对照排查。
| 密钥名称 | 长度 | 用途 | 存储位置 | 派生方式 |
|---|---|---|---|---|
| AppKey | 128 bit | OTAA 入网凭证,派生 AppSKey 和 NwkSKey | 终端 + 网络服务器 | 出厂预置 |
| NwkKey | 128 bit | LoRaWAN 1.1 版本,替代 AppKey 的部分功能 | 终端 + 网络服务器 | 出厂预置 |
| AppSKey | 128 bit | 应用数据加密 | 终端 + 应用服务器 | Join 过程中派生 |
| NwkSKey | 128 bit | 网络层加密和 MIC 计算 | 终端 + 网络服务器 | Join 过程中派生 |
好了,这一章的内容就这些。安全架构是后面所有故障排查的基础。你把这个三层模型和密钥体系吃透了,后面遇到 Join 失败、MIC 错误、解密失败这些问题,心里就有底了。