4. 密码学基础
MAVLink2 签名机制并不是凭空发明的“黑科技”,而是把成熟的密码学工具组合起来,解决无人机链路中“消息是否被篡改、发送方是否可信”这两个核心问题。理解这些基础构件,才能看懂签名字段、密钥装载和拒绝策略背后的设计取舍。
一、核心原理:六类密码学构件各司其职
密码学在通信安全中通常解决四类需求:机密性、完整性、真实性和不可否认性。MAVLink2 签名主要关注完整性与真实性,因此重点落在哈希、MAC、对称加密和数字签名上。
- 哈希函数:把任意长度输入压缩成固定长度摘要,如 SHA-256 输出 256 位。它具备单向性、抗碰撞性和雪崩效应,输入改一位,输出面目全非。哈希本身不提供密钥,因此不能单独证明“谁发的”。
- 消息认证码(MAC):带密钥的哈希,常见有 HMAC-SHA256。发送方和接收方共享同一密钥,接收方重新计算 MAC 并比对,既能发现篡改,也能确认对方持有密钥。MAVLink2 签名本质上就是基于共享密钥的 MAC 思路。
- 对称加密:加密和解密使用同一密钥,如 AES-128/256。速度快,适合遥测、图传等大流量数据,但密钥分发是难点。
- 非对称加密:公钥加密、私钥解密,或私钥签名、公钥验证。RSA、ECC 是典型代表。它解决了密钥分发问题,但计算开销大,通常不直接加密大块数据。
- 数字签名:用私钥对消息摘要签名,公钥验证。它提供不可否认性,常用于固件签名、证书和身份认证。
- 密钥管理:包括生成、分发、存储、轮换、撤销和销毁。密钥一旦泄露,再强的算法也形同虚设。
关键区分:哈希保证“没变”,MAC 保证“没变且对方有密钥”,数字签名保证“没变且对方有私钥”。MAVLink2 签名使用共享密钥,因此属于 MAC 类机制,而不是完整的非对称数字签名。
二、方法流程:从消息到签名校验
以 MAVLink2 签名为例,发送方和接收方需要预先共享同一把 32 字节密钥。发送方在原始帧基础上,结合密钥、链路 ID 和时间戳计算摘要,截取 6 字节作为签名附加到帧尾。接收方收到后,用相同密钥和本地时间窗口重新计算,若签名一致且时间戳在允许范围内,则接受该消息。
发送方:
1. 准备原始 MAVLink2 帧(含消息 ID、载荷、序列号)
2. 读取共享密钥 key(32 字节)
3. 读取当前时间戳 timestamp 和链路 ID link_id
4. 计算 signature = SHA256(frame || key || link_id || timestamp) 的前 6 字节
5. 发送 frame + signature + link_id + timestamp
接收方:
1. 接收帧,提取 signature、link_id、timestamp
2. 检查 timestamp 是否在允许窗口内(如 ±60 秒)
3. 用本地 key 重新计算 expected_signature
4. 比对 signature == expected_signature
5. 一致则接受,否则丢弃并记录安全事件
这里的关键点是:签名不加密载荷,因此遥测内容仍可能被窃听;它只回答“这条消息是否被改过、是否来自持有密钥的一方”。如果需要机密性,应叠加对称加密或链路层加密。
三、案例/场景:无人机链路中的实际取舍
假设一架巡检无人机通过数传电台与地面站通信。攻击者截获链路后,尝试注入一条“返航点被修改”的指令。若未启用签名,飞控无法区分该指令与合法指令,可能执行错误动作。启用 MAVLink2 签名后,攻击者没有共享密钥,无法生成正确签名,飞控校验失败并丢弃该帧。
另一个场景是固件升级。固件包通常使用非对称数字签名:厂商用私钥签名,飞控用预置公钥验证。这样即使分发服务器被攻破,攻击者也无法伪造合法固件。这与 MAVLink2 的共享密钥 MAC 不同,前者解决“不可否认的发布者认证”,后者解决“链路两端互信”。
| 构件 | 典型算法 | 密钥特点 | 主要用途 | 在 MAVLink2 中的角色 |
|---|---|---|---|---|
| 哈希函数 | SHA-256 | 无密钥 | 完整性摘要 | 签名计算的基础运算 |
| 消息认证码 | HMAC-SHA256 | 共享密钥 | 完整性与来源认证 | 签名机制的核心思想 |
| 对称加密 | AES-128/256 | 共享密钥 | 机密性 | 不直接用于签名,可叠加加密 |
| 非对称加密 | RSA、ECC | 公钥/私钥 | 密钥分发、签名 | 用于固件签名、证书体系 |
| 数字签名 | ECDSA、RSA-PSS | 私钥签名、公钥验证 | 不可否认性 | 不用于 MAVLink2 帧签名 |
| 密钥管理 | KMS、HSM | 全生命周期 | 密钥安全 | 决定签名机制是否真正有效 |
四、误区与复盘:常见理解偏差
误区一:签名等于加密。MAVLink2 签名不隐藏载荷,攻击者仍可读取遥测内容。需要机密性时必须额外加密。
误区二:哈希就是签名。哈希没有密钥,任何人都能重新计算。只有带密钥的 MAC 或私钥签名才能提供来源认证。
误区三:密钥可以硬编码在代码里。硬编码密钥一旦泄露,所有设备都受影响。应使用安全存储、密钥轮换和按设备派生密钥。
误区四:时间戳窗口越大越安全。窗口过大会给重放攻击留下空间;窗口过小则容易因时钟不同步导致合法消息被丢弃。
复盘建议:部署 MAVLink2 签名时,先确认链路两端密钥一致、时间同步正常、链路 ID 配置正确,再观察签名失败计数。若失败率突然升高,优先排查密钥是否被误替换、时间是否漂移、是否有第三方设备接入。
掌握这些基础构件后,再看 MAVLink2 的签名字段和密钥装载流程,就能理解每个参数存在的意义:密钥解决“谁有资格”,哈希解决“有没有被改”,时间戳解决“是不是旧消息重放”,而密钥管理决定这套机制能否长期可信。