【车载开发系列】Autosar的安全访问SecurityAccess知识补充

本文详细介绍了Autosar车载开发中的SecurityAccess安全访问服务,包括服务概念、安全访问流程、接口函数如Dcm_GetSecurityLevel和DslInternal_SetSecurityLevel,以及安全等级定义、校验和状态机。重点阐述了如何通过种子和密钥验证身份并保证安全性。

【车载开发系列】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模块的每个诊断服务可以配置安全访问等级

  1. 在任何状态下,只有一个安全级别处于活动(active)状态,也就是只有一个安全级别能够被激活,其他安全等级处在锁定的状态下。
  2. 安全级别(security level)编号是随意的,不同级别之间不意味着有任何关系,一般Level1是最基本的安全等级,必须要存在。
  3. 在默认会话(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字节及以上),对这些参数的支持不再那么重要。

七. 安全访问其他

  1. 27服务的Seed,何时可以返回全0?
    答:如果Server已经处于解锁状态(Unlock),在此会话下,再次收到Client的种子请求,可以返回0,以此告知上位机,当前会话已经解锁。
  2. 非默认会话再次跳转相同非默认会话,需要重新解锁吗?
    答:需要重新安全解锁,即:重新执行0x27服务。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的横打

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值