目录
1、服务概述
2、工作原理
3、常用的应用场景
4、子功能
5、请求与响应格式
5、1服务请求
5、2服务肯定响应
5、3服务否定响应
6、延时机制
1、服务概述
- 该服务对零部件中部分加密的服务进行解密工作
- 安全访问的概念使用“种子”和“密钥”来实现
参数 | 描述 |
种子 | 4字节数据,由ECU发送给诊断测试工具,又是钥匙计算的基础。 |
钥匙 | 钥匙参数是诊断测试工具对种子参数按照特定的算法计算出的结果,长度也为4字节,由诊断测试工具发送给ECU。钥匙接收后,ECU将接收到的钥匙与内部计算的钥匙相比较,相同则解密成功。 |
2、工作原理
本服务的典型使用示例如下:
- 客户端请求“种子”
- 服务器发送“种子”
- 客户端发送“密钥”
- 服务器作出响应,确认“密钥”有效,并自行解锁。
3、常用的应用场景
-
操作控制类:包括输入输出控制、例程管理服务等功能。
-
数据写入类:例如程序刷写;生产线上关键数据(如版本号或标定信息)的写入,需通过27级安全认证后方可执行。
-
数据读取类:在访问重要数据时,同样需要通过安全认证流程。
4、子功能
- 子功能参数为固定1字节
- Bit7为抑制肯定响应消息指示位(0:需要肯定响应;1:禁止肯定响应)
- Bit6——Bit0为子功能参数值
- 不同安全级别的请求种子和发送密钥存在固定关系,相邻的一对奇偶数对应一种安全级别,数字大小并不代表其等级的高低。其中奇数代表请求种子,偶数代表发送密钥(例:0x01 和 0x02 分别代表一个安全级别的请求种子和发送密钥)
- 任何时间都仅有一个安全等级是解锁的状态
- 默认会话下不支持27服务
- 从一个安全等级接收到另外一个等级的请求并且解锁成功后,之前的安全等级将被重新锁定,而由于切换安全等级致使先前解锁的状态被锁定后,其依赖于被锁定的等级的服务和功能也一并被关闭。
- 如果被请求的安全等级当前是已经解锁的状态,那么在响应种子时,在放种子的位置都放上0,表示已经解锁了,你不要再请求了。并且实际上种子应该是一个随机数,一般全0和全F都不允许作为普通种子放到响应里。
5、请求与响应格式
5、1服务请求
- 请求种子服务数据格式:
27 + [sub-function]
注意:
请求种子子服务必须为奇数
securityAccessDataRecord为Client发送给到Server的标识信息,可选,一般不用
- 发送密钥服务数据格式:
27 + [sub-function] + [security-Key
]
注意:
发送Key子服务必须为偶数
securityKey为Client向Server发送的具体Key值
从表40与表41的解释说明对比可看出两者sub-funtion必须存在一个确定的定量关系:即sub-funtion(Request Seed) + 1 = sub-function(Send Key)。
5、2服务肯定响应
- 请求种子服务正响应数据格式:
67 + [sub-function]
注意:
27诊断服务的正响应由以下三个部分组成,如下
参数 | 描述 |
响应SID | 该参数固定为SID+0x40 = 0x67 |
sub-function | 该参数为request seed(如01)或者Send Key(02)的取值 |
securitySeed | 该参数仅针对subfunction为Request Seed时才会回复该参数,其他情况下,Server仅会回复前两个字节(响应 SID + sub-function),其取值范围只能为0x00-0x7F |
5、3服务否定响应
-
请求种子服务正响应数据格式:
注意:如果解锁失败,则可通过收到的NRC判断失败的原因,27服务常用的NRC如下:7F + 27 + [NRC]
6、延时机制
- 车辆制造商应选择是否支持延时计时器
- 达到车辆制造商规定的错误访问尝试次数后,应激活延时计时器。
- 在连续X次请求安全访问失败后,需等待Ys之后才能接受下一次的安全访问请求RequestSeed。(注:X和Y由车辆制造商自行定义)
- 当测试工具发送一个无效的秘钥, ECU将返回 NRC 0x35 InvalidKey 。 此时,全访问错误计数器加1(注:该计数器需要存储并且初始值为0)。
- 当安全访问错误计数器达到X(即收到X次 InvalidKey ), ECU将返回NRC 0x36且需要等待Y s才能接受下一次的安全访问请求 Request Seed。 期间任何安全访问请求 Request Seed 都会被ECU反馈NRC 0x37。
- 当Ys等待时间结束后,安全访问错误计数器将减1(只减1次),并允许尝试安全访问请求 RequestSeed,如果此次请求失败(由于发送了一个无效的秘钥),安全访问错误计数器将加1,并再次开启Ys等待时间。
- 任何一次ECU被成功解锁(密钥有效),失败计数器都将被重置为零。
- ECU上电/复位后默认处于闭锁状态,需要检测安全访问错误计数器,若计数器为X,则需要启动Ys的安全访问延时时间。