《UDS协议从入门到精通》系列——图解0x27:安全访问


Tip📌:本文描述中但凡涉及到其他UDS服务的,将陆续提供链接跳转方式以便快速了解他们。(各服务介绍持续更新中…)

学习UDS基础知识以及其他相关内容?>>>>>>>>> 返回专栏总目录 《UDS协议从入门到精通(UDS速查手册)》<<<<<<<<<

一、简介

1.1 什么是安全访问服务?

  车载ECU中的一些数据或者操作是比较重要的,对于这种企业敏感的数据或者操作肯定不是人人都能访问的,诊断服务0x27应运而生。它主要用于车载ECU数据上传或者下载,传递重要信息以及敏感操作等过程中。即对请求执行操作的人进行鉴权,只有正确解锁对应的安全等级,才能访问该安全等级的数据,否则无法访问。

1.2 应用场景有哪些?

  • 通常在向Flash中写数据时,都需要先执行0x27安全解锁之后才能进行安全写入,最常见的就是对ECU进行软件刷写时,需要先通过0x27安全解锁才能进行后续重编程操作,否则将对ECU造成极大的安全风险;
  • 使用0x31服务执行十分重要的routine时,需要优先执行0x27进行安全解锁之后才能够执行对应的routine;
  • 在产线写入较为重要的版本或者标定等信息过程中,需要先使用0x27服务才能使用写操作的诊断指令,如0x2E服务;

1.3 实现安全访问的基本原理是什么?

第一回合:

  1. Tester向目标ECU请求种子(“种子“:简单理解它就是个随机数)
  2. 目标ECU向Tester发送种子

第二回合:

  1. Tester基于接收到来自目标ECU的种子计算出对应的key并发送给目标ECU
  2. 目标ECU接收来自Tester算出来的key并与内部算出的key比较,如果一致则解锁成功,否则解锁不成功

  请求+响应为一组,共两个来回,用图示方式看起来更直观一些:

Tester 目标ECU 发送请求,索要随机数种子 1 使用随机数生成算法生成随机数种子 回复随机数种子 2 使用安全算法根据种子生成密钥 key1 使用同样的安全算法根据这个种子计算密钥 key2 发送上一步计算出来的 key1 3 key1==key2 ? 正响应 : 负响应 回复响应 4 得知解锁成功/失败 Tester 目标ECU

  Tips📌: 虽然该服务也支持抑制正响应,但由于该服务需要通过回复正响应或者负响应判断是否成功解锁,所以一般情况下针对0x27服务我们不会使能SPR位

二、数据包格式

2.1 服务请求格式

  该服务共两次请求+响应,两次请求数据包的格式不一样:
请求种子数据包:
在这里插入图片描述
发送 key数据包:
在这里插入图片描述
Tips📌:两个请求中sub-function: securityAccessType的含义

  • “请求种子“数据包中,该字段必须为奇数;“发送key“数据包中该字段必须为偶数,不同的数字代表不同的安全等级
  • 每一次完整的0x27服务流程中,“请求种子“和“发送key“两个数据包中该字段数值必须存在一个定量关系,即:
    “请求种子“ 的securityAccessType + 1 == “发送key“ 的securityAccessType
    例如: “请求种子“ 的securityAccessType= 0x01 ——> “发送key“ 的securityAccessType= 0x02

Tips📌:两次请求携带的数据含义

  • securityAccessDataRecord: 传输到目标ECU端的标识性信息,一般不使用
  • securityKey: Tester通过安全算法根据随机数种子计算出来的密钥值,发送给目标ECU

2.2 服务响应格式

2.2.1 肯定响应

在这里插入图片描述
securityAccessType:取值与请求中的sub-function值保持一致即可;
securitySeed:该参数仅在对应请求的sub-function为奇数(即“请求种子“)时才会有,其他情况下,目标ECU只会回复前两个字节(0x67 & sub-function),该参数取值范围只能为0x00-0x7F。

2.2.2 否定响应

在这里插入图片描述

  可能出现的NRC及其含义如下:

NRC含义
0x12子功能参数不受支持
0x13消息长度错误
0x22不满足请求标准/条件
0x24请求顺序错误,比如应该先发送请求种子,而不是先发送密钥数据
0x31请求中携带的数据是无效的
0x35密钥不匹配,即Tester计算出来的key和目标ECU计算出来的不一样:若始终不匹配还不断尝试,
ECU会回复下面的NRC=36,告诉你已经超过失败的次数了,不能再请求安全解锁了
0x36超过最大试错次数,已达到解锁最大错误次数,若你执意再请求,ECU就会回复你下面的NRC=37,
意思是ECU现在不接受安全访问,这就是ECU锁死的现象,需等待一定时间后才可继续请求安全访问
0x37当前服务器处于延时状态,超时时间未到

Tips📌:

  • ECU上电后,保持上锁状态,一般进入扩展会话才能请求0x27服务,而编程会话的安全等级与扩展会话的安全的等级不一致。所以如果想进行ECU软件刷写操作flash,那进入编程会话后一般还需要再请求0x27服务进入另一个安全等级。
  • 若已成功解锁安全等级,再请求相同层级的解锁服务,ECU一般会回复的种子(随机数)为0。而未解锁的安全等级下,27服务中目标ECU发送来的随机数种子是不允许为0的。因此,可以通过判断种子的值得知当前安全等级是否处于解锁状态。
  • 同一时刻,只允许有一个安全等级处于解锁状态。
  • 安全等级的值没有特别的含义,不存在高低之分,比如解锁level3并不需要先处于level2。

三、通信示例

   假设现在需要解锁目标ECU的安全等级1,并且此时目标ECU的这个等级处于上锁状态:

诊断仪 目标ECU 27 01 1 诊断仪发送请求: 向ECU索要随机数种子, 请求解锁安全等级1 根据随机数生成算法生成随机数种子, 假设生成的是(36 57) 同时也会根据该随机数种子用安全算法计算密钥 67 01 36 57 2 目标ECU给出响应: byte1是SID+0x40 = 67, byte2是sub-funtion:安全等级 其他byte是生成的随机数种子 使用相同的安全算法根据随机数种子计算密钥, 假设算出来的是(C9 A9) 27 02 C9 A9 3 诊断仪发送请求: byte2是sub-funtion: 上一个请求的sub-funtion+1 其他byte是密钥值 比较诊断仪端计算的密钥和自己计算出的密钥是否相等 67 02 4 目标ECU给出响应: byte1是SID+0x40 = 67, byte2是sub-funtion:安全等级+1 诊断仪 目标ECU

   在上一步成功解锁安全等级1的基础上,继续发送解锁目标ECU的安全等级1的请求:

诊断仪 目标ECU 27 01 1 诊断仪发送请求: 向ECU索要随机数种子, 请求解锁安全等级1 ECU已经处于解锁状态,直接回复正响应 67 01 00 00 2 目标ECU给出正响应: 随机数种子的值都是0 诊断仪 目标ECU

>>>>>>>>> 返回专栏总目录 《UDS协议从入门到精通(UDS速查手册)》<<<<<<<<<

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Autosar是一种用于构建汽车电子系统的软件体系结构标准。下面我们从入门到精通逐步介绍Autosar。 ## 入门 ### 1. Autosar是什么? Autosar全称为Automotive Open System Architecture,是一个开放的软件体系结构标准,旨在为汽车电子系统提供统一的软件平台,以实现跨厂商、跨领域的软件协同开发和交互操作。 ### 2. 为什么需要Autosar? 汽车电子系统日益复杂,其中包含的软件模块数量越来越多,而这些模块往往由不同的供应商提供,这就导致了软件之间的集成和协作问题。同时,不同的汽车电子系统之间也需要进行协作和交互,这也需要一个标准的软件架构来实现。Autosar作为一个开放的软件体系结构标准,可以有效地解决这些问题。 ### 3. Autosar的架构 Autosar的架构分为四个层次:应用层、运行时环境层、基础服务层和硬件抽象层。 应用层:主要处理应用程序的逻辑,包括应用程序和应用程序组件。 运行时环境层:提供运行环境和支持服务,包括操作系统、任务管理、网络通信等。 基础服务层:提供各种基础服务,如诊断、通信、存储、时间管理等。 硬件抽象层:提供硬件驱动和抽象服务,包括设备驱动、CAN总线驱动等。 ### 4. Autosar的优点 Autosar的优点包括: - 跨厂商、跨领域的软件协同开发和交互操作; - 降低开发成本和开发周期; - 提高软件质量和稳定性; - 方便系统维护和更新。 ## 进阶 ### 1. Autosar的工作流程 Autosar的工作流程主要包括以下几个方面: - 系统设计:确定系统的需求和体系结构,包括硬件和软件的架构设计。 - 软件开发:根据系统设计,进行软件模块的开发和测试。 - 软件集成:将不同的软件模块进行集成测试,确保模块之间的协作正常。 - 硬件集成:将软件模块和硬件进行集成测试,确保系统的稳定性和可靠性。 - 系统验证:对整个系统进行验证和测试,确保系统符合要求。 ### 2. Autosar中的软件组件 Autosar中的软件组件包括应用软件组件、服务软件组件和复合软件组件。 应用软件组件:主要是实现具体的业务逻辑,例如控制车辆的引擎、制动系统等。 服务软件组件:提供一些通用的服务支持,例如诊断、通信、存储、时间管理等。 复合软件组件:将多个应用软件组件和服务软件组件进行组合,形成一个具有复杂功能的系统。 ### 3. Autosar中的接口 Autosar中的接口主要包括: - 应用程序接口(API):应用程序组件之间的接口。 - 运行时环境接口(RTE):应用程序组件和运行时环境之间的接口。 - 中间件接口:提供不同中间件之间的互操作性。 - 硬件抽象层接口:提供硬件抽象层和软件之间的接口。 ### 4. Autosar中的工具链 Autosar中的工具链主要包括: - 架构设计工具:用于设计系统的软件和硬件架构。 - 代码生成工具:将设计好的模型转换为可执行的代码。 - 集成测试工具:用于进行软件和硬件的集成测试。 - 系统验证工具:用于对整个系统进行验证和测试,确保系统符合要求。 ## 精通 ### 1. Autosar中的网络通信 Autosar中支持多种网络通信协议,主要包括CAN、FlexRay、Ethernet等。在Autosar中,网络通信是通过通信协议栈实现的,通信协议栈主要由以下几个层次组成: - 应用层:处理数据的格式和语法。 - 传输层:提供传输层协议,例如TCP、UDP等。 - 网络层:提供网络层协议,例如IP协议。 - 数据链路层:提供数据链路层协议,例如CAN总线协议。 ### 2. Autosar中的诊断功能 Autosar中的诊断功能主要包括故障检测、故障诊断和故障处理。诊断功能是通过Diagnostic Communication Manager(DCM)实现的,DCM主要包括以下几个部分: - 诊断服务:提供诊断服务,例如读取故障码、清除故障码等。 - 诊断通信:提供诊断通信服务,例如UDS、KWP2000等。 - 诊断存储:提供诊断信息存储服务,例如故障码存储、诊断数据存储等。 ### 3. Autosar中的操作系统 Autosar中支持多种操作系统,例如OSEK、ARINC653等。操作系统主要负责任务管理、内存管理、时间管理等功能,同时也提供了接口与其他软件组件进行交互。 ### 4. Autosar中的安全功能 Autosar中的安全功能主要包括身份认证、数据加密、访问控制等。安全功能是通过Secured Communication Stack(SecOC)实现的,SecOC主要包括以下几个部分: - 安全服务:提供安全服务,例如身份认证、数据加密等。 - 安全通信:提供安全通信服务,例如安全的CAN通信等。 - 安全存储:提供安全存储服务,例如安全的故障码存储等。 以上就是Autosar从入门到精通的介绍,希望能对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

车载系统攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值