1、27服务概述
27服务通过采用种子与密钥的方式为ECU提供了一种保护机制;通过sub-function划分出不同的安全等级,诊断仪发送请求进入某个安全等级时,通过种子与密钥的方式进行安全访问,当通过安全访问时,则切换到对应的权限状态。便于进行权限的管理划分。其相关的操作流程如下图:
如上图,假设诊断仪是请求进入01安全等级;即Tester发送27 01请求种子,ECU接收请求后生成随机种子发送给到Tester;并且将刚刚生成的种子按照安全算法计算出Key。Tester这边收到种子后,也按照安全算法计算出Key,此时再通过27 02服务将计算好的Key发送到ECU,ECU这边将收到发送过来的Key和自己计算的Key进行比对,若结果一致,则切换到对应请求的权限状态。可以总结为如下过程:
- 诊断仪请求种子;
- ECU发送种子,并根据安全算法计算密钥;
- 诊断仪根据接收到的种子也进行密钥计算,并进行发送;
- ECU接收到密钥,与自身计算的密钥进行比较;
- ECU根据比较结果决定自身是否解锁,并返回响应(肯定/否定响应)信息
2、请求种子
以请求进入01安全等级为例(请求Seed的"Sub-function"不一定要是01,也可以是03、05,或者07-7D之间的任意奇数值,代表不同的安全等级。这里只是以01为例),则此时请求种子的格式如下:
ECU收到请求后,应当生成随机的种子,并通过响应报文返回种子。响应报文格式如下:
3、发送密钥
我们依旧以请求进入01安全等级为例,在接收到前面一小节生成的种子后,诊断仪将根据车产定义的安全算法进行密钥的计算。并进行密钥的发送。此时密钥的发送格式如下:
ECU收到密钥后,会将接收到的密钥与自身计算的密钥进行比对;若结果一致,则切换到对应请求的权限等级,并返回肯定响应。响应报文格式如下:
Ps:在请求种子、发送密钥的介绍中,我们只是以请求进入01这个安全等级(sub-function)为例来进行介绍的。但要注意请求种子的"Sub-function"不一定要是01,也可以是03、05,或者07-7D之间的任意奇数值,通过该参数划分不同的安全等级。同样,发送密钥时的第二个字节值不一定就是02(01+1),可以是04、06,或者08-7E间的任意偶数值;不过注意要是之前请求Seed的"Sub-function"+1,即像01对应02,03对应04,07对应08这样对应起来。具体安全等级的划分、密钥算法、种子、密钥的长度等信息会由车产规定好释放的。