【车载开发系列】UDS诊断—安全访问服务($0x27)
一.概念定义
该服务提供了一种保护机制,该机制用来保护访问限制的诊断服务。
加密策略采用种子和密钥相关联的方法。采用随机产生的种子,通过安全算法得到唯一的秘钥。
若秘钥匹配正确则可以调用受到保护的诊断服务。这个服务解锁的是处在某个安全等级下的服务。
二.安全控制过程
- 诊断工具请求种子;
- ECU发送种子,并根据安全算法计算密钥;
- 诊断工具根据接收到的种子也进行密钥计算,并进行发送;
- ECU接收到密钥,与自身计算的密钥进行比较;
- ECU根据比较结果决定自身是否解锁,并返回响应(肯定/否定响应)信息
三.报文格式
1)请求种子
以请求进入01安全等级为例(请求Seed的"Sub-function"不一定要是01,也可以是03、05,或者07-7D之间的任意奇数值,代表不同的安全等级),则此时请求种子的格式如下:
ECU收到请求后,应当生成随机的种子,并通过响应报文返回种子。响应报文格式如下:
其中种子及密钥均为 4 字节(32 位)的数值
2)发送密钥
以请求进入01安全等级为例,在接收到前面一小节生成的种子后,诊断工具将根据车产定义的安全算法进行密钥的计算。并进行密钥的发送。此时密钥的发送格式如下:
(发送密钥时的第二个字节值不一定就是02(01+1),可以是04、06,或者08-7E间的任意偶数值,不过注意要是之前请求Seed的"Sub-function"+1,即像01对应02,03对应04,07对应08这样对应起来。)
ECU收到SendKey之后,肯定响应报文格式如下:
3)否定响应
请求Seed和SendKey他们两个在失败的时候,都返回以下格式的否定响应。
四.否定响应码列表
如果诊断工具发送一个无效的密钥,ECU拒绝请求并发送否定响应码 35h“密钥无效(InvalidKey),安全访问失败计数加 1。该计数器的初始值为零。
当失败计数器数值达到一定回数时,ECU 需要等待10 秒方可接受下次“请求种子”(Request Seed)报文并返回 36h(请求次数超出限制)否定响应。
在这 10s 内,任何“SecurityAccess- RequestSeed”都将不被处理,且 ECU 返回 37h(延时时间未到)否定响应。
对于35/36/37这三个错误码,需要比较关注一下。这三个错误往往是成对出现的。
Hex(bit6~0) | Description | 描述 | 说明 |
---|---|---|---|
0x12 | subFunctionNotSupported | 功能不支持 | 如果子功能参数不支持,发送此否定响应码 |
0x13 | incorrectMessageLengthOrInvalidFormat | 报文长度错误 | 如果报文长度错误,发送此否定响应码 |
0x24 | requestSequenceError | 请求序列错误 | 在接收到“sendKey”子功能前没有先接收到“requestSeed”请求报文 |
0x35 | invalidKey | 密钥无效 | 接收到预期的“sendKey”子功能但是密钥值与 ECU 内部存储或计算的密钥不相等 |
0x36 | exceededNumberOfAttempts | 超出密钥访问次数限制 | 延迟定时器因为超过最大允许失败尝试的次数激活 |
0x37 | requiredTimeDelayNotExpired | 超时周期未到,延时时间未到 | 在 ECU 要求的超时周期未到之前,发送了尝试获取安全访问权限的请求报文 |
五.参数定义
子功能关联的安全等级由整车厂定义。在这里我们只要知道0x01和0x02输入一个安全级,而0x09和0x0A输入一个安全级别,必须成对的使用。文章来源:https://www.toymoban.com/news/detail-437145.html
Hex | Description | 描述 |
---|---|---|
0x01 | requestSeed to reach security level: Unlocked (Level 1) | 请求种子以进入安全级别:解锁(级别 1) |
0x02 | sendKey to reach security level: Unlocked (Level 1) | 发送密钥以进入安全级别:解锁(级别 1) |
0x09 | RequestSeed to reach security level: Unlocked (Flash,Level2) | 请求种子以进入安全级别:解锁(级别 2) |
0x0A | sendKey to reach security level: Unlocked (Flash,level2 | 发送密钥以进入安全级别:解锁(级别 2) |
在某一时间只有一个安全级别可以被激活。例如,如果与请求种子 09h 相关联的安全级别已激活,而诊断工具成功请求解锁与请求种子 01h相关联的安全级别,此时只有与请求种子01h相关联的安全级别支持的受限功能被解锁。文章来源地址https://www.toymoban.com/news/detail-437145.html
六.注意事项
- ECU上电或者Reset复位操作之后, ECU处在locked状态;
- 同一时刻只有1个安全等级是 active ,与这个安全等级相关的功能和诊断服务可以使用,其它安全等级相关功能和诊断服务是not active 。
- 1个ECU内部可以有多个安全等级,安全等级之间是否关联取决于诊断规范的定义,如果没有关联,就是例如解锁安全等级2时,无需先解锁安全等级1.
- 如果当收到RequestSeed时,ECU已经处在unlocked状态,应给出positive response, 其中seedValue 0x00
- 具体的安全加密算法由车厂自行决定的。
- SecurityAccess服务定义了三种状态(两个不同级别):锁
定、解锁(级别 1)、解锁(级别 2)
到了这里,关于【车载开发系列】UDS诊断---安全访问服务($0x27)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!