各位编程的小伙伴们,你们是否遇到过需要访问一些敏感数据或诊断服务,但又担心安全问题的情况呢?今天,我们就来聊聊ISO 14229 UDS协议中的0x27服务——安全访问服务,带你一步步搞懂它!
什么是0x27服务(安全访问服务)?
0x27服务的目的就是允许我们访问一些受限的数据或诊断服务,比如下载/上传例程或读取特定内存值。这些操作可能涉及保密、排放或安全因素。为了避免不恰当的控制或数据下载导致的问题,0x27服务引入了种子(Seed)和密钥(Key)的概念。
0x27服务的工作流程
- 客户端请求种子(Seed);
- ECU向客户端发送种子(Seed);
- 客户端发送密钥(Key);
- ECU比对密钥并应答,如果有效则解锁。
请求消息格式
请求消息的格式定义如下:
请求种子(‘requestSeed’)
字节序号参数值约定字节值
#1SecurityAcces Request SIDM0x27
#2sub-function = [securityAccessType = requestSeed ]M0x01;0x03;0x05;0x07-0x7D;
#3..#nsecurityAccessDataRecord[] = [parameter#1..parameter#mU..U0x00-0xFF..0x00-0xFF
肯定应答消息
肯定应答消息格式定义如下:
肯定应答消息格式定义如下:
字节序号参数名称约定字节值
#1SecurityAccess Response SIDM0x67
#2sub-function = [ securityAccessType ]M0x00 - 0x7F
#3..#nsecuritySeed[] = [seed#1(high byte)..seed#m(low byte)C..C0x00-0xFF..0x00-0xFF
支持的否定应答码(NRC_)
该服务会支持一些否定应答码,具体如下:
- NRC_0x12:子函数参数不被支持时;
- NRC_0x13:消息长度不正确或格式无效时;
- NRC_0x22:条件不正确时;
- NRC_0x24:请求序列不正确时;
- NRC_0x31:请求范围超出时;
- NRC_0x35:密钥无效时;
- NRC_0x36:错误尝试次数超出时;
- NRC_0x37:延时计时器未过期时。
案例使用说明
以下是一个案例使用说明,假设条件如下:
- 请求种子的子函数:0x01 (requestSeed);
- 发送密钥的子函数:0x02 (sendKey);
- 服务端发送的种子(2字节):0x3657;
- 服务端的密钥(2字节):0xC9A9。
通过这个案例,我们可以更直观地了解0x27服务的工作流程。
好了,今天的分享就到这里。希望这篇文章能帮助你更好地理解ISO 14229 UDS协议中的0x27服务。如果你还有其他问题,欢迎在评论区留言交流。我是林译川,关注「新派编程网」(www.xjpbg.com),我们下期再见!
