UDS诊断(ISO14229-1) 27服务

功能简介

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、服务器处于“解锁”状态

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

延时机制

  • 在连续N次请求安全访问失败后,需等待T s之后才能接受下一次的安全访问请求“RequestSeed” 。
    • 1、当测试工具发送一个无效的秘钥, ECU将返回NRC35“InvalidKey”。 同时,安全访问错误计数器加1。该计数器需要存储并且初始值为0。
    • 2、 当安全访问错误计数器达到N(即收到N次无效密钥), ECU将返回NRC36且需要等待T s才能接受下一次的安全访问请求“Request Seed”。 期间任何安全访问请求“Request Seed”都会被ECU反馈NRC37。
  • 当T s等待时间结束后,安全访问错误计数器将减1(只减1次),并允许尝试安全访问请求“RequestSeed”,如果此次请求失败(由于发送了一个无效的秘钥),安全访问错误计数器将加1,并再次开启T s等待时间。任何一次ECU被成功解锁(密钥有效),失败计数器都将被重置为零。
  • ECU上电/复位后默认处于闭锁状态,需要检测安全访问错误计数器,若计数器为N,则需要启动T s的安全访问延时时间。

如何生成安全算法DLL文件

1、使用 ZCANPRO 上位机

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

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

2、使用CANoe 例程

例程默认安装在C盘,参考路径:
C:\Users\Public\Documents\Vector\CANoe\10.0 (x64)\CANoe Sample Configurations\CAN\Diagnostics\UDSSystem\SecurityAccess\Sources\KeyGenDll_GenerateKeyEx
在这里插入图片描述

参数说明:

  • iSeedArray:表示接收到的27服务奇数subfunction中的Seed种子字节值“数组”;
  • iSeedArraySize:表示接收到的27服务奇数subfunction中的Seed种子长度;
  • iSecurityLevel:表示接收到的27服务Security Level安全等级;
  • iVariant:表示CanOe / Canalyzer中加载的诊断描述文件“当前使用的变体”;
  • ioKeyArray:表示27服务偶数subfunction中发送的Key密钥字节值“数组”;
  • iKeyArraySize:表示27服务偶数subfunction中的发送的Key密钥长度;
  • oSize:表示输出Key密钥长度,通常让oSize=iSeedArraySize。

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

3、ZCANPRO 导入安全算法

在这里插入图片描述

UDS中常用 NRC

在这里插入图片描述

参考

  • https://zhuanlan.zhihu.com/p/446348996
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值