8.9 安全访问 Security Access (27h)
由于保密、排放或安全的原因, 安全访问服务提供一种方法以方便访问受限制的数据或诊断服务。 支持安全访问的ECU应该实现种子和密钥的合理算法,该算法应在特定文档中记录,而只有特定的少数 人可以访问该文档。
当外部测试工具从ECU中请求安全访问类型时,安全访问过程就开始了。当外部测试工具提供的安 全密钥与ECU计算的安全密钥匹配时,将授予对ECU的安全访问权。安全访问流程参见图8。
图8安全访问过程示例
8.9.1 请求种子
此服务请求来自ECU的种子(seed)。基于这个种子,客户端能够计算并发送给ECU解锁所需的密 钥(key)。
8.9.1.1 报文格式
表 42 安全访问-请求种子服务的请求报文
Byte | Name | Cvt | Value (Hex) |
#1 | RequestServiceIdentifier | M | 27 |
#2 | Sub-Function=[ SecurityAccessType=requestSeed] | M | 01,03,05, 07-7D |
表 43 安全访问-请求种子服务的肯定响应
Byte | Name | Cvt | Value (Hex) |
#1 | PositiveResponseServiceID | M | 67 |
#2 | SecurityAccessType=requestSeed | M | 01,03,05, 07-7D |
#3 … #6 | SecuritySeed[4]=[ seed#1(highbyte) … seed#4(lowbyte)] | M … M | 00-FF … 00-FF |
8.9.1.2 支持的否定响应码报
表 44 安全访问-请求种子服务的否定响应码
Hex | Cvt | ErrorText |
12 | M | 子功能不支持 如果子功能参数不支持,发送此否定响应码。 |
13 | M | 报文长度错误 如果报文长度错误,发送此否定响应码。 |
22 | U | 条件未满足 如果请求安全访问服务的条件未满足,发送此否定响应码。 |
37 | M | 延迟时间未到 如果延迟定时器处于激活时间内收到请求,发送此否定响应码。 |
8.9.2 发送密钥
此服务将客户端计算的密钥发送到ECU。ECU将此密钥与内部存储/计算的密钥进行比较。如果2个 数值匹配, 则ECU将解锁,允许客户端访问特定服务/数据。
8.9.2.1 报文格式
表 45 安全访问-发送秘钥服务的请求报文
Byte | Name | Cvt | Value (Hex) |
#1 | RequestServiceIdentifier | M | 27 |
#2 | Sub-Function=[ SecurityAccessType=requestSeed] | M | 02,04,06, 08-7E |
#3 … #6 | SecurityKey[4]=[ Key#1(highbyte) … Key#4(lowbyte)] | M … M | 00-FF … 00-FF |
表 46 安全访问-发送秘钥服务的肯定响应
Byte | Name | Cvt | Value (Hex) |
#1 | PositiveResponseServiceID | M | 67 |
#2 | SecurityAccessType=RequestSeed | M | 02,04,06, 08-7E |
8.9.2.2 支持的否定响应码报
表 47 安全访问-发送秘钥服务的否定响应码
Hex | Cvt | ErrorText |
12 | M | 子功能不支持 如果子功能参数不支持,发送此否定响应码。 |
13 | M | 报文长度错误 如果报文长度错误,发送此否定响应码。 |
22 | U | 条件未满足 如果请求安全访问服务的条件未满足,发送此否定响应码。 |
24 | M | 请求序列错误 如果在接收到“sendKey”子功能前没有先接收到“requestSeed”请求报文, 发送此否 定响应码。 |
35 | M | 密钥无效 如果接收到预期的“sendKey”子功能但是密钥值与ECU内部存储或计算的密钥不 相等,发送此否定响应码。 |
36 | M | 超出访问次数限制 如果延迟定时器因为超过最大允许失败尝试的次数激活,发送此否定响应码。 |
此文档定义了几种不同的安全访问等级。不同等级的安全访问定义了不同的访问权限类型。“供应 商自定义安全等级”需由供应商申请开通并通过h事业部同意。
种子及密钥均为4字节(32位)的数值。具体的安全加密算法由h事业部制定并由专门文件描述。
表 48 安全访问等级
SecurityLevel安全级别 | requestSeed请求 种子 | sendKey发送密钥 | CVT约定 |
Extendedsecuritylevel扩展安全级 | 01 | 02 | M |
Programmingsecuritylevel刷新安全级 | 09 | 0A | C |
Immobilizersecuritylevel防盗安全级 | 11 | 12 | U |
systemSupplierSpecificlevel供应商自定义安全级 | 61-6D | 62-6E | U |
8.9.4 执行规定
a)安全等级的激活:
在某一时间只有一个安全级别可以被激活。例如, 如果与请求种子09h相关联的安全级别已激活, 而诊断工具成功请求解锁与请求种子01h相关联的安全级别,此时只有与请求种子01h相关联的安全级别 支持的受限功能被解锁。其它任何与请求种子09h相关联的安全级别支持的解锁的安全功能服务不再激 活。安全级别的数字是任意分配的, 它们之间没有优先级的区别。
b)种子(seed) 的产生:
种子为一个4个字节(32位) 的数值, 由ECU随机生成。如果诊断工具连续发送“请求种子” (RequestSeed) 报文, ECU应该肯定响应且回复相同的种子。种子产生的随机数不应包含下列两数值:
1) 00000000h:如果ECU已在解锁状态, 此时接收到外部诊断诊断设备的“RequestSeed”请求(同 安全级),ECU应肯定响应报文并返回数值全为“0”的种子。诊断工具应通过检验种子是否为“非零”的 方法来测定ECU是否锁定。在此情况下,如果仍收到诊断工具的“SeedKey”请求,推荐ECU返回NRC24。
2) FFFFFFFFh:由于存储器被擦除时,其默认值为FFFFFFFFh,所以种子不能为此值。
c) 密钥的产生:
密钥为一个4个字节(32位)的数值, 由种子经过特定的安全算法计算生成。
d)安全访问流程:
图8所述的种子及密钥的请求和响应流程是强制性的。但以下情况发生该流程将被重置且重新生成 随机数种子:
1)任何原因导致的诊断会话模式进入到默认会话模式, ECU将进入闭锁状态;
2) ECU发送了“RequestSeed”的否定应答;
3) ECU发送了“SeedKey”的否定应答
8.9.5 延时机制
a) 在连续3次请求安全访问失败后,需等待10s之后才能接受下一次的安全访问请求“RequestSeed”。
1) 当测试工具发送一个无效的秘钥,ECU将返回NRC35“InvalidKey”。同时, 安全访问错误计数 器加1。该计数器必须存储在非易失性存储单元中, 初始值为0。
2) 当安全访问错误计数器达到3 (即收到3此无效密钥),ECU将返回NRC36且需要等待10s才能 接受下一次的安全访问请求“Request Seed”。期间任何安全访问请求“Request Seed”都会被ECU反馈 NRC37。
b) 当10s等待时间结束后,安全访问错误计数器将减1,并允许尝试安全访问请求“RequestSeed” , 如果此次请求失败(由于发送了一个无效的秘钥),安全访问错误计数器将加1,并再次开启10s等待时 间。
1)任何一次ECU被成功解锁(密钥有效),失败计数器都将被重置为零。
c) ECU上电/复位后默认处于闭锁状态,需要检测安全访问错误计数器, 若计数器为3,则需要 启动10s的安全访问延时时间。
d)安全访问诊断服务的执行策略参见图9:
图9安全访问延时机制
8.10 通信控制 Communication Control (28h)
此服务服务允许开启/关闭 ECU 对特定报文的发送或接收。
8.10.1 报文格式
表 49 通信控制服务的请求报文
Byte | Name | Cvt | Value (Hex) |
#1 | RequestServiceIdentifier | M | 28 |
#2 | Sub-Function=[ControlType | M | 00-FF |
#3 | CommunicationType | M | 00-FF |
表 50 通信控制服务的肯定响应
Byte | Name | Cvt | Value (Hex) |
#1 | PositiveResponseServiceID | M | 68 |
#2 | Sub-Function=[ControlType] | M | 00-7F |
8.10.2 支持的否定响应码
表 51 通信控制服务的否定响应码
Hex | Cvt | ErrorText |
12 | M | 子功能不支持 如果子功能参数不支持,发送此否定响应码。 |
13 | M | 报文长度错误 如果报文长度错误,发送此否定响应码。 |
22 | M | 条件未满足 如果ECU处于关键运行模式所以不能“使能/禁止”请求的通信类型,发送此 否定响应码。 |
31 | M | 请求超出范围 如果通信类型参数检测出错误,发送此否定响应码。 |
8.10.3 参数定义
表 52 子功能-控制类型定义的参数
Hex | Description | Cvt |
00 | Enable Rx And Tx允许接收和发送 | M |
01 | Enable Rx And Disable Tx允许接收禁止发送 | U |
02 | Disable Rx And Enable Tx禁止接收允许发送 | U |
03 | Disable Rx And Tx禁止接收和发送 | M |
表 53 通讯类型定义的参数
Hex | Description | Cvt |
01 | Normal Communication Messages普通应用报文 | M |
02 | Network Management Communication Messages网络管理报文 | C1 |
03 | Network Management Communication Messages & normal Communication Messages 普通应用报文和网络管理报文 | M1 |
C1:支持网络管理功能的ECU,需要支持此项。 M1:不支持网络管理功能的ECU ,只需要支持对普通应用报文的操作。 |
8.10.4 执行规定
a)执行此服务的前提条件
1)车辆静止;
2)系统不执行任何紧急操作(供应商定义);
3)当上述任何一个条件不满足, ECU应该拒绝通信控制请求报文并发送否定响应码22h。
b)以下一种或多种情况会导致ECU返回默认状态(正常收发报文):
1)接收到了”enableRxAndTx”参数的通讯控制服务;
2) ECU上电/重启;
3)任何原因导致的诊断会话模式转换到默认会话。
c) 对于连接多个网段的ECU (如网关),此服务会影响所有网段 (不仅是接收到诊断请求的网段)。
d) 对于网关ECU,正常诊断报文的路由不受此服务影响。