UDS关于0x84服务数据安全传输学习

1.服务简介

1.1目的

   该服务的目的是传输受第三方攻击保护的数据,这可能会危及数据安全。

    如果客户端打算以安全模式使用本文档中定义的诊断服务,则SecuredDataTransmission服务适用。它还可以用于在客户端和服务器之间以安全模式传输符合某些应用协议的外部数据。在这种情况下,安全模式意味着传输的数据受到加密方法的保护。

1.2 安全子层

   下图说明了安全子层。为了在安全模式下执行诊断服务,必须在服务器和客户端应用程序中添加安全子层。

     

有两种方法可以在客户端和服务器之间执行诊断服务数据传输:

a. 不安全的数据传输模式

   应用程序使用本文档中定义的诊断服务和应用层服务原语在客户端和服务器之间交换数据。安全子层在客户端和服务器中的“应用程序”和“应用程序层”之间执行数据的“传递”。

b. 安全数据传输模式

    应用程序使用诊断服务或外部服务和安全子层服务原语在客户机和服务器之间交换数据。安全子层使用secureddatattransmit服务来传输/接收安全数据。安全链接必须是点对点通信。因此,只允许物理寻址,这意味着只涉及一个服务器。

    安全子层与应用程序的接口符合ISO/OSI模型约定,因此提供了以下四个安全子层(SS_)服务原语: 

a. SS_ScuredMode.req:安全子层请求

b. SS_ScuredMode.ind:安全子层指示

c. SS_ScuredMode.resp:安全子层响应

d. SS_ScuredMode.conf:安全子层确认

     ISO 14229的这一部分定义了已确认和未确认的服务。在安全模式下,只允许确认服务(suppressPosRspMsgIndicationBit=FALSE)。根据这一要求,以下服务不允许在安全模式下执行:

   a. ResponseOnEvent(0x86);

   b. 按周期标识符读取数据(0x2A);

   c. 测试器存在(0x3E)

      已确认的服务(suppressPosRspMsgIndicationBit=FALSE)使用四个应用层服务原语请求、指示、响应和确认。当在安全模式下执行已确认的诊断服务时,这些被映射到四个子层服务原语上,反之亦然。  

      在安全模式下执行诊断服务时,安全子层的任务是对“应用程序”提供的数据进行加密,对“应用层”提供的数据进行解密,并添加、检查和删除与安全相关的数据元素。安全子层使用应用层的SecuredDataTransmission (0x84)服务,根据外部协议(请求和响应)发送和接收整个诊断消息或消息,并以安全方式进行交换。

   安全子层为应用程序提供服务“SecuredServiceExecution”,用于诊断服务的安全执行。

“SecuredServiceExecution”服务的安全子层请求和指示原语是根据以下通用格式指定的:

SS_SecuredMode.request (
                                                     SA,
                                                     TA,
                                                     TA_type
                                                      [,RA]
                                                      [,parameter 1, ...]
                                            )
SS_SecuredMode.indication (
                                                    SA,
                                                    TA,
                                                    TA_type
                                                    [,RA]
                                                    [,parameter 1, ...]
                                               )

SecuredServiceExecution服务的安全子层响应和确认原语是根据以下通用格式指定的:

SS_SecuredMode.response (
                                                        SA,
                                                        TA,
                                                        TA_type
                                                        [,RA,]
                                                        Result
                                                        [,parameter 1, ...]
                                              )
SS_SecuredMode.confirm (
                                                SA,
                                                TA,
                                                TA_type,
                                                 [RA,]
                                                 Result
                                                 [,parameter 1, ...]
                                               )

安全子层服务原语中显示的寻址信息被直接映射到应用层的寻址信息上,反之亦然。

1.3 安全子层访问

     访问安全服务执行的安全子层的概念类似于本文档中描述的应用层接口。安全子层使用应用层服务原语。

以下介绍了在安全模式下执行已确认的诊断服务:

a.客户端应用程序使用安全子层SecuredServiceExecution服务请求以安全模式执行诊断服务。安全子层执行与服务器建立链接所需的操作,添加特定的安全相关参数,根据需要对诊断服务的服务数据进行加密,以安全模式执行,并使用应用层secureddatatranssion服务请求,将受保护的数据传输到服务器。

b.服务器接收一个应用层SecuredDataTransmission服务指示,由服务器的安全子层处理。服务器的安全子层检查特定于安全的参数,解密加密的数据,并通过安全子层SecuredServiceExecution服务指示将要以安全模式执行的服务的数据呈现给应用程序。应用程序执行服务并使用安全子层SecuredServiceExecution服务响应以安全模式响应服务。服务器的安全子层添加了特定的安全相关参数,需要时对响应消息数据进行加密,并使用应用层SecuredDataTransmission service response将响应数据传输到客户端。

c. 客户端接收应用层SecuredDataTransmission服务确认原语,该原语由客户端的安全子层处理。客户端的安全子层检查特定于安全的参数,解密加密的响应数据,并通过安全子层SecuredServiceExecution确认将数据呈现给应用程序。

      下图图形方式显示了在安全模式下执行已确认的诊断服务时,安全子层、应用程序层和应用程序之间的交互。

2.请求消息

2.1 请求消息定义 

安全子层生成应用层SecuredDataTransmission请求消息参数。

2.2请求消息子功能参数$Level(LEV_)定义

此服务不使用子函数参数。

2.3 请求消息数据参数定义

定义请求消息的数据参数

securityDataRequestRecord

  此参数包含由安全子层处理的数据。

3.肯定响应消息

3.1 肯定响应消息定义

3.2 肯定响应消息数据参数定义

定义肯定响应消息的数据参数

securityDataResponseRecord

 此参数包含由安全子层处理的数据。

 4.支持的否定响应代码(NRC_)

     本服务应执行以下否定响应代码。表85记录了每个响应代码发生的情况。响应代码总是不加加密地发送,即使根据请求A_PDU中的配置文件,响应A_PDU必须加密。如果错误场景适用于服务器,则应使用列出的否定响应。

    

NCR代名词描述
0x13

incorrectMessage\

LengthOrInvalidFormat

如果请求A_PDU的长度不正确,则服务器应使用此响应代码。
0x38 – 0x4F

reservedByExtended\

DataLinkSecurityDocument 

此值范围由扩展数据链路安全性保留。

      上面列出的响应代码适用于SecuredDataTransmission(0x84)服务。如果在安全模式下执行的诊断服务需要否定响应,则该否定响应将通过SecuredDataTransmission肯定响应消息以安全模式发送给客户端。

   

<think>嗯,用户这次的问题是关于UDS 0x71服务的详细信息和实现方法。我需要先回顾之前的对话,看看之前已经讨论过什么。之前用户提到过UDS 71服务,当时我指出0x71(十六进制)对应的十进制是113,超出了标准UDS服务范围(0x100x3E),可能是厂商自定义的服务。用户现在再次询问,说明他们可能在实际工作中遇到了相关问题,或者需要更具体的信息。 首先,用户提供的引用内容似乎与Windows的列表视图控件相关,可能用户误粘贴了这些内容,或者有其他意图。不过根据用户当前的查询,这些引用可能不相关,需要忽略。用户明确提到要参考之前的对话,所以应该专注于UDS 0x71服务的细节。 接下来,我需要确认UDS服务代码的范围。根据ISO 14229标准,服务ID(SID)通常是从0x100x3E,0x71显然超出了这个范围。因此,0x71很可能是厂商自定义的服务。不同的汽车制造商或ECU供应商可能会扩展使用0x400x7F之间的服务ID,用于特定的诊断功能。 用户可能需要知道如何确定0x71服务的具体用途,以及如何实现或诊断相关问题。我需要提供一些常见的排查步骤,比如检查文档、使用诊断工具发送请求、分析响应代码等。此外,可能需要解释如何通过其他UDS服务(如0x19或0x22)来获取更多信息。 用户还可能想知道在实现自定义服务时的注意事项,比如安全访问、会话模式等。需要提醒用户确保在正确的会话模式下发送请求,以及处理可能的安全访问限制。 另外,用户之前的问题中提到了故障响应码,如7F 71 11(服务未实现),7F 71 31(请求超出范围),7F 71 33(安全访问被拒绝)。这些信息需要再次强调,帮助用户理解可能遇到的问题。 最后,根据用户的问题生成相关的问题,比如如何解码自定义服务,如何确保兼容性,以及如何通过其他服务验证ECU功能。这些问题应该能够帮助用户进一步探索和解决他们遇到的挑战。</think>根据ISO 14229标准和行业实践,UDS服务$0x71$属于**厂商自定义服务**范畴。以下是技术实现与排查建议: --- ### 一、服务属性定位 1. **服务代码范围定义** - 标准UDS服务:$0x10$-$0x3E$(如$0x22$读取数据、$0x2E$写入数据) - 自定义扩展服务:$0x40$-$0x7F$(厂商可自由定义功能)[^1] - **$0x71$服务需通过厂商文档确认具体用途**(例如:固件更新预处理、特殊诊断模式激活等) 2. **典型应用场景推测**(基于行业案例): - 非标数据块传输(如标定数据分段写入) - 硬件寄存器直接访问(需配合安全解锁) - 生产模式下的特殊配置(如传感器校准序列) --- ### 二、实现与通信验证 1. **基础报文格式** ```python # 假设0x71服务用于读取扩展诊断标识符 request = [0x71, 0x01] # 服务ID + 子功能 response = [0x71, 0x01, 0x12, 0x34] # 返回数据示例 ``` 2. **关键校验步骤**: - **会话模式验证**:确认ECU处于扩展会话模式($0x03$) ```python # 进入扩展会话示例 enter_extended_session = [0x10, 0x03] ``` - **安全访问控制**:若涉及敏感操作需先完成$0x27$服务解锁[^2] - **数据对齐检查**:通过$0x31$服务(RoutineControl)验证内存状态 --- ### 三、典型故障与解决方案 | 响应代码 | 含义 | 排查方向 | |-----------------|------------------------|-----------------------------------| | `7F 71 11` | 服务未实现 | 1. 检查ECU软件版本<br>2. 验证服务是否在支持列表中 | | `7F 71 22` | 条件不满足 | 1. 确认当前会话模式<br>2. 检查前置条件(如车速=0)| | `7F 71 31` | 请求超范围 | 1. 验证子功能参数<br>2. 检查数据长度是否符合要求 | --- ### 四、实践建议 1. **逆向工程辅助方法**: - 通过$0x84$服务(ControlDTCSetting)禁用故障码干扰 - 使用$0x85$服务(ResponseOnEvent)监控服务触发条件 2. **开发调试工具链**: ```c // CANoe CAPL脚本示例 on diagRequest 0x71: { write("收到0x71服务请求,数据长度: %d", this.DLC); // 添加自定义响应逻辑 } ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值