1. 课程导入
无人机从遥控飞行走向自主集群、超视距任务和云端调度之后,链路安全就不再只是“信号好不好”的问题,而是“指令是否可信、来源是否真实、数据是否被篡改”的问题。MAVLink 作为无人机与地面站、飞控、机载计算机之间最广泛使用的轻量级通信协议,长期以明文和校验和方式传输。MAVLink1 与未启用签名的 MAVLink2 报文,攻击者只要接入链路,就可能伪造解锁指令、篡改航点、注入返航命令,甚至劫持整条任务链。本课程围绕 MAVLink2 签名机制,建立从协议原理到工程落地的完整通信安全能力。
一、学习目标:从“会连”到“可信地连”
本课程不是单纯讲一个加密算法,而是把签名放进无人机通信工程的全链路中理解。完成学习后,你应当能够达到以下目标:
- 理解威胁模型:能区分窃听、重放、篡改、伪造、拒绝服务等不同攻击在 MAVLink 链路中的具体表现。
- 掌握签名报文结构:能说清 MAVLink2 签名帧中 13 字节签名字段的组成、时间戳与链路 ID 的作用。
- 完成工程配置:能在 ArduPilot、PX4 与常见地面站中正确设置签名密钥、时间同步和链路 ID。
- 具备排障能力:能根据日志、丢包、拒收计数定位签名失败原因,而不是盲目重刷固件。
- 建立体系视角:理解签名只是通信安全的一层,还需与 TLS、VPN、密钥管理和访问控制协同。
二、核心概念:签名、密钥、时间戳与链路 ID
MAVLink2 签名在原始报文末尾追加 13 字节签名字段,其核心思想是:发送方用共享密钥对报文内容、时间戳、链路 ID 等要素计算消息认证码,接收方用同一密钥验证。验证通过才接受该报文。关键概念包括:
| 概念 | 作用 | 工程要点 |
|---|---|---|
| 签名密钥 | 32 字节共享密钥,用于生成和验证签名 | 全网一致,不能硬编码在公开仓库 |
| 时间戳 | 防止重放攻击,标识报文新鲜度 | 收发双方需时间同步,允许一定窗口 |
| 链路 ID | 标识报文来自哪条链路,防止跨链路重放 | 多链路系统必须逐链路配置 |
| 签名算法 | 基于 SHA-256 的消息认证码 | 关注实现是否完整、是否被裁剪 |
| 拒收计数 | 统计签名验证失败报文数量 | 是排障的第一手指标 |
理解这些概念时,要抓住一条主线:密钥决定“谁能说”,时间戳决定“什么时候说的”,链路 ID 决定“从哪条路说的”。三者共同构成 MAVLink2 签名的防重放与防伪造能力。
三、整体框架:从链路到体系的四层安全
通信安全工程不能只盯一个协议字段。建议用四层框架来组织本课程的全部内容:
- 链路层:射频、数传、WiFi、4G/5G 链路本身的可用性与接入控制。
- 协议层:MAVLink2 签名、报文校验、序列号与时间戳机制。
- 传输层:在 IP 链路上叠加 TLS、VPN 或 SSH 隧道,提供保密性与端点认证。
- 管理层:密钥生成、分发、轮换、吊销,以及地面站与飞控的权限控制。
下面的 SVG 展示了这四层如何围绕一条典型无人机数据链协同工作,以及签名在其中的位置。
四、典型场景:一次被篡改的返航指令
设想一个真实场景:某测绘无人机通过 4G 链路接入云端地面站,攻击者在同一网段伪造 MAVLink 报文,向飞控发送“返航”指令。若未启用签名,飞控无法区分该指令来自合法地面站还是攻击者,任务可能被中断甚至坠机。启用 MAVLink2 签名后,飞控会验证报文中的签名、时间戳和链路 ID,攻击者没有密钥,无法生成合法签名,报文被拒收并计入拒收计数。
这个场景说明:签名不是“锦上添花”,而是把“谁都能发指令”变成“只有持密钥者能发指令”的关键开关。工程中常见的配置片段如下:
# ArduPilot 参数示例(启用 MAVLink2 签名)
SERIAL1_PROTOCOL = 2 # MAVLink2
SERIAL1_BAUD = 57600
MAV_SIGNING_KEY = <32字节密钥>
MAV_SIGNING_LINK_ID = 1
# 地面站需配置相同密钥与链路 ID
五、常见误区与复盘要点
复盘时建议按以下清单逐项检查:
- 密钥是否全网一致,且未出现在公开仓库、日志或镜像中?
- 收发双方时间是否同步,偏差是否在允许窗口内?
- 多链路系统中,每条链路的链路 ID 是否唯一且正确?
- 拒收计数是否持续增长,增长对应哪条链路、哪个方向?
- 是否在 IP 链路上叠加了 TLS/VPN,避免仅依赖签名?
- 密钥轮换与吊销流程是否可执行、可审计?
本课程后续将沿着“协议结构 → 签名计算 → 工程配置 → 日志排障 → 体系加固”的路径展开。你现在需要建立的,不是零散的命令记忆,而是一张清晰的通信安全地图:知道签名在哪里、保护什么、不保护什么,以及它必须和哪些机制配合,才能让无人机链路真正可信。