附录I的主要内容是通过一个状态图来描述ECU在安全访问的各状态之间的切换条件,以及如何进行状态切换即切换过程中都需要执行哪些操作。
一、状态图
下面直接先上图。
图看起来流程很多,但实际上很简单,先说图中的四个状态:
A - ECU没有接收过任何安全访问的请求,或者刚刚接收并处理完非默认诊断会话请求之后的状态;
B - ECU接收到了请求种子的请求且已经响应了种子,但没有接收到密钥,也就是在等待诊断仪发送密钥的状态;
C - ECU已经认证通过了一个安全等级处于已解锁状态,并且没有收到任何请求种子的请求;
D - ECU已经认证通过了一个安全等级处于解锁的状态,同时收到了新的不同安全等级请求种子的请求并已经发送了种子,在等待诊断仪发送密钥的状态。
其中,状态A和状态C相比,以及状态B和状态D相比,都只差了是否已经解锁了一个安全等级。
二、安全访问策略说明
在解释状态图的10个状态转换之前,先对安全访问的一个通用策略简单地说明一下。
安全认证算法增加破解难度的通用做法就是增加算法中使用的种子和密钥长度,以此来增加计算的复杂程度,从而增加计算过程的时间,使时间加长。但是UDS一开始是用在CAN/LIN总线这种报文长度比较短的传输协议上,因此使用长种子会比较不方便,在不改变种子和密钥长度的情况下,一般会采取限制尝试次数和两次尝试之间的最短时间的策略。
下面是这种策略所用到的一些参数,这里尽可能通俗的去说一下参数的具体用处。
Delay_Timer:两次安全访问尝试的最短时间,即当安全访问尝试失败达到一定次数之后,ECU应该开启此计时器来限制后续的尝试频率。这个时间长度是可以配置的,并且可以根据实际需求由OEM定义是否需要在ECU启动或者复位的时候也启用这个定时器。可以所有安全等级用同一个定时器,也可以每个安全等级都分配一个定时器。甚至,这个定时器可以是一个可变值,例如可以随着尝试失败的次数增加而增加。
Att_Cnt_Limit:这个参数就是安全访问失败的次数限制,当达到这个次数之后