在UDS诊断协议中,有一些服务,比如2E服务写入DID数据,2F服务控制输入输出,它们都会改变ECU控制器的内存数据,所以在请求这类服务时需要慎之又慎。诊断协议设计了一个安全解锁机制,让ECU在接收到某些诊断服务(2E、2F等)前需要处于解锁状态,这就是27服务实现。
Tester发送27服务请求ECU解锁,ECU不可能不做任何认证就直接解锁,这样的安全机制没有任何意义。
ECU在27服务解锁时需要对Tester进行认证,认证的方式是双方使用相同的安全算法得到相同的密钥key,ECU对比Tester计算得到的keyT和自己计算得到的keyE,如果相同,认证成功,解锁成功。
具体的步骤是:
- Tester首先向ECU发送一个27服务,请求种子seed。这个seed作为参数传入算法中,用来生成密钥。
- ECU收到请求种子的27服务后,生成一个随机值,作为seed,通过诊断响应发送给Tester。
- Tester接收到诊断响应后,把seed取出,传入算法中,计算出keyT。再通过27服务,发送诊断请求,把keyT发送给ECU。
- ECU收到诊断请求后,取出密钥keyT,然后用自己生成的种子seed和算法,计算出一个密钥keyE,比较keyT和keyE。如果相同,说明Tester使用了和ECU相同的算法,Tester身份验证成功,完成解锁。
对于不同的