0x27服务_安全访问
1 术语解释
1.1 缩略语
缩写 | 描述 | 解释 |
---|---|---|
Dcm | Diagnostic Communication Manager | 诊断通信管理 |
SID | Service identify | 服务标识符 |
NRC | Negetive reponse code | 否定响应码 |
2 功能简介
2.1 功能概述
据ISO14119-1标准中所述,UDS服务$27应用场合主要是用于Server数据上传或者下载,重要信息传递,功能安全等实施的过程中,比如如果对于重要数据的上传或者下载过程不做任何限制,很有可能会对整车的行车安全造成极大的威胁,特别是针对底盘域的控制器更是要在这方面做好全方位的安全防护措施,此时0x27服务便应运而生!
下文中使用到的Client可直接理解为上位机Tester,Server可直接理解为接受Tester诊断请求的ECU。
2.2 服务应用场景
一般而言,对于27诊断服务,主要应用场景为以下场合:
- 在针对Server重新编程时,需要首先通过27安全解锁才能够进行后续的重编程操作,否则将对Server造成极大的安全风险;
- 在产线写入较为重要的版本或者标定等信息过程中,则首先需要使用27服务才能够使用写操作的诊断指令,如2E服务;
- 一般而言,如果需要往Flash中写入相关数据时都需要优先执行27安全解锁之后才能够进行安全写入;
- 执行十分重要的31 Routine/IO Control时,也需要优先执行27安全解锁之后才能够执行对应的routine/IO Control;
上述这些应用场景较为常见,除此以外,当然还有很多面向ECU内部测试验证的应用场合,这里就不一一列举。
2.3 服务实现原理
安全解锁过程:
如下图所示,uds 0x27服务的安全解锁的过程是基于Seed-Key 机制来实现,Server中可具有多个安全等级(Level),特定的功能(打开车窗)的控制需要解锁指定的安全等级,某个安全等级(即下文中的n)解锁的具体过程可分为以下四个阶段:
- Client向Server请求种子;
- Server向Client发送随机种子(随机数);
- Client基于接收到来自Server的随机种子计算出对应的Key并发送给到Server;
- Server接受来自Client算出来的Key并与内部算出的Key比较,如果一致则解锁成功,否则解锁不成功;
注:一个安全等级的解锁需要发送两次请求,也就是说一个安全等级对应2个sub-function.
如果Server内置有多个安全等级,那么解锁的安全等级可以改变吗?
是可以的,如下图所示,只要通过上文的流程解锁对应的安全等级即可。值得一提的是,Server内只能解锁或激活一个安全等级,且如果一个安全等级状态已处于unlocked状态,当client向Server请求seed时,Server会回复一个肯定响应并且seed都为0x00。
注:解锁某个安全等级之前,须进入响应的会话;一般地,特定的安全等级对应着不同的安全事件,比如刷写的安全等级是LEV-3和例程控制的安全等级LEV-1;
之前说了0x27服务解锁的流程,**那在什么情况下,解锁状态会重新上锁呢?**答案如下:
- 会话模式改变:如果特定的安全等级解锁后,其会话模式被0x10服务切换到不支持的会话下,即会重新上锁;
- 重新上电或ECU重启:如果程序重新启动,那么安全等级默认为locked状态。
特殊地,0x27服务中还有这样的特性,如果解锁一定次数且解锁结果都是失败,那么需要过一段时间才允许再次解锁。这个有点像咱们的手机在解锁失败5次后,可能会被锁定5分钟。当然这个功能需要根据需求在配置中实现。
3 请求响应定义
3.1 请求消息格式
1)请求seed的消息格式如下:
根据Cvt值,securityAccessDataRecord可选发送,一般不需要发送;
2)发送key的消息格式如下:
3)0x27服务中的子服务定义如下图:
3.2 肯定响应格式
1)请求seed的肯定响应如下图:
2)接收完key的肯定效应格式:(27 + 40) + (sub-function),以子服务0x2为例,即如下图:
3.3 否定响应格式
ISO14229-1针对所有的诊断服务提供了一种统一的诊断负响应的诊断格式:7F +SID + NRC。
其中NRC全称为Negetive Responce Code,每个NRC具有唯一的含义来代表当前诊断请求错误的原因所在。当然每个诊断服务支持的NRC不尽相同,具体支持的NRC需要参考ISO14229-1标准文档,对于27服务而言支持的NRC如下表:
4 服务请求实例
4.1 解锁正响应实例#1
4.2 解锁正响应实例#2
4.2 否定响应实例
5 配置说明
DcmDsdService:
- 配置子服务和对应的会话
- SID
DcmDspSecurityRow: - 安全等级
- 对应安全等级下的生成seed和比较key的回调函数
- 对应安全等级下的尝试次数,和解锁失败该次数后锁定的时间(Delay time)
6 参考资料
1. UDS诊断服务基础篇之27
2. ISO 14229-1:2013
3. AUTOSAR_SWS_DiagnosticCommunicationManager.pdf