作者:倒颠0 | 来源:互联网 | 2023-05-18 21:10
AUTOSAR标准的安全通信
为支持功能安全,AUTOSAR标准结合ISO 26262功能安全标准,在基础软件层从安全执行、安全通信以及安全内建测试三个方面做出了规范,并规范了使用方法,本文主要介绍其安全通信部分。
1.安全通信组成部分
为了支持安全通信,AUTOSAR提供了三种机制,数据顺序控制、PDU复制和K/N的投票机制以及端到端的保护机制。其中数据顺序控制在COM中实现;PDU复制和N分之K(简称K/N)的投票机制涉及到COM和PduR模块;端到端的保护机制借助于端到端保护库(E2E库)来实现。
1.1 COM模块
COM模块为应用程序提供基于信号的数据服务接口,并根据信号自身预定义的发送类型来发送报文。本模块还提供了附加的服务接口可用于检测是否成功发送报文、成功接收报文以及报文是否超时等。对于多个通信通道的ECU,本模块还提供了一个用于不同通信总线之间的信号路由即信号网关的功能。
同时,为了支持安全通信,本模块提供了两种机制,数据顺序控制和K/N的投票机制来增强通信的安全。
1.2 PduR模块
PduR模块主要提供两类服务:
- 承上启下衔接上层和下层:发送时派发从高层模块的PDU到低层模块,并支持上层到下层的1对多映射即多播机制;接收时派发从底层模块如If或者TP接收的PDU给高层模块(COM,PduR)。
- 通信网络中的网关功能:网关功能有两种:从一个接口层到另外一个相同或者不同总线类型的接口层;从一个TP到另外一个相同或者不同总线类型的TP层。其中,路由协议基于一个静态的路由表和PDU ID的概念。
1.3 E2E保护库
E2E是一个端到端的通信保护库,只依赖于循环校验(简称CRC)库。为确保软件的开放分层,应当考虑如下的通信故障检测:
1) 点对点通信的丢帧。
2) 无意义的重复发送相同的消息。
3) 发送过程中的消息丢失。
4) 接收到伪装正确源地址的消息。
5) 接收到的消息序号和发送的消息序号不一致。
6) 消息在传输过程中损坏。
7) 未在指定的时间内接收到消息。
8) 防止数据总线被错误节点过度请求服务。
9) 一个故障节点的损坏导致整个总线的故障。
E2E支持的通信故障源包括:
- 软件故障
例如COM通信协议栈和RTE的软件模块,因为系统性质本身可能包含隐藏的错误。系统故障可能发生在规范、设计、制造、操作、维护的任何阶段的系统生命周期。他们出现的情况总是相同的(如触发源的条件)。软件故障可能会导致中断通信,接收溢出,发送空消息等。为防止软件故障的产生,应当采取适当的程序监控或E2E技术措施进行检查和处理是必要的。 - 硬件随机故障
硬件随机故障通常源自硬件电气过载,退化,老化或受外部条件(例如环境压力)影响。一个硬件随机故障不能完全避免,但其概率可以通过适当的技术措施(例如诊断)评估。 - 外部环境因素
这些因素包括电磁干扰(EMI),静电放电(ESD),空气湿度,腐蚀,温度,机械应力(如震动)等等。
2.安全通信关键技术
本章分别介绍SmartSAR Core在AUTOSAR的安全通信实现中,采用的三个关键技术,分别是数据顺序控制机制、PDU复制和K/N的投标机制、端对端的保护机制。
2.1 数据顺序控制机制
AUTOSAR COM模块基于PDU计数器提供了数据顺序控制机制,乱序的PDU,比如重复的或者在丢失的PDU之后接收到的PDU就能被检测出来并丢弃。这种机制需要发送端和接收端配合使用。
- 发送端
在发送端,对于配置了计数器的PDU,在COM初始化时或者PDU组以TRUE的方式启动时设置计数器为0。以后,在每次发送PDU之前,都会递增这个计数器。如果调用PduR的向下发送服务返回失败,则执行减一操作,也就是对于一个PDU每成功发送一次,则对这个它的顺序控制计数器执行加一操作。 - 接收端
在接收端,对于配置了计数器的PDU,在COM初始化时或者PDU组以TRUE的方式启动时设置计数器为0。以后,无论顺序计数器的值怎样,都应接受到来PDU。一旦接受一个包含顺序计数器的PDU,COM模块应设置下一个期待的值为接收到的计数器的下一个值。
如果一个顺序计数器是4位的,它有从0到15这16个可能值。如果一个接收到一个PDU,并且接收到的计数器是15,则下一个期待的值应为0。不论接收到的值是否和实际期待的值相等,新的期待的值都应被更新。
接收到一个包含顺序计数器的PDU时,COM应先设置下一个期待的值,然后丢弃这个PDU,当且仅当这个PDU符合以下条件:
收到的PDU的顺序计数器小于期待的PDU计数器,或者接收到的PDU顺序计数器大于期待的PDU计数器和一个配置的容错阈值的和。
如果发生顺序计数器不匹配,COM可以调用这个PDU的一个回调函数来通知用户。
PDU顺序计数器是4位,配置的容错阈值为1,则匹配情况如下表 1所示。
表 1 顺序计数器为4位,容错阈值为1的样例表
期待的PDU计数器 | 接收到的计数器的值 | 动作 |
---|
6 | 6 | 正常接收 |
6 | 7 | 正常接收 |
6 | 8 | 丢包 |
6 | 1 | 丢包 |
15 | 15 | 正常接收 |
15 | 0 | 正常接收 |
15 | 1 | 丢包 |
2.2 PDU复制和K/N的投票机制
安全相关的PDU可能需要在下层被复制来防止数据的损坏或丢失。在AUTOSAR中,PDU的复制在PduR中以多播的形式来实现。复制的PDU的比较和投票机制在COM中实现。由于复制的PDU没有校验或者签证以供比较使用,就需要在接收方存储并比较整个PDU。
- 发送端
在发送端,只需要在PduR中为对应的PDU配置多播路径即可。但是,必须要确保复制的PDU配置有顺序计数器,为了在接收端基于顺序计数器来进行投票。
对于K/N的投票机制,应确保复制N份PDU发送出去。 - 接收端
在接收端,负责对接收到的复制的PDU进行投票,并只向RTE传递成功发送的一直的PDU的消息。复制的PDU要配置有顺序计数器。然而,建议配置容错阈值为0,避免情况太复杂。
对于K/N的投票机制,至少接收到相同的K份数据才保证数据是可靠的,才能提交这个PDU的消息给RTE。
2.3 端到端的保护机制
端到端的保护需要发送端和接收端的配合使用才能检查出错误。
发送端的流程如图 1所示。首先,PDU的发送方初始化配置结构体和状态结构体;然后用最新的信号的值更新PDU;取得PDU的数据;根据这些参数调用E2E_PXXProtect,执行E2E的逻辑,加入CRC校验信息,加入数据计数器信息,最后把数据一起发送到总线上。其中CRC校验信息可用来检查一位到两位错等硬件错误,数据计数器信息可以辅助检查到顺序出错等问题。
图 1 E2E的发送方
接收端的流程如图 2所示。首先,PDU的接收方初始化配置结构体和状态结构体;然后接收PDU;取得PDU的数据;根据这些参数调用E2E_PXXCheck,执行E2E的逻辑,检查CRC校验信息,检查数据计数器信息,如果都没有错误才把收到的PDU中的数据提交给应用。其中CRC校验信息可用来检查一位到两位错等硬件错误,数据计数器信息可以辅助检查到顺序出错等问题。
图2 E2E的接收方