3. 网络层安全:无线通信安全与数据传输加密

网络层是农业物联网的命脉。传感器采集的数据要传出去,控制指令要发回来,全靠这一层。但无线信号在空中飘着,谁都能收到——这就麻烦了。

我做了这么多年物联网安全,见过太多人只盯着应用层,觉得网络层有加密就万事大吉。其实不然。无线通信的安全,说白了就是三个问题:信号能不能被截获?数据能不能被篡改?设备能不能被冒充?

这一章,咱们就围绕这三个问题展开。

3.1 无线通信技术安全对比

农业场景里,Wi-Fi、LoRa、ZigBee 用得最多。它们各有各的脾气,安全特性也完全不同。

技术 频段 典型距离 加密方式 主要风险
Wi-Fi 2.4/5 GHz 50-100 m WPA2/WPA3 暴力破解、KRACK攻击
LoRa Sub-1 GHz 2-15 km AES-128 重放攻击、干扰
ZigBee 2.4 GHz 10-100 m AES-128-CCM* 密钥泄露、嗅探

先说说 Wi-Fi。农业大棚里用 Wi-Fi 的不少,尤其是视频监控和网关。WPA2 虽然普及,但 KRACK 攻击能让它形同虚设。我建议能用 WPA3 就别用 WPA2,实在不行也要禁用 TKIP,只开 CCMP。

LoRa 呢?它主打远距离、低功耗。加密用的是 AES-128,但有个坑——很多模块出厂时密钥是写死的。我曾经遇到过一批 LoRa 节点,所有设备的 AppKey 都是 12345678... 你想想看,这跟没加密有什么区别?

ZigBee 在农业里常用于传感器网络。它的安全层其实设计得不错,CCM* 模式同时提供加密和完整性校验。但问题出在密钥分发上。很多项目图省事,直接用默认的 Link Key,攻击者只要拿到一个设备就能解整个网络的数据。

⚠️ 注意: 无论用哪种无线技术,出厂默认密钥必须更换。这是最基本的安全习惯,但也是被忽视最多的。

3.2 数据传输加密实战

无线通信加密分两层:链路层加密和端到端加密。链路层加密由无线芯片完成,比如 Wi-Fi 的 WPA3、LoRa 的 AES-128。但光靠这个不够——网关能看到明文数据。所以,端到端加密才是真正的保险。

我个人习惯在应用层再加一层加密。具体做法是:传感器采集数据后,先用 AES-256-GCM 加密,再通过无线模块发送。网关收到后不解密,直接转发到云端。云端再用私钥解密。这样即使无线链路被攻破,攻击者拿到的也是密文。

下面是一个简单的 AES-256-GCM 加密示例(Python):

from cryptography.hazmat.primitives.ciphers.aead import AESGCM
import os

def encrypt_sensor_data(data: bytes, key: bytes) -> bytes:
    # 生成随机 nonce,每次加密都不同
    nonce = os.urandom(12)
    aesgcm = AESGCM(key)
    # 关联数据可以带上设备ID和时间戳
    aad = b"agri_sensor_v1"
    ciphertext = aesgcm.encrypt(nonce, data, aad)
    # 返回 nonce + 密文
    return nonce + ciphertext

def decrypt_sensor_data(encrypted: bytes, key: bytes) -> bytes:
    nonce = encrypted[:12]
    ciphertext = encrypted[12:]
    aesgcm = AESGCM(key)
    return aesgcm.decrypt(nonce, ciphertext, b"agri_sensor_v1")

这里有个关键点:nonce 必须唯一。如果两次加密用了相同的 nonce,GCM 模式的安全性就崩塌了。我见过有人用固定 nonce,结果密文被轻松破解。嗯,这个坑一定要避开。

💡 建议: 密钥管理用硬件安全模块(HSM)或安全元件(SE)。别把密钥硬编码在代码里,至少也要用环境变量或密钥管理服务。

3.3 网络入侵检测

加密不是万能的。攻击者可能不破解加密,而是直接干扰通信、伪造设备、发起拒绝服务攻击。这时候就需要入侵检测系统(IDS)了。

农业物联网的 IDS 和传统 IT 的 IDS 不太一样。农业网络流量小、设备种类多、通信模式相对固定。这反而是好事——异常行为更容易被发现。

我常用的检测方法有三种:

  • 流量基线检测: 记录正常情况下的流量模式,比如每个传感器每小时发一次数据包,包大小 50-100 字节。如果突然出现大量异常流量,触发告警。
  • 协议异常检测: 检查数据包是否符合协议规范。比如 LoRaWAN 的帧头格式、ZigBee 的 APS 层格式。不符合的包直接丢弃。
  • 设备指纹识别: 每个无线设备都有独特的射频特征,比如信号强度波动、时钟偏移。攻击者用相同型号的设备冒充,指纹也会不同。

下面是一个简单的流量基线检测逻辑:

class TrafficBaselineDetector:
    def __init__(self, device_id, expected_interval=3600, tolerance=0.2):
        self.device_id = device_id
        self.expected_interval = expected_interval  # 秒
        self.tolerance = tolerance
        self.last_seen = None

    def check_packet(self, timestamp):
        if self.last_seen is None:
            self.last_seen = timestamp
            return True

        interval = timestamp - self.last_seen
        lower = self.expected_interval * (1 - self.tolerance)
        upper = self.expected_interval * (1 + self.tolerance)

        if lower <= interval <= upper:
            self.last_seen = timestamp
            return True
        else:
            # 异常:时间间隔超出容忍范围
            return False

这个检测器虽然简单,但在实际项目中效果不错。我曾经在温室项目里部署过,成功抓到了一个攻击者——他用伪造节点发送假数据,但因为发包频率和正常节点不一样,被基线检测直接揪出来了。

🔑 核心要点: 入侵检测不是一劳永逸的。攻击者在变,检测规则也要跟着变。定期更新基线、加入机器学习模型,才能保持有效。

3.4 知识体系总览

这一章的内容比较多,我画了一张图帮你理清思路:

网络层安全知识体系 网络层安全 无线通信安全 数据传输加密 网络入侵检测 Wi-Fi 安全 LoRa 安全 ZigBee 安全 链路层加密 端到端加密 密钥管理 流量基线 协议异常 设备指纹 三层防护缺一不可 无线安全 + 加密 + 检测 = 纵深防御

从图上你能看到,网络层安全不是单点防护,而是三层纵深防御。无线通信安全解决链路层面的风险,数据传输加密保护内容不被泄露,入侵检测则负责发现异常行为。三层配合,才能构建一个相对安全的农业物联网网络。

💡 实战建议: 先做加密,再做检测。加密是基础,检测是补充。别反过来——没有加密的网络,检测到攻击也来不及阻止。