AUTOSAR|AUTOSAR (JASPAR)FVM Introduction


在阅读本文之前,请先了解SecOC流程,可参见AUTOSAR SecOC Introduction”
IntroductionFVM (Freshness Management) 的主要功能负责管理Freshness Value,正如在SecOC 一文中介绍因为CMAC 授权码是基于对称加密算法而产生,那么也就意味着对于相同内容的Secured I-PDU,所产生的CMAC 也是一致的, 因此对于“攻击者“来说即使不知道密钥(KEY)的情况下,只要模拟发送这个固定内容的Secured I-PDU 也一样可以起到”攻击“的效果,因此我们需要尽可能的让每一帧报文的CMAC 都不一样,进而推理出需要保证每一帧报文对应的Secured I-PDU 都不一样, 根据Secured I-PDU 结构,只有Freshness Value是可能动态变化的。因此一个好的FVM 设计对于Secure onboard communication起到至关重要的作用
AUTOSAR|AUTOSAR (JASPAR)FVM Introduction
文章图片


FVM 设计时需要考虑的

  1. Freshness Value Length 需要足够长尽可能保证每一帧用于计算CMAC的Freshness Value都不相同
  2. 放入Secured I-PDU 中的Freshness Value 不能够占据过多的Payload
  3. 当Sender/Receiver 出现Freshness Value不同步时(影响MAC 校验),FVM 同步机制应该用最短的时间使其完成重同步

在AUTOSAR SecOC Spec 中提供了一种Master/Slave FVM 可以完美解决以上设计时的问题,因此本文将结合JASPAR 和 SecOC Spec ,对Master/Slave FVM进行介绍

ECU Role Assignment Single Master AUTOSAR|AUTOSAR (JASPAR)FVM Introduction
文章图片

Master ECU: 负责发送同步报文(Synchronization Message)
Sender ECU: 负责发送带有MAC的加密报文(Encryption Message)
Receiver ECU: 负责校验带有MAC的加密报文(Encryption Message)

Multi Master AUTOSAR|AUTOSAR (JASPAR)FVM Introduction
文章图片


每一个Sender ECU 同时也是Master ECU, 也就是说Master ECU/ Sender ECU 要负责发送同步报文和加密报文
Receiver ECU: 负责校验带有MAC的加密报文(Encryption Message)
Synchronization Message Format(For Master) 同步报文由Trip Counter 和 Reset Counter 构成,其周期地由Master 发送给Slave,起到定期同步Slave 端Trip Counter 和 Reset Counter的作用, 也就说当Sender/Receiver 出现FV 不同步的情况导致CMAC 校验失败,持续时间最长一个同步报文周期
Note:Sender / Receiver 在生成/校验 带有MAC的message需要基于Master 端发送来的Counter 和 Reset Counter
根据Trip Counter 和 Reset Counter 构成Message Format 分为2种:
1.Trip Counter/Reset Counter 可以在同一个message
AUTOSAR|AUTOSAR (JASPAR)FVM Introduction
文章图片

2.Trip Counter/Reset Counter 在不同的message 中
AUTOSAR|AUTOSAR (JASPAR)FVM Introduction
文章图片

AUTOSAR|AUTOSAR (JASPAR)FVM Introduction
文章图片

Trip Counter
Increment condition
Initial value
Counter length
- When the FV management master ECU starts
- On wakeup
- On reset
- When the power status changes: "IGOFF?IG ON"
1
TripCntLength Max 24 bit

Note :当Trip Cnt 达到最大值时, Trip Counter / Reset Counter都应该回到初始值

Reset counter
Increment condition
【AUTOSAR|AUTOSAR (JASPAR)FVM Introduction】Initializing conditions

Initial value
Counter length
Incremented by 1 at regular time intervals (ResetCycle)
Trip Counter incremented, or Trip Counter initialized
1
ResetCntLength Max 24bit

Note: 当Trip Counter发生变化时, Reset Counter 需要恢复至初始值(1)
当Reset Counter达到最大值时,因维持最大值进行发送
Freshness Value Format(For Slave) Freshness Value 的使用分为2种方式
  1. 参与计算CMAC
  2. 截取N bits(最低有效位SecOCFreshnessValueTxLength) 参与Message transmission
Note: Freshness Value 只有Slave 会使用
AUTOSAR|AUTOSAR (JASPAR)FVM Introduction
文章图片

Trip Counter Init Value 是0,当接收到Synchronization Message 之后 随后Slave Trip Counter 需要更新为Synchronization Message 中的Slave Counter

Reset CounterInit Value 是0. 当接收到Synchronization Message 之后 随后Slave Reset Counter 需要更新为Synchronization Message 中的Reset Counter

Message CounterInit Value 是0,每次message发送+1, 当Reset Counter 发生变化时, Message Counter 变为0
Note:当Counter 达到最大值时,应该维持最大值进行发送
Reset Flag其时Reset Counter 的最低有效位的(1 or 2 )bits

AUTOSAR|AUTOSAR (JASPAR)FVM Introduction
文章图片


Master ECU 主要负责周期的发送Synchronization Frame ,用于Slave 中Trip Counter/Reset Counter 同步
详细内容见 Synchronization Message Format
Slave ECU 正如前面介绍, Slave ECU 分为Sender ECU 和Receiver ECU, 每个Slave 都要验证来自Master 的同步报文
Validation Synchronization Message
验证 收到的Synchronization Message , 如果验证成功则用收到的 Trip Counter 和 Reset Counter去参与计算接下来的 encryption message 的MAC .(见 Freshness Value Format)
这里需要介绍2个概念
Previous Transmitted Value & LatestValue
在Master ECU 和Slave ECU 都会维护一份Trip Counter/ Reset Counter, 当Slave ECU 验证成功Synchronization Message 且 Received Counter (Trip Counter/ Reset Counter)和Slave Local Counter(Trip Counter/ Reset Counter) 不一致 , 会将Slave Local Counter的值更新为收到Received Counter。
因此,用一段代码 进行介绍
Previous Transmitted Value = https://www.it610.com/article/Slave Local Counter
LatestValue = https://www.it610.com/article/Received Counter

if (Has calculate the MAC with latest Value)
Previous Transmitted Value= https://www.it610.com/article/LatestValue;

Sender ECU基于Reset Counter / Trip Counter 构建FV(见Freshness Value Format), 然后参与MAC的计算,规则如下
如果Previous Transmitted Value 和LatestValue相同,则使用Previous Transmitted Value 构建FV
AUTOSAR|AUTOSAR (JASPAR)FVM Introduction
文章图片


如果Previous Transmitted Value 和LatestValue不相同,则使用LatestValue构建FV,每次变化都会导致Message Counter 恢复至初始值

AUTOSAR|AUTOSAR (JASPAR)FVM Introduction
文章图片


Receiver ECU 对于构建用于验证CMAC 的FV(见Freshness Value Format),流程稍微复杂一些,步骤如下
Reset flag comparison and Get X Value
AUTOSAR|AUTOSAR (JASPAR)FVM Introduction
文章图片


AUTOSAR|AUTOSAR (JASPAR)FVM Introduction
文章图片

Trip counter and reset counter comparison
AUTOSAR|AUTOSAR (JASPAR)FVM Introduction
文章图片

Message counter (lower end) comparison
No Present Carry Flag : Previous Received Value < latest Value
Present Carry Flag : Previous Received Value >= latest Value
Lookup the table to build FV
Note:
  1. Carry Flag 可以理解为收到的message Counter 是否出现了“扣圈” , 如果出现则Message Counter(Upper) +1
  2. 如果X >0 , 可能由于Sender 使用的 Reset/Trip Cnt 是Latest Value ,但是Receiver 使用的是Previous Received Value
  3. 如果X < 0 , 可能由于Sender 使用的 Reset/Trip Cnt 是Previous Transmitted Value,但是Receiver 使用的是Latest Value
  4. 对于Trip and Reset counter 的比较起始可以把他们看作一个counter ,因此Trip 的变化会导致Reset counter的复位
AUTOSAR|AUTOSAR (JASPAR)FVM Introduction
文章图片


    推荐阅读