Micro Air Vehicle Link(简称MAVLink)用于无人系统(例如,机器人、无人机、无人车、无人船和无人潜航器)。它定义了一组无人系统和地面站之间的消息交换规则。此协议广泛用于无人驾驶系统中,特别是ArduPilot和PX4无人驾驶系统,MAVLink协议提供了强大的功能,不仅用于监视和控制无人系统任务,也将无人系统集成进入互联网。
图1 PX4飞控系统四轴固定翼无人机
1.MAVLink消息结构介绍
无人机集成了特殊的硬件和软件,通过这些硬件和软件实现自动驾驶。地面控制站与无人机之间通过交换MAVLink消息实现通信。MAVLink协议规则在2009年由Lorenz Meier以LGPL授权的方式发布。从发布至今,MAVLink由于消息短小,通信开销小,效率高等特点在无人机通信中得到广泛应用。下面分别介绍版本1.0和版本2.0的MAVLink消息结构。
图2 无人机和地面站通信示意图
MAVLink版本1.0,也是当前最流行,使用最广泛的MAVLink版本,其消息结构列表如下:
名称 | 字节序号 | 含义 |
---|---|---|
STX | 0 | 一帧的开始,MAVLink 1.0中,该值固定为0xFE。 |
LEN | 1 | 消息载荷的长度。 |
SEQ | 2 | 消息的序列号,当开始发送消息时,该值从0增长到255,到255后又重置为0,重新开始增长。 |
SYS ID | 3 | 系统编号,每个无人机系统都有一个系统编号用于在通信中标识自己,地面控制站的系统编号通常为255。 |
COMP ID | 4 | 组件编号,无人机系统中不同的组件用组件编号来进行区分,组件编号标识发送消息的无人机系统的组件。在无人机系统中有27种不同类型的组件。 |
MSG ID | 5 | 消息编号,标识不同种类的无人机消息。例如编号为0的消息是无人机的心跳消息。 |
PAYLOAD | 6(N=1)6~5+N (N>=2) | 消息载荷,不同类型的消息的载荷在结构、内容和长度上不同。 |
CHECKSUM | 6+N~7+N | 校验和,通过计算和检查校验和来判断消息的有效性。需要注意的是校验和的计算不包括STX字段,并且根据MSG ID的不同,校验和计算前在消息的末尾会加入一个种子值一起计算。 |
MAVLink 2.0版本是在1.0版本的基础上扩展了消息类型和安全性签名的版本。版本2.0将消息ID字段扩展到3个字节,大幅度增加了可支持的消息类型,并且支持消息签名;签名是一种认证机制,旨在提高通信的安全性。消息签名占用13字节,放于载荷之后。MAVlink版本2.0的消息结构介绍如下:
名称 | 字节序号 | 含义 |
---|---|---|
STX | 0 | 一帧的开始,MAVLink 1.0中,该值固定为0xFE。 |
LEN | 1 | 消息载荷的长度。 |
INC FLAGS | 2 | 不兼容性标志,如果实现不能识别该标志,则丢弃数据包。(签名消息中,该字段为0x01) |
CMP FLAGS | 3 | 兼容性标志,用于指示功能不会阻止MAVLink库处理数据包。即实现如果不识别该标志,数据包依然可以进入后续处理。 |
SEQ | 4 | 消息的序列号,当开始发送消息时,该值从0增长到255,到255后又重置为0,重新开始增长。 |
SYS ID | 5 | 系统编号,每个无人机系统都有一个系统编号用于在通信中标识自己,地面控制站的系统编号通常为255。 |
COMP ID | 6 | 组件编号,无人机系统中不同的组件用组件编号来进行区分,组件编号标识发送消息的无人机系统的组件。在无人机系统中有27种不同类型的组件。 |
MSG ID | 7~9 | 消息编号,标识不同种类的无人机消息。例如编号为0的消息是无人机的心跳消息。 |
PAYLOAD | 10(N=1) 10~9+N (N>=2) | 消息载荷,不同类型的消息的载荷在结构、内容和长度上不同。 |
CHECKSUM | 10+N~11+N | 校验和,通过计算和检查校验和来判断消息的有效性。需要注意的是校验和的计算不包括STX字段,并且根据MSG ID的不同,校验和计算前在消息的末尾会加入一个种子值一起计算。 |
SIGNATURE | N+12~N+25 | 签名,用于消息合法性认证的签名,非签名消息中无该字段,该字段由三部分组成,按照顺序分别是LinkID、Timestamp和Signature。 |
签名字段占用13个字节,该字段本身又由三个字段组成,按照先后顺序说明如下:
LinkID,占用一个字节,表示链接的ID(通道编号)用于发送数据包。链路或信道可以是WiFi或遥测,并且可以组合。每一个用于发送数据的通道应该有自己的LinkID。以(SYS ID, COMP ID, LINK ID)为一个通信链路的标识,这为多通道无人系统提供了一种使用MAVLink 2.0进行控制的手段。
Timestamp,即时间戳,占用6个字节,它是当前时间距离GMT时间2015年1月1日0时0分0秒的微秒数(微秒即百万分之一秒)。这个时间戳随着每次消息发送递增,可有效地抵抗重放攻击。
Signature,即签名,占用6字节,计算公式如下:
signature = sha256_48(secret_key + header + payload + CRC + link-ID + timestamp)
signature取计算结果的前48比特,通过签名可对消息的合法性进行验证,提高通信安全性。
2.MAVLink协议安全性分析
从版本1.0和2.0版本的消息结构中可以看出,MAVLink消息是不加密传输的,消息的私密性无法保障,攻击者可以监听并分析无人机和地面站之间的MAVLink通信,针对版本1.0和2.0非签名消息,攻击者可以实施伪造、重放、中间人、劫持、泛洪等攻击。多个研究者的论文也表明MAVLink协议,特别是版本1.0和版本2.0的非签名消息存在实施多种安全攻击的可能。但针对MAVLink 2.0签名版消息的攻击提得较少,究其原因,MAVLink 2.0签名版增加了签名认证机制,普通攻击难于突破这种认证机制;
MAVLink版本2.0的签名机制的安全性通过以下过程得以保障:
首先secret_key通过安全通信在无人机和地面站之间进行交换或同步;可通过加密或者物理安全机制发送secret_key数据;secret_key为32个字节,即便监听到消息后对secret_key进行反算的难度也非常高,反算在理论上需要遍历2的256次方种可能的组合,这在根本上保障了通信的安全性;
其次,由于timestamp的存在,重放和泛洪攻击方法也将失效;timestamp在每次消息之间不断增长,一旦增长,签名被重新计算,签名结果发生变化,这时候无论是重放还是泛洪的数据均会被丢弃。
如果使用MAVLink协议进行无人机控制系统开发,建议采用安全性更高的2.0版本签名消息,并且禁用1.0版本和非签名版的2.0消息,通过安全通道定期(如每次飞行前)更新secret key。