【车载开发系列】Autosar的安全访问SecurityAccess知识补充
【车载开发系列】Autosar的安全访问SecurityAccess知识补充
- 【车载开发系列】Autosar的安全访问SecurityAccess知识补充
- 一. 安全访问服务概念
- 二. 安全访问流程
- 三. 安全访问服务接口函数
- 1)Dcm_GetSecurityLevel
- 2)DslInternal_SetSecurityLevel()
- 3)Xxx_GetSecurityAttemptCounter()
- 四. 安全等级的定义
- 五. 安全访问等级校验
- 六. 安全访问状态机
- 七. 安全访问其他
一. 安全访问服务概念
安全访问服务的作用是检测诊断仪(Tester)身份,限制Tester执行服务。就是说有些服务需要经过安全访问服务解锁后才能执行。安全访问服务负责LOCK和UNLOCK状态的切换。
如果任何持有诊断设备的人都可以通过诊断指令对车辆ECU进行操作,将存在较大的安全隐患。为了验证生产线、售后的操作人员是否有权限操作,在对车辆ECU进行诊断检查时,需要验证其提供的密钥是否有效,而产生有效密钥的前提需要ECU反馈给诊断设备一个随机的种子Seed,如果Seed不具有随机性,不法分子将通过大量的重试来破解密钥,只有Seed具有随机性,才能确保每次产生的Key不同,因此诊断设备每次应发送不同的密钥来进行解锁。
二. 安全访问流程
Step1:诊断仪(Tester)发出27服务,请求ECU的种子(Seed)。
Step2:ECU发出一个种子(Seed,这个种子一般是随机数,比如可以通过芯片里面的Timer循环计数产生)。
Step3:诊断仪接收到种子后,会通过一个算法计算出一个秘钥(Key1)发给ECU。
Step4:ECU接收到Key1后,ECU自己会先根据之前产生的seed计算一个秘钥Key2,然后比较Key1和Key2,如果相等则解锁成功。
三. 安全访问服务接口函数
DcmDspSecurity: 该容器包含安全级别配置(DSP参数)(每个安全级别)描述该容器包含DcmDspSecurityRow的行。而关于安全等级有下面几个函数。
1)Dcm_GetSecurityLevel
函数原型:Std_ReturnType Dcm_GetSecurityLevel(Dcm_SecLevelType* SecLevel)
参数:
SecLevel:获取的安全等级值存放到SecLevel指针指向的内存。
返回值:总是返回E_OK
功能描述:获取安全等级
2)DslInternal_SetSecurityLevel()
可以使用这个函数来设置新的安全等级。
3)Xxx_GetSecurityAttemptCounter()
在初始化时,对于每个 DcmDspSecurityAttemptCounterEnabled配置参数设置为TRUE的 DcmDspSecurityRow条目,会调用这个函数来获得AttemptCounter的值。
四. 安全等级的定义
DCM模块的每个诊断服务可以配置安全访问等级
- 在任何状态下,只有一个安全级别处于活动(active)状态,也就是只有一个安全级别能够被激活,其他安全等级处在锁定的状态下。
- 安全级别(security level)编号是随意的,不同级别之间不意味着有任何关系,一般Level1是最基本的安全等级,必须要存在。
- 在默认会话(Default Session) 中不允许解锁安全等级(Security level) 。要获得一些权限,客户端必须首先切换到启用SecurityAccess服务的非默认会话。只有这样,客户端才能执行握手,从而解锁所需的功能。
同一安全等级的send key子功能数值为request seed子功能数值+1.
五. 安全访问等级校验
在诊断配置阶段,会预先定义每个诊断请求在安全等级下才支持。测试时,只有在支持的安全等级下才会积极响应对应的诊断请求,否则返回NRC:0x33的否定响应码。所以在诊断请求前,可以先通过0x27服务将安全等级切换到需要的安全等级。
六. 安全访问状态机
在UDS诊断协议中,有两个重要的状态机:分别是“Sessionstate machine会话状态机”和“SecurityAccess安全访问状态机”。

上图形描述了SecurityAccess处理的状态图。给定的数字表示转换条件和要在转换上执行的操作。
(A)所有安全级别都已锁定。没有活性种子。
(B) 所有安全级别已锁定。种子已发送。正在等待密钥。
(C) 一个安全级别已解锁。没有活性种子。
(D) 一个安全级别已解锁。种子已发送。正在等待密钥。
状态图考虑到一般会话处理是在会话管理层内的适当位置完成的(见ISO 14229-2),因此不需要在状态图中考虑。状态转换定义使用了一些参数,这些参数可以根据车辆制造商的具体要求进行设置Delay_Timer和Att_Cnt参数的支持是可选的,由车辆制造商决定。通常,对于较长的种子/密钥长度(例如,16字节及以上),对这些参数的支持不再那么重要。
七. 安全访问其他
- 27服务的Seed,何时可以返回全0?
答:如果Server已经处于解锁状态(Unlock),在此会话下,再次收到Client的种子请求,可以返回0,以此告知上位机,当前会话已经解锁。 - 非默认会话再次跳转相同非默认会话,需要重新解锁吗?
答:需要重新安全解锁,即:重新执行0x27服务。
本文详细介绍了Autosar车载开发中的SecurityAccess安全访问服务,包括服务概念、安全访问流程、接口函数如Dcm_GetSecurityLevel和DslInternal_SetSecurityLevel,以及安全等级定义、校验和状态机。重点阐述了如何通过种子和密钥验证身份并保证安全性。
1433

被折叠的 条评论
为什么被折叠?



