UDS诊断(ISO14229-1) 27服务

2024-01-01 20:06:00

功能简介

27服务,即 SecurityAccess(安全访问)服务,安全理念采用的是种子与密钥式关系。

应用场景

常见场景:

  • 在针对Server重新编程时,需要首先通过27安全解锁才能够进行后续的重编程操作,否则将对Server造成极大的安全风险;
  • 在产线写入较为重要的版本或者标定等信息过程中,则首先需要使用27服务才能够使用写操作的诊断指令,如2E服务;
  • 一般而言,如果需要往Flash中写入相关数据时都需要优先执行27安全解锁之后才能够进行安全写入;
  • 执行十分重要的31 Routine时,也需要优先执行27安全解锁之后才能够执行对应的routine;

安全解锁基本原理

针对27服务的安全解锁的过程是基于Seed-Key 机制来实现,具体过程可分为以下四个阶段:

  1. Client向Server请求种子;
  2. Server向Client发送随机种子;
  3. Client基于接收到来自Server的随机种子计算出对应的Key并发送给到Server;
  4. Server接受来自Client算出来的Key并与内部算出的Key比较,如果一致则解锁成功,否则解锁不成功;

在这里插入图片描述

请求和响应

1、请求

基本格式

归纳起来,诊断的request格式无非以下两种:

<SID> + <Sub-function> + <Parameter>

<SID> + <Parameter>

即有无sub-function的区别。Parameter可以是DID,可以是输入参数,可以是自定义的值,字节数视具体要求而定。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、子功能

子功能参数定义(1字节数据):

  • Bit7:抑制肯定响应消息指示位suppressPosRspMsgIndicationBit
    • 0=False:需要肯定响应
    • 1=True:禁止肯定响应
  • Bit6-0:子功能参数值(0x00~0x7F)

简单来说,不同安全级别的请求种子和发送密钥是一一对应的,相邻的一对奇偶数对应一种安全级别,其中奇数代表请求种子,偶数代表发送密钥,例如:

  • 0x010x02 分别代表一个安全级别的请求种子和发送密钥
  • 0x030x04 分别代表另一个安全级别的请求种子和发送密钥

在这里插入图片描述

3、肯定响应

基本格式:

<SID + 0x40> + <Sub-function> + <Parameter>

<SID + 0x40> + <Parameter>

要注意,第一个字节是由SID和0x40的和构成。这里的Parameter项是optional的,具体要看协议规定。

在这里插入图片描述
在这里插入图片描述

4、否定响应

基本格式:

<0x7F> + <SID> + <NRC>

看起来比较简单,格式比较固定,只要是Negative Response,第一字节就是0x7F,第二字节照抄原来的SID,第三个字节是错误响应码,指示具体错误响应的原因
在这里插入图片描述

注意

  • 1、请求种子和发送密钥的数字大小并不代表其等级的高低。
  • 2、同一时刻最多只能有一个安全等级是解锁的状态,因此从一个安全等级接收到另外一个等级的请求并且解锁成功后,之前的安全等级将被重新锁定,而由于切换安全等级致使先前解锁的状态被锁定后,其依赖于被锁定的等级的服务和功能也一并被关闭。
  • 3、如果被请求的安全等级当前是已经解锁的状态,那么在响应种子时,在放种子的位置都放上0,表示已经解锁了,你不要再请求了。并且实际上种子应该是一个随机数,一般全0和全F都不允许作为普通种子放到响应里

报文示例

  • 1、服务器处于“锁定”状态

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 2、服务器处于“解锁”状态

在这里插入图片描述
在这里插入图片描述

UDS中常用 NRC

在这里插入图片描述

参考

  • https://zhuanlan.zhihu.com/p/446348996

文章来源:https://blog.csdn.net/m0_56208280/article/details/135206597
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。