27服务解锁的工作原理可以在文章《诊断27服务介绍》查看,这里简单介绍下流程:
Tester向ECU发送27 01诊断请求请求种子seed,ECU收到该请求后随机生成一个seed,通过67 01诊断响应发送给Tester。Tester收到该诊断响应后取出seed值,传入和ECU相同的算法后生成一个密钥keyT。然后Tester把这个密钥keyT用诊断请求27 02发送给ECU,ECU收到该请求后取出密钥keyT,再用生成的seed和自己的算法计算出一个密钥keyE,比较keyT和keyE。如果它们相等,说明Tester使用和ECU相同的算法,可以证明Tester的身份是安全的,执行某个安全等级的解锁。
以上内容中:
- 27 01和27 02中,01和02代表了某个安全等级解锁的request seed和send key的subFunction子功能值
- Tester想要解锁ECU,必须使用和ECU相同的算法
所以一个关键的问题就是:CANoe如何使用这个算法?以何种形式使用?
CANoe作为Tester进行诊断通信时,最常用的方式是加载cdd文件后在诊断控制台手动发送诊断请求并接收诊断响应。此时Tester和ECU在CANoe中建立了一个诊断通信的“内部通道”,传输层和诊断层参数在加载cdd文件时自动配置到:
在诊断层配置界面,有一个安全访问相关的添加栏,里面可以添加dll文件,它就是27算法所在的文件: