最近看到一些很有趣的讨论,觉得还是把E2E的一些概念整理下,以便后期追索。下面的内容大多出自于AutoSAR标准和一些相关的论文,非纯原创,只是资料的搬运工加上一些自己的理解而已。
E2E protection,这里面的E是End的意思,我所理解的这个端对端,主要是数据从应用层到应用层的保护。
这个数据传递的过程可能包含三个部分。
- ECU2ECU之间通信链路的保护(以前最常见的是CAN,现在因为智能驾驶行业的兴起,通过Ethernet、OTA等方式传递的数据,也会列入到需要保护的范畴里。当然这里面可能又会涉及到另外一个庞大的话题-网络安全。)
- 从 ASW to BSW的传输保护
- 从 BSW to ASW的传输保护
如果数据只在一个ECU内部传递,那只会涉及2和3部分。
整个链路里面,典型的软件相关的故障源有:
S1: RTE错误
S2: 生成和手工代码COM错误
S3 网络堆栈错误
S4: IOC或者OS的错误
硬件相关的故障源则有:
H1: 硬件路径的失效
H2: EMC对通信网络的影响
H3: 内核通信或者区域划分时的MCU失效
而所谓的E2E保护,就是要在发现这些错误介入引发的数据失效并作出警示。
AutoSAR标准里保护机制的算法是在E2E library中实现的,主要包含以下功能:
- 保护通过RTE交换的安全相关的数据元素
- 验证从RTE获取的安全相关的数据元素
- 指明接收到的安全相关的数据元素错误,接收方的SW-C必须做出处理
E2E保护的工作过程如下:
发送方:向传输的数据添加CRC或计数器等控制字段(所以这个CRC并不是由CAN Transceiver添加的,跟CAN message里面提到的
接收方:评估接收数据中的控制字段,对控制字段计算(例如,对接收数据的CRC计算),计算的控制字段与预期/接收内容的比较。
为什么会选择CRC这种方法,应该是考虑这种校验方式失效模式整体覆盖率较高的缘故。
这里面要说明一点,我们平时总习惯说CRC checksum,其实这是两种校验方式。
Checksum代表总和检验码,校验和。在数据处理和数据通信领域中,用于校验目的的一组数据项的和。这些数据项可以是数字或在计算检验总和过程中看作数字的其它字符串。
Checksum也有很多不同的类型,比如XOR checksum, 1's complement Checksum, 2's complement Checksum等。
而CRC即循环冗余校核,是一种根据网络数据包或电脑文件等数据产生简短固定位数校核码的快速算法,主要用来检测或校核数据传输或者保存后可能出现的错误,利用除法及余数的原理。
下述公式给出了无法检测的故障概率的计算原理。
其中,
可以看出,其中的影响因素主要是数据长度(包含校验字段的长度)n,汉明距离d,错误位的数量i以及Bit错误的概率p。
ISO26262的第5章D.2.5.6里面还提到CRC的覆盖率还跟CRC二项式本身的选择相关,并且给出了一些示例推荐。这里面2011版和2018版的描述也有些变化,以前都是直接说诊断覆盖率的,现在改成了失效模式的整体覆盖率。
这些二项式的覆盖率是通过计算机仿真得出的,一些详细的介绍可以参考[4],新的二项式也在不断被发现中。
而在AutoSAR标准《Specification of CRC Routines》[3]中,也列明了所推荐的CRC二项式。针对8-bit CRC,推荐了1Dh和2Fh, 因为在AutoSAR中,二项式是用反向倒数表示的,所以其实2FH和0x97是代表了同一个多项式(以前没太留心过这个,正好在大群里看到博世的一位王工的发言,再去看标准,发现果然有所说明,真正是学无止境。)
[3]还推荐了16-bit CRC和32-bit CRC的二项式。一般来说为了符合功能安全的要求,ASILC的信号要考虑用16-bit CRC的二项式校验,而ASILD的信号则要用32-bit CRC的二项式校验,但是其实还是要根据校验方法的覆盖率来选择的。
E2E的使用也有一些限制,如下面所列:
- 仅考虑发送方 - 接收方(排队和非排队)通信(无客户端 - 服务器)
- 仅考虑软件组件之间的周期通信(不基于事件)
- 仅考虑ECU间通信(通过COM堆栈交换的通信)
- 仅考虑排队的发送方 - 接收方通信的非阻塞特性(不支持排队通信的阻塞特性)
另外,标准里面也说了,只用单纯应用E2E Library并不能说明已经充分满足ASILD关于安全通信的要求,还是需要用户阐明选择的校验方式能提供充分的故障检测,那可能需要分析和测试都加以应用。
参考文件
[1] Specification of Module E2E Transformer, 4.3.0
[2] Specification of SW-C End-to-End Communication Protection Library, 4.3.0
[3] Specification of CRC Routines, 4.3.0
[4] Koopman P., & Chakravarty T. 2004), Cyclic Redundancy Code (CRC) Polynomial Selection For Embedded Networks The International Conference on Dependable Systems and Networks, DSN-2004