AUTOSAR】UDS协议的代码分析与解读(八)----UDS安全访问27h和通讯控制28h

news/2024/12/1 9:06:09/

8.9 安全访问 Security Access (27h)

由于保密、排放或安全的原因, 安全访问服务提供一种方法以方便访问受限制的数据或诊断服务。 支持安全访问的ECU应该实现种子和密钥的合理算法,该算法应在特定文档中记录,而只有特定的少数 以访问该文档。

当外部测试工具从ECU中请求安全访问类型时,安全访问过程就开始了。当外部测试工具提供的安 全密钥ECU计算的安全密钥匹配时,将授予对ECU的安全访问权。安全访问流程参见图8

 

图8安全访问过程示例

8.9.1 请求种子

此服务求来自ECU的种子(seed)。基于这个种子,客户端能够计算并发送给ECU解锁所需的密 钥(key)。

8.9.1.1  报文格式

表 42 安全访问-请求种子服务的请求报文

Byte

Name

Cvt

Value  (Hex)

#1

RequestServiceIdentifier

M

27

#2

Sub-Function=[

SecurityAccessType=requestSeed]

M

01,03,05,

07-7D

表 43 安全访问-请求种子服务的肯定响应

Byte

Name

Cvt

Value  (Hex)

#1

PositiveResponseServiceID

M

67

#2

SecurityAccessType=requestSeed

M

01,03,05,

07-7D

#3

#6

SecuritySeed[4]=[

seed#1(highbyte)

seed#4(lowbyte)]

M

M

00-FF

00-FF

8.9.1.2    支持的否定响应码报

表 44 安全访问-请求种子服务的否定响应码

Hex

Cvt

ErrorText

12

M

功能不支持

如果子功能参数不支持,发送此否定响应码。

13

M

报文长度错

如果报文长度错误,发送此否定响应码

22

U

条件未满足

果请求安全访问服务的条件未满足,发送此否定响应码。

37

M

迟时间未到

如果延迟定时器处于激活时间内收到请求,发送此否定响应码。

8.9.2 发送密钥

此服务将客户端计算的密钥发送到ECUECU将此密钥与内部存储/计算的密钥进行比较。如果2 数值匹配, 则ECU解锁,允许客户端访问特定服务/数据。

8.9.2.1  报文格式

表 45 安全访问-发送秘钥服务的请求报文

Byte

Name

Cvt

Value  (Hex)

#1

RequestServiceIdentifier

M

27

#2

Sub-Function=[

SecurityAccessType=requestSeed]

M

02,04,06,

08-7E

#3

#6

SecurityKey[4]=[

Key#1(highbyte)

Key#4(lowbyte)]

M

M

00-FF

00-FF

表 46 安全访问-发送秘钥服务的肯定响应

Byte

Name

Cvt

Value  (Hex)

#1

PositiveResponseServiceID

M

67

#2

SecurityAccessType=RequestSeed

M

02,04,06,

08-7E

8.9.2.2    支持的否定响应码报

表 47 安全访问-发送秘钥服务的否定响应码

Hex

Cvt

ErrorText

12

M

功能不支持

如果子功能参数不支持,发送此否定响应码。

13

M

报文长度错

如果报文长度错误,发送此否定响应码

22

U

条件未满足

如果请求安全访问服务的条件未满足,发送此否定响应码。

24

M

请求序列错

果在接收到“sendKey”子功能前没有先接收到“requestSeed”请求报文, 发送此否 定响应码。

35

M

密钥无效

如果接收到预期的sendKey”子功能但是密钥值与ECU内部存储或计算的密钥不 相等,送此否定响应码。

36

M

超出访问次数限制

果延迟定时器因为超过最大允许失败尝试的次数激活,发送此否定响应码。

8.9.3 参数定义

此文档定义了几种不同的安全访问等级。不同等级的安全访问定义了不同的访问权限类型。供应 商自定义安全等级由供应商申请开通并通过h事业部同意。

种子及密钥均为4字节(32位)的数值。具体的安全加密算法由h事业部制定并由专门文件描

 48 安全访问等级

SecurityLevel安全级别

requestSeed种子

sendKey送密钥

CVT

Extendedsecuritylevel扩展安全级

01

02

M

Programmingsecuritylevel刷新安全级

09

0A

C

Immobilizersecuritylevel防盗安全

11

12

U

systemSupplierSpecificlevel供应商自定义安全级

61-6D

62-6E

U

8.9.4 执行规定

a)安全等级的激活:

在某一时间只有一个安全级别可以被激活。例如, 如果与请求种子09h相关联的安全级别已激活, 而诊断工具成功请求解锁与请求种子01h相关联的安全级别,此时只有与请求种子01h相关联的安全级别 支持的受限功能被解锁。其它任何与请求种子09h相关联的安全级别支持的解锁的安全功能服务不再激 。安全级别的数字是任意分配的, 它们之间没有优先级的区别。

b)种子(seed) 的产生

种子为一个4个字节(32位) 的数值, 由ECU随机生成。如果诊断工具连续发送请求种子 (RequestSeed) 报文, ECU应该肯定响应且回复相同的种子。种子产生的随机数不应包含下列两数值:

1) 00000000h:如果ECU已在解锁状态, 此时接收到外部诊断诊断设备的“RequestSeed”请求(同 全级),ECU应肯定响应报文并返回数值全为“0”的种子。诊断工具应通过检验种子是否为非零 方法来测ECU是否锁定。在此情况下,如果仍收到诊断工具的“SeedKey”请求,推荐ECU返回NRC24

2) FFFFFFFFh:由于存储器被擦除时,其默认值为FFFFFFFFh,所以种子不能为此值。

c) 密钥的产生:

密钥为一个4字节(32位)的数值, 由种子经过特定的安全算法计算生成。

d)安全访问流程:

8所述的种子及密钥的请求和响应流程是强制性的。但以下情况发生该流程将被重置且重新生成 随机种子:

1)任何原因导致的诊断会话模式进入到默认会话模式, ECU将进入闭锁状态;

2) ECU发送了“RequestSeed的否定应答;

3) ECU发送了“SeedKey”的否定应答

8.9.5 延时机制

a) 在连续3次请求安全访问失败后,需等待10s之后才能接受下一次的安全访问请求“RequestSeed

1) 当测试工具发送一个无效秘钥,ECU将返回NRC35“InvalidKey”。同时, 安全访问错误计数 器加1。该计器必须存储在非易失性存储单元中, 初始值为0

2) 当安全访问错误计数器达到3  (即收到3此无效密钥),ECU将返回NRC36且需要等待10s才能 接受下一次的安全访问请求Request  Seed。期间任何安全访问请求Request  Seed都会被ECUNRC37

b) 当10s等待时间结束后,安全访问错误计数器将减1并允许尝试安全访问请求“RequestSeed” 如果此次请求失败(由于发送了一个无效的秘钥),安全访问错误计数器将加1,并再次开启10s待时

1)任一次ECU被成功解锁(密钥有效),失败计数器都将被重置为零。

c) ECU上电/复位后默认处于闭锁状态,需要检测安全访问错误计数器, 若计数器为3,则需要 启动10s的安全访问延时时间。

d)全访问诊断服务的执行策略参见图9

图9安全访问延时机制

8.10 通信控制 Communication Control (28h)

此服务服务允许开启/ECU 对特定报文的发送或接收。

8.10.1 报文格式

 49 通信控制服务的请求报文

Byte

Name

Cvt

Value  (Hex)

#1

RequestServiceIdentifier

M

28

#2

Sub-Function=[ControlType

M

00-FF

#3

CommunicationType

M

00-FF

 50 通信控制服务的肯定响应

Byte

Name

Cvt

Value  (Hex)

#1

PositiveResponseServiceID

M

68

#2

Sub-Function=[ControlType]

M

00-7F

8.10.2 支持的否定响应码

51 通信控制服务的否定响应码

Hex

Cvt

ErrorText

12

M

功能不支持

如果子功能参数不支持,发送此否定响应码。

13

M

报文长度错

如果报文长度错误,发送此否定响应码

22

M

条件未满足

如果ECU处于关键运行模式所以不能使能/禁止请求的通信类型,发送此 定响应码。

31

M

请求超出范

如果通信类型参数检测出错误,发送此否定响应码。

8.10.3 参数定义

52 子功能-控制类型定义的参数

Hex

Description

Cvt

00

Enable Rx And Tx允许接收和发送

M

01

Enable Rx And Disable Tx允许接收禁止发送

U

02

Disable Rx And Enable Tx禁止接收允许发送

U

03

Disable Rx And Tx禁止接收和发送

M

表 53 通讯类型定义的参数

Hex

Description

Cvt

01

Normal Communication Messages普通应用报文

M

02

Network Management Communication Messages网络管理报文

C1

03

Network Management Communication Messages & normal Communication Messages 普通应用报文和网络管理报文

M1

C1:支持网络管理功能的ECU,需要支持此项。

M1:不支持网络管理功能的ECU ,只需要支持对普通应用报文的操作。

8.10.4 执行规定

a)执行此服务的前提条件

1)车辆静止;

2)系统不执行任何紧急操作(供应商定义);

3)当上述任何一个条件不满足, ECU应该拒绝通信控制请求报文并发送否定响应码22h

b)以下一种或多种情况会导致ECU返回默认状态(正常收发报文):

1)接收到了enableRxAndTx参数的通讯控制服务;

2) ECU上电/重启;

3)任何原因导致的诊断会话模式转换到默认会话。

c) 对于连接多个网段的ECU (如网关),此服务会影响所有网段 (不仅是接收到诊断请求的网段)。

d) 对于网关ECU,正常诊断报文的路由不受此服务影响。


http://www.ppmy.cn/news/413923.html

相关文章

【Python 随练】不相同的三位数字

题目: 有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?在控制台输出出来。 简介: 在本篇博客中,我们将使用Python代码解决一个数学问题:如何使用数字1、2、3和4组合成互不相同且无重复…

青龙面板 口味王新脚本

口味更新了题库 js脚本文件下载 js脚本文件下载 链接:https://caiyun.139.com/m/i?165CdSgn5IVnm 提取码:xG41提醒:如脚本运行错误请按照依赖 依赖:babel/parser xpath xmldom jsdom node-jsencrypt axiosv0.27.2 依赖安装方式: 高级青龙面包可以直…

Python语言画蓝色妖姬

import turtle# 设置初始位置 turtle.penup() # 提起画笔 turtle.left(90) # 逆时针旋转九十度 turtle.fd(200) # 向前移动一段距离 fdforward turtle.pendown() # 放下画笔移动画笔开始绘制 turtle.right(90) # 顺时针旋转九十度# 花蕊 turtle.fillcolor("blue&quo…

Xshell配色美化

Xshell是一款在windows下比较流行的SSH终端工具,在我使用过的终端工具中,它是比较平衡的一款,在稳定性、便利性、功能以及UI设计等方面都不错。 为了让Xshell的页面更加美观、明了,我对它做了一些优化。 一、配色方案 Xshell有…

[NOI2011] 阿狸的打字机

[NOI2011] 阿狸的打字机 题目描述 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机。打字机上只有 28 28 28 个按键,分别印有 26 26 26 个小写英文字母和 B、P 两个字母。经阿狸研究发现,这个打字机是这样工作的:…

青龙面板脚本库大全

代理问题,请多切换尝试,如果国内?用不了的直接拉GitHub自行添加其他代理尝试 交流群:790665041 kingran库 ql repo https://gh.fakev.cn/KingRan/KR.git "jd_|jx_|jdCookie" "activity|backUp" "^jd[^_]|USER|u…

折斷的蓝色妖姬。。。1207

安靜的下午,想起了那朵玫瑰 第一次收到玫瑰,真的好開心 好想它开花,好想它能多活久一些 第一次养玫瑰,一个礼拜都没有见它开放 花蕊的形状始终没有改变 枝干却慢慢失去水分不再吸收 有些失望,看着玫瑰发呆的同时 室友&…

AI脚本插件开发-刀线属性一键设置-插件制作源码-illustrator插件开发

文章目录 1.illustrator1.1.app.activeDocument1.2.selection2.模块分析3.源码工程4.项目下载5.作者答疑本文主要分析一款插件的源码,刀线属性一键设置,代码一般较长,读者耐心阅读,对于学习插件开发具有不小的帮助。先介绍了一下基础资料,如有不懂的地方,就去这些资料里去…