MAVLink.io(5)--Message Signing(Authentication)[消息签名]

Message Signing(Authentication)[消息签名]

MAVLink 2 支持消息签名,支持MAVlink系统校验消息来源可靠性。

本话题提供了消息签名的概况,适用于开发者和新手阅读。解释了系统如何分辨消息是否签名以及签名的有效性,如何允许未签名信息,以及如何创建和分享签名密钥。
更多的细节信息在**C Message Signing(mavgen)以及Pymavlink Message Signing(mavgen)**章节。

帧格式

STX | LEN | INC FLAGS | CMP FLAGS | CMP FLAGS | SEQ | SYS ID | COMP ID
| MSG ID(3 bytes) | PAYLOAD(0-255 bytes) | CHECKSUM(2 byte)|
| link id(1 byte)| tm.stamp(6 bytes) | signature(6 bytes) |

数据定义
linkID(8 bits)发送连接ID,通常与通道号相同
timestamp(48 bits)时间戳,10ms 单位从2015.1.1 GMT时间起。这个数据必须是随包增加的。指出这个意味着当平均包频率大于10000情况下时间戳可能比实际时间快。
signature(48 bits)48 bits 包签名,基于完整包和密钥。

Link IDs

8 bits link ID 用于保证多连接MAVLink系统中的签名系统的健壮性。每个实现都必须依照MAVLink信道linkID。link ID 在不同通道延时情况下非常重要(譬如Wifi+数传应用)。
单调递增的时间戳规则应用在每个逻辑数据流,数据流通过元组区分
(SystemID,ComponentID,LinkID)

Signature(签名)

48 bit(6 byte)签名使用SHA-256 完整hash的前48 bits(不包含签名,单包含时间戳)附加密钥。密钥使用32 bytes的二进制数据,存储在MAVLink的结尾(i.e 无人机和地面站或者 MAVLink API)。
依照下面diamante,+代表字符串连接,sha256_48() 返回sha256中的前48bit。

signature = sha256_48(secret_key + header + payload + CRC + link-ID + timestamp)

Timestamp Handling(时间戳处理)

时间戳由48bit 数字组成,标识10ms为单位,从2015.1.1GMT时间。如果系统时间是以1970.1.1日其实的,可以直接偏移量增加1420070400秒。
同一link元组消息的所有时间戳必须比前一个时间戳至少多1。当一个爆发式数据包速率大于100000包每秒时,时间戳可能快于GMT时间。
MAVLink设备可能并没有GMT时间,例如无可靠时钟系统,或者系统刚刚上电还没有通过GPS或者其他系统对时。
系统需遵循下列规则获得可靠时间戳。

  • 当前时间戳必须有规律的永久存储(至少1分钟一次)。
  • 开始的时间戳必须时系统时钟和存储时间戳的较大值。
  • 如果系统没有RTC系统,那么在GPS锁定后更行时间戳。选取存储时间戳和GPS时间的较大值。
  • 特定link消息时间戳必须每帧自增1。
  • 在正确的签名信解析后,选取时间戳较大的消息更新。
  • 读入签名消息的时间戳必须与前面消息的时间戳比较,同一(linkID,srcSystem,SrcComponent)元组,如果小于则拒绝消息。
  • 加入元组没有前一消息,并且时间戳不比当前时间大6 million以上(一分钟以上),那么时间戳就被接收。

Accepting Signed Packets(接收签名包)

当一个签名包达到时,以下情况将被抛弃:

  • 时间戳比先前包要早。
  • 计算48 bit 签名不匹配
  • 时间戳比本地系统时间超前1分钟以上。

Accepting Unsigned Packets(接收未签名包)

MAVLink 库提供一种允许有条件的接收未签名包的机制。
接收这种包的实现规则必须具体指定,但是可以基于一组组合的参数设定,传输类型,通用或非通用的标志等。
接收非签名包的一些建议:

  • 接收所有非签名包必须基于一种系统指定的参数。
  • 非签名包接收最好是基于稳定连接通道(例如本地USB电缆、有线以太网等)
  • 非签名包接收最好是在“非签名模式”下进行,例如系统使用硬件进行模式选择
  • 当签名包接收后,无条件的转向更严格的签名包接收规则。

Accepting Incorrectly Signed Packets(接收不正确的签名包)

MAVLink 提供一种有条件接收不正确签名包的机制。
这种特性能够有效找到由于密钥故障而丢失的飞行器(地面站可以选择仍然显示位置信息,并选用“不可信”图标)。

Secret Key Management(密钥管理)

密钥由一组32 bytes 二进制数据构成,用于创建消息签名。密钥由网络上的某一系统创建(多数情况下是地面站),然后使用可靠通道分享到受信任设备。系统必须共享密钥来保证通信可靠。
密钥必须存储在掉电保持存储器,并且不能通过其他公共通信协议泄露,MAVLink 日志文件或者数据闪存日志可能用于公共日志分析。
生成密钥的方法是实现依赖的。例如,可以由以下生成:

  • 用户输入的字符串使用SHA-256计算。
  • 随机密钥生成器。

密钥可以通过SETUP_SIGNING 消息与其他设备共享。消息应该仅仅通过可靠链路发送(例如USB或者有限以太网)直接消息。每个连接的system_id/component_id.接收系统必须设置处理消息,并且永久存储接收到的密钥。
在设置和重置系统密钥时应使用相同的安全手段。
SETUP_SIGNING消息不应该被广播,接收到的SETUP_SIGNING消息不应该自动的传播到其他的在线的MAVLink 设备/流/通道。这样可以避免通过可靠连接获得的密钥自动的转发到另外系统的非可靠连接中。
无人机等不提供基于USB的MAVLink设备应该建立一个模式,这种模式可以通过命令行界面设置密钥,(例如 NSH Shell)。

###Logging (日志)
为了防止密钥的泄漏,系统日志应该省略SETUP_SIGNING消息(或者在密钥部分替换32个 0xff)。
相似的,签名包应该不兼容位清除以及签名部分清除后存入日志文件。这样会使得潜在的攻击者更难于攻击系统。

Further Information

Message Signing Proposal包含更多信息,包括:

  • 设计原因
  • 安全效率评估,包括回放和离线攻击。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值