AUTOSAR (JASPAR)FVM Introduction

在阅读本文之前,请先了解SecOC流程,可参见AUTOSAR SecOC Introduction”

Introduction

FVM (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 (JASPAR)FVM Introduction_第1张图片

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 (JASPAR)FVM Introduction_第2张图片

Master ECU: 负责发送同步报文(Synchronization Message)

Sender ECU: 负责发送带有MAC的加密报文(Encryption Message)

Receiver ECU: 负责校验带有MAC的加密报文(Encryption Message)

Multi Master

AUTOSAR (JASPAR)FVM Introduction_第3张图片

每一个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 (JASPAR)FVM Introduction_第4张图片

2.Trip Counter/Reset Counter 在不同的message

AUTOSAR (JASPAR)FVM Introduction_第5张图片

AUTOSAR (JASPAR)FVM Introduction_第6张图片

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

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 (JASPAR)FVM Introduction_第7张图片

Trip Counter

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

Reset Counter

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

Message Counter

Init Value 是0,每次message  发送+1, 当Reset Counter 发生变化时, Message Counter 变为0

Note:当Counter 达到最大值时,应该维持最大值进行发送

Reset Flag

其时Reset Counter 的最低有效位的(1 or 2 )bits

AUTOSAR (JASPAR)FVM Introduction_第8张图片

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 & Latest  Value

在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 = Slave Local Counter

Latest  Value = Received Counter

if (Has calculate the MAC with latest Value)

    Previous Transmitted Value= Latest  Value

Sender ECU  

基于Reset Counter / Trip Counter 构建FV(见Freshness Value Format), 然后参与MAC的计算,规则如下

如果Previous Transmitted Value 和Latest  Value相同,则使用Previous Transmitted Value 构建FV

AUTOSAR (JASPAR)FVM Introduction_第9张图片

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

AUTOSAR (JASPAR)FVM Introduction_第10张图片

Receiver ECU

对于构建用于验证CMAC 的FV(见Freshness Value Format),流程稍微复杂一些,步骤如下

Reset flag comparison and Get X Value

AUTOSAR (JASPAR)FVM Introduction_第11张图片

AUTOSAR (JASPAR)FVM Introduction_第12张图片

Trip counter and reset counter comparison

AUTOSAR (JASPAR)FVM Introduction_第13张图片

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 (JASPAR)FVM Introduction_第14张图片

你可能感兴趣的