#27服务概要
#27服务
-
#27服务简介
由于保密、排放或安全的原因,安全访问服务(#27服务)需要提供多种方法以方便访问受限的数据或其它诊断服务。 -
安全访问流程
- 请求种子
上位机向ECU发送请求,ECU返回Seed。(种子字节数一般为4个字节,具体视需求而定) - 发送密钥
上位机收到Seed后,计算出一个密钥发送给ECU,ECU根据相同算法计算出另一个密钥,两密钥进行比对,若比较相同给出肯定响应,不同则给出否定响应。
- 请求种子
-
几个注意点
- 任意时刻,仅有一个安全级别可以被激活;安全级别的数字是任意分配的,没有优先级之分;
- 种子的值为ECU随机产生,应避开0和最大值F — 全0的种子常用来检测当前是否已经解锁,已解锁状态下请求种子将会返回全0的种子;
- 密钥有特定安全算法产生(种子为参数x,有一个大小为种子的位数的数组A,元素为4字节随机数;x通过对位数取余获取索引a,对应获取到A[a]这一4字节的随机数,然后加以某些特定的位运算后输出,作为密钥)
- 请求种子及密钥的动作是强制性的,当ECU返回否定响应,或者因为其他原因导致诊断会话模式回到默认会话模式,种子将重新生成。
-
请求格式
-
请求种子
-
发送key1
-
-
响应格式
- Request Seed
Request:27 + SF
Positive Response:67 + SF + Seed
Negative Response:7F + SF + NRC1 - Send Key1
Request:27 + (SF + 1) + Key1
Postitive Response: 67 + (SF + 1)
Negative Response: 7F + (SF + 1) + NRC2 - 常用NRC
- NRC1:12、13、22、37
- NRC2:12、13、22、24、35、36
- Request Seed
-
延时机制 (NRC = 36\37)---- 防止多次请求,暴力遍历
在x次请求安全访问失败后,需要等待y秒后再能接受下一次安全访问请求,请求种子,在ECU被成功进行一次解锁后,错误计数器归零。(错误计数器:初始值为0,每次”出错“即+1,打到某个阈值之后不允许安全访问请求,请求种子则返回否定相应,NRC=37);
根据策略不同,往往有:- 连续请求种子,种子不相同,则多次请求种子后仅允许最新一次请求的种子所计算的密钥通过安全访问;
- 错误计数器存储位置
- 若存储于非易失性存储
- 错误延时时间
达到错误计数器最大值即NRC=36后,再次请求seed,返回NRC=37,指的是错误延时时间未到
- 错误延时时间
- 若存储于非易失性存储
- 重新上电后是否开启访问延时?
- 任意情况下,上电后均存在访问延时
- 掉电前,错误计数器达到最大值,则需要等待访问延时
- 达到错误计数器最大值,且延时结束后,错误计数器策略:
- 减1
- 清零
- 错误计数器增加条件
- 路径问题
- 安全访问举例
- 安全访问状态图