E2E 用于保护安全相关的数据交互,以防止数据在交互过程中因为” FAULT” 导致数据完整性,时效性,合法性出现问题, 比如HW RANDOM FAULT 导致数据被篡改
E2E 的使用可以满足ISO26262 -6 对于数据安全传输的要求, 最高可以满足ASILD 的要求
需要强调的是,E2E 既可以保护SIGNAL COMMUNICATION(如CAN),也可以用来保护DATA Exchange
以下内容是ISO 26262 [14] part 6, annex D.2.4 对于安全相关数据传输所提出的要求,也是E2E 能够满足额要求
通过COUNTER保证
通过COUNTER/TIMOUT保证
通过COUNTER/TIMOUT保证
通过DATA ID 保证
发送者的身份存在问题, 主要通过DATA ID /CRC保证
数据顺序不对,通过COUNTER连续性保证
数据被篡改,通过CRC 保证
were receivers do receive different information from the same sender通过CRC 来保证
were some receivers do not receive the information. 通过Counter来保证(loss on specific receivers)
were the access to a communication channel is blocked, 通过Counter来保证(loss or timeout)
需要强调的是,E2E 既可以保护SIGNAL COMMUNICATION(如CAN),也可以用来保护DATA Exchange
对于Signal Communication Protection, E2E 有二种使用方式,如下。 无论采用哪种方式最终都会调用到E2E lib 中的E2E_Protect 和E2E_Check
对于这种方式的保护,需要引入ComXf 或者SomeIpXf,时序如下
Sender
Receiver
这种方式在AR 4.2 之后就被E2E Transformer所替换, 调用时序类似,RTE->E2E PW->E2E lib ,这种方式不在引入ComXf 或者SomeIpXf
对于数据保护, 则需要直接请求E2E lib 中的E2E_Protect 和E2E_Check
Attributes Comparation
Profile |
DATAID |
Counter |
CRC |
|
P1 |
16 |
4 |
CRC-8 |
Dynamic Signal Position |
P2 |
8 |
4 |
CRC-8 |
Dynamic DATA ID Dynamic Signal Position |
P4 |
32 |
16 |
CRC-32 |
Dynamic Length Fixed Signal Position |
P5 |
16 |
8 |
CRC-16 |
Fixed Signal Position |
P6 |
16 |
8 |
CRC-16 |
Dynamic Length Fixed Signal Position |
P7 |
32 |
32 |
CRC-32 |
Dynamic Length Fixed Signal Position |
P11 |
16 |
4 |
CRC-8 |
Fixed Signal Position |
P22 |
8 |
4 |
CRC-8 |
Dynamic DATA ID Fixed Signal Position |
Attributes Transmission
Profile |
DATAID |
Counter |
Length |
CRC |
P1 |
? |
Y |
N |
Y |
P2 |
N |
Y |
N |
Y |
P4 |
Y |
Y |
Y |
Y |
P5 |
N |
Y |
N |
Y |
P6 |
N |
Y |
Y |
Y |
P7 |
Y |
Y |
Y |
Y |
P11 |
? |
Y |
N |
Y |
P22 |
N |
Y |
N |
Y |
Counter
长度为4 bit from 0 to 14 (0xff is reserved), 参与数据传输, 参与CRC的计算
Data ID
长度为16 bit
E2E_P01_DATAID_BOTH (0)
16-bit Data ID 都参与CRC的计算,但是不参与数据传输
E2E_P01_DATAID_ALT (1)
当COUNTER 为偶数时,Low Byte参与CRC的计算,但是不参与数据传输, 当COUNTER 为奇数时,High Byte参与CRC的计算,但是不参与数据传输
E2E_P01_DATAID_LOW (2)
只有 Low Byte参与CRC的计算,但是不参与数据传输
E2E_P01_DATAID_NIBBLE (3)
High Byte的 高4 bit 不使用, 不参与数据传输, bu参与CRC的计算
High Byte的 低4 bit, 参与数据传输, 参与CRC的计算
Low Byte 不参与数据传输, 参与CRC的计算
CRC
CRC-8-SAE J1850 - 0x1D (x8 + x4 + x3 + x2 + 1), 8bit
E2E_P01STATUS_OK (OK)
E2E_P01STATUS_NONEWDATA (Error)
E2E_P01STATUS_WRONGCRC (Error)
E2E_P01STATUS_SYNC(NOT VALID)
当检测到收到的数据异常之后, 即使再次收到正确的数据也不能立即返回OK,此时需要返回SYNC , 当连续几个数据都正确才会返回OK
E2E_P01STATUS_INITIAL (INIT)
第一次收到该数据
E2E_P01STATUS_REPEATED (Error)
E2E_P01STATUS_OKSOMELOST (OK)
数据CRC 正确,但是CONTER 变化超过1,但是还未超过最大容忍counter (MaxDeltaCounter) ,则返回这个数据
E2E_P01STATUS_WRONGSEQUENCE (Error)
数据CRC 正确,但是CONTER 变化超过最大容忍counter (MaxDeltaCounter) ,则返回这个数据
只是所有的layout位置固定了, 便于沟通
1A
1. CRC is the 0th byte in the signal group (i.e. starts with bit offset 0)
2. Alive counter is located in lowest 4 bits of 1st byte (i.e. starts with bit offset 8)
3. E2E_P01DataIDMode = E2E_P01_DATAID_BOTH
4. SignalIPdu.unusedBitPattern = 0xFF.
1B
区别于1A, byte 1 高4 bits 需要填充默认值
1. CRC is the 0th byte in the signal group (i.e. starts with bit offset 0)
2. Alive counter is located in lowest 4 bits of 1st byte (i.e. starts with bit offset 8)
3. E2E_P01DataIDMode = E2E_P01_DATAID_ALTERNATING
4. SignalIPdu.unusedBitPattern = 0xFF.
1C
1. CRC is the 0th byte in the signal group (i.e. starts with bit offset 0)
2. Alive counter is located in lowest 4 bits of 1st byte (i.e. starts with bit offset 8)
3. The Data ID nibble is located in the highest 4 bits of 1st byte (i.e. starts with bit offset 12)
4. E2E_P01DataIDMode = E2E_P01_DATAID_NIBBLE
5. SignalIPdu.unusedBitPattern = 0xFF.
Counter
长度为4 bit from 0 to 15参与数据传输, 参与CRC的计算
Data ID
长度为8 bit , 不参与数据传输, 参与CRC的计算, Data ID 是动态变化的,依据Counter的不同而不同, DataID=DataIDList[Counter]
CRC
8 bit
Polynomial: 0x2F (x8 + x5 + x3 + x2 + x + 1)
Start value: 0xFF
Final XOR-value: 0xFF
Profile4用于传输大数据,区别Profile 1,2 Profile 4需要传输一个Header, 格式如下
Counter
长度为16 bit,参与数据传输, 参与CRC的计算
Data ID
长度为32 bit,参与数据传输, 参与CRC的计算
CRC
32 bits
polynomial in normal form 0x1F4ACFB13
Length
16 bits, 参与数据传输, 参与CRC的计算, 传输Length便于动态改变传输数据的长度
Profile5用于传输大数据,区别月Profile 1,2 Profile 5需要传输一个Header, 格式如下
Counter
长度为8 bit,参与数据传输, 参与CRC的计算
Data ID
长度为16 bit,不参与数据传输, 参与CRC的计算
CRC
16 bits, polynomial in normal form 0x1021
Profile6用于传输大数据,区别于Profile 1,2 Profile 6需要传输一个Header,格式如下
Counter
长度为8 bit,参与数据传输, 参与CRC的计算
Data ID
长度为16 bit,不参与数据传输, 参与CRC的计算
Length
16 bits, 参与数据传输, 参与CRC的计算, 传输Length便于动态改变传输数据的长度
CRC
16 bits, polynomial in normal form 0x1021
Counter
长度为32 bit,参与数据传输, 参与CRC的计算
Data ID
长度为32 bit,参与数据传输, 参与CRC的计算
Length
32 bits, 参与数据传输, 参与CRC的计算, 传输Length便于动态改变传输数据的长度
CRC
64 bits, polynomial in normal form 0x42F0E1EBA9EA3693,
Profile 1的改进版,减少了Data ID Mode,另外通过设置Header固定了Parameter的传输位置, 区别于Profile 1,User 不能设置Parameter的位置, 必须使用11C/11A Variant
Counter
长度为4参与数据传输, 参与CRC的计算
Data ID
长度为16 bit
E2E_P11_DATAID_BOTH(0)
16 bit Data ID 都参与CRC的计算,但是不参与数据传输
E2E_P11_DATAID_NIBBLE(3)
High Byte的 高4 bit 不使用, 不参与数据传输, 参与CRC的计算
High Byte的 低4 bit, 参与数据传输, 参与CRC的计算
Low Byte 不参与数据传输, 参与CRC的计算
CRC
CRC-8-SAE J1850 - 0x1D (x8 + x4 + x3 + x2 + 1), 8bit
11A
1. CRC is the 0th byte in the signal group (i.e. starts with bit offset 0)
2. Alive counter is located in lowest 4 bits of 1st byte (i.e. starts with bit offset 8)
3. E2E_P11DataIDMode = E2E_P11_DATAID_BOTH
4. SignalIPdu.unusedBitPattern = 0xFF.
11C
1. CRC is the 0th byte in the signal group (i.e. starts with bit offset 0)
2. Alive counter is located in lowest 4 bits of 1st byte (i.e. starts with bit offset 8)
3. The Data ID nibble is located in the highest 4 bits of 1st byte (i.e. starts with bit offset 12)
4. E2E_P11DataIDMode = E2E_P11_DATAID_NIBBLE
5. SignalIPdu.unusedBitPattern = 0xFF.
Profile 2的改进版,通过设置Header固定了Parameter的传输位置, 区别于Profile 2,User 不能设置Parameter的位置,
Counter
长度为4 bit from 0 to 15 (0xff is reserved), 参与数据传输, 参与CRC的计算
Data ID
长度为8 bit , 不参与数据传输, 参与CRC的计算, Data ID 是动态变化的,依据Counter的不同而不同, DataID=DataIDList[Counter]
CRC
8 bit
Polynomial: 0x2F (x8 + x5 + x3 + x2 + x + 1)