当前位置: 首页 > news >正文

Python定义UDS诊断服务(8):SecurityAccess(0x27)

目录

1. 文档概述

2. 服务简介

2.1 服务定义

2.2 服务重要性

2.3 协议规范

3. 类结构设计

3.1 继承关系

3.2 类成员说明

3.2.1 SecurityAccess 类属性

3.2.2 Mode 枚举类

3.2.3 Seed_level 枚举类

3.2.4 Response_Interpret 嵌套类

4. 核心方法详解

4.1 validate_mode 方法

4.1.1 方法签名

4.1.2 功能说明

4.2 normalize_level 方法

4.2.1 方法签名

4.2.2 功能说明

4.2.3 转换规则

4.3 get_key 方法

4.3.1 方法签名

4.3.2 功能说明

4.4 make_request 方法

4.4.1 方法签名

4.4.2 参数说明

4.4.3 请求构建逻辑

4.4.4 请求格式示例

4.5 interpret_response 方法

4.5.1 方法签名

4.5.2 功能说明

4.5.3 响应格式示例

5. 协议细节

5.1 安全访问流程

5.1.1 完整安全访问流程

5.1.2 请求种子模式(奇数级别)

5.1.3 发送密钥模式(偶数级别)

5.2 否定响应处理

5.2.1 支持的否定响应码

5.2.2 常见错误场景

5.3 安全算法说明

5.3.1 AES-CMAC算法

6. 使用示例

6.1 基本使用

6.1.1 请求种子示例

6.1.2 发送密钥示例

6.2 多级别安全访问

6.3 批量安全访问


1. 文档概述

        本文档详细说明基于ISO 14229-1标准的安全访问服务(SecurityAccess,Service ID 0x27)的Python实现。该服务是UDS协议中的关键安全服务,用于在访问受保护的ECU功能前进行身份验证。

2. 服务简介

2.1 服务定义

         安全访问服务(0x27)提供了一种机制,允许客户端(诊断工具)通过密钥交换流程与服务器(ECU)建立安全会话。服务采用"请求种子-发送密钥"的挑战-响应模式来验证客户端身份。

2.2 服务重要性

  • 安全保护:防止未授权访问ECU的敏感功能和数据
  • 功能保护:保护关键ECU功能免受恶意操作
  • 数据完整性:确保诊断通信的安全性
  • 访问控制:实现不同安全级别的访问权限控制

2.3 协议规范

        本实现遵循ISO 14229-1:2020标准中关于0x27服务的规范,支持多种安全级别和加密算法。

3. 类结构设计

3.1 继承关系

SecurityAccess(BaseService)├── Mode (Enum)├── Seed_level (Enum)└── Response_Interpret(Response)

3.2 类成员说明

3.2.1 SecurityAccess 类属性
属性 类型 描述
_sid int 0x27 服务标识符
_use_sub_function bool True 使用子功能参数
_has_response_data bool True 有响应数据
supported_negative_response List[ResponseCode] [0x12, 0x13, 0x22, 0x24, 0x31, 0x35, 0x36, 0x37] 支持的否定响应码
fixed_01 list[int] [0xFF, 0xFF, 0xFF, 0xFF, 0xFF] 安全级别01的固定值
fixed_05 list[int] [0x12, 0x34, 0x56, 0x78, 0x9A] 安全级别05的固定值
fixed_19 list[int] [0x00, 0x00, 0x00, 0x00, 0x00] 安全级别19的固定值
3.2.2 Mode 枚举类
class Mode:RequestSeed = 0  # 请求种子模式SendKey = 1      # 发送密钥模式
3.2.3 Seed_level 枚举类
class Seed_level:Seed_01 = 0x01  # 安全级别01Seed_05 = 0x05  # 安全级别05  Seed_19 = 0x19  # 安全级别19
3.2.4 Response_Interpret 嵌套类
class Response_Interpret(Response):seed: Optional[list[int]]key: Optional[list[int]]mode: "SecurityAccess.Mode"

响应解析类包含:

  • seed: 服务器返回的种子值
  • key: 计算出的密钥值
  • mode: 当前安全访问模式

4. 核心方法详解

4.1 validate_mode 方法

4.1.1 方法签名
@classmethod
def validate_mode(cls, mode: int)
4.1.2 功能说明

验证安全访问模式参数是否有效:

  • 检查模式值是否为0(RequestSeed)或1(SendKey)
  • 如果无效则抛出ValueError异常

4.2 normalize_level 方法

4.2.1 方法签名
@classmethod
def normalize_level(cls, mode: int, Seed_level: int) -> int | None
4.2.2 功能说明

根据模式和种子级别规范化安全级别:

  • 请求种子模式:确保级别为奇数(1, 5, 19…)
  • 发送密钥模式:确保级别为偶数(2, 6, 20…)
  • 自动进行奇偶转换
4.2.3 转换规则
模式 输入级别 输出级别
RequestSeed 奇数 保持不变
RequestSeed 偶数 级别-1
SendKey 奇数 级别+1
SendKey 偶数 保持不变

4.3 get_key 方法

4.3.1 方法签名
@classmethod
def get_key(cls, seed: bytes, security_constant: bytes) -> bytes | list[int]
http://www.dtcms.com/a/390042.html

相关文章:

  • 第1节 工具(剪映剪映小助手)准备及安装(Coze扣子空间剪映小助手教程)
  • 大模型提示词Prompt工程:1-万能公式-完整指南
  • 8.30美团技术岗算法第三题
  • CentOS 7 一键安装 vsftpd 并创建可登录 FTP 用户 test
  • k8s自定义调度器实现路径
  • 服务器数据恢复—RAIDZ硬盘“惹祸”导致服务器崩溃的数据恢复过程
  • 20250917_车辆定位系统aidata-01Apache Doris数据库备份+恢复+清理 流程操作文档
  • Redis 7.0 ACL实战:RBAC模型实现精细化权限控制
  • Lightrag 文档处理不成功(httpx.ReadTimeout 为主)的解决步骤与方法总结
  • Spring Boot + MySQL MCP 集成标准流程
  • 基于RK3588与ZYNQ7045的ARM+FPGA+AI实时系统解决方案
  • 基于Linux,看清C++的动态库和静态库
  • 多导睡眠五大PSG数据集统一格式化处理|SHHS
  • ZeroMQ基础
  • 【JavaGuide学习笔记】什么,Java中 native 也是一个关键字?
  • 【LWIP】STM32F429 + LWIP + DP83848 热插拔问题总结
  • RGWRados::Object::Write::_do_write_meta()
  • Shopify 集合页改造:增加 Banner 图片 + 点击加载更多功能
  • 泛函 Φ(u) = ∫[(u″)² + u² + 2f(x)u]dx − (u′(0))² 在 u(0)=u(1) 下的驻点方程与边界条件
  • JAVA高频面试题汇总:Java+ 并发 +Spring+MySQL+ 分布式 +Redis+ 算法 +JVM 等
  • 构建与运营“爬虫 IP 代理池”的方法论
  • 【文献笔记】Point Transformer
  • Linux | i.MX6ULL Modbus 移植和使用(第二十一章)
  • 几种微前端框架的沙箱策略
  • 黑盒测试:测试用例设计之边界值设计方法(边界值分析法)(上点、离点、内点)健壮性测试、单缺陷假设理论
  • 【题解】P1548 [NOIP 1997 普及组] 棋盘问题
  • scala中for推导式详细讲解
  • React学习 ---- 基础知识学习
  • C语言实现MATLAB中的Fir1带通滤波器
  • 微信小程序开发教程(十七)