一、27 服务定义
0x27 = SecurityAccess 安全访问服务(ISO 14229 UDS)
作用:
- 给 ECU 加锁
- 敏感操作必须先解锁(刷写、改标定、清故障码、写 VIN 等)
- 用种子 (Seed) ↔ 密钥 (Key)动态认证,没有固定密码
二、27 服务核心用法标准流程
诊断仪 → ECU:请求种子(RequestSeed)
- 子功能:奇数(01,03,05,07…)
- 示例:
27 05(请求等级 3 种子)
ECU → 诊断仪:返回随机种子(Seed)
- 种子:4 字节随机数(常见),每次不一样
- 肯定响应:
67 05 11 22 33 44(67=27 响应)
诊断仪:用原厂算法算出 Key
- 输入:Seed
- 算法:车企私有(保密),常见:
- XOR / 移位 / S 盒 / AES / HMAC
- 输出:4 字节 Key
诊断仪 → ECU:发送密钥(SendKey)
- 子功能:奇数 + 1(偶数)(02,04,06,08…)
- 示例:
27 06 55 66 77 88
ECU 验证
- ECU 用相同算法 + 相同 Seed算自己的 Key
- 对比:一样 → 解锁;不一样 → 拒绝(NRC=35)
三、安全等级(常用)
| 等级 | 子功能(请求 / 发送) | 用途 |
|---|---|---|
| Level 1 | 01/02 | 编程会话(刷写程序) |
| Level 2 | 03/04 | 常规维修(清故障码、激活测试) |
| Level 3 | 05/06 | 系统修改(标定、写数据) |
| Level 4 | 07/08 | 厂商核心(改里程、写密钥) |
规则:
- 一次只能解锁一个等级
- 会话超时 / 复位 → 自动重新上锁
四、密钥 / 种子 存储(重点)
1. ECU 内部(核心)
密钥算法 + 原始密钥(Secret Key)
- 存储:MCU 内部 OTP / Flash 加密区 / 硬件安全模块 HSM
- 永不公开,不可读,出厂固化
当前种子(Seed)
- 存储:RAM(临时)
- 掉电丢失;认证失败 / 超时清空
安全状态 / 错误计数器
- 存储:Flash(非易失)
- 作用:防止暴力破解(3 次错 → 锁 10 秒)
2. 诊断仪 / 上位机
- 相同的算法 + 相同的原始密钥
- 存储:加密狗 / 授权文件 / 内部加密存储
- 只有原厂 / 授权设备才有,普通用户拿不到
3. 总结
- 算法和根密钥:存 ECU 加密 Flash / HSM(只读、保密)
- 临时种子:存 RAM(用完即丢)
- 诊断仪:存相同算法 + 根密钥(授权才有)
五、常见否定响应(NRC)
- 35:Key 错误(算法不匹配 / 根密钥不对)
- 36:Seed 过期(太久没发 Key)
- 37:访问被锁定(多次失败,需等 10 秒)
六、实战示例(CAN 报文)
1. 请求种子(等级 3)
发送:27 05 响应:67 05 A1 B2 C3 D4 (Seed=A1B2C3D4)2. 计算 Key(假设算法:Key=Seed XOR 12345678)
Key = A1B2C3D4 XOR 12345678 = B38695AC3. 发送密钥
发送:27 06 B3 86 95 AC 响应:67 06 (解锁成功)七、无法破解
- 种子是随机的,每次都变
- 算法 + 根密钥存在 ECU 加密区,读不出来
- 错误次数限制,防暴力破解
- 解锁状态临时,复位就失效
八、总结
27 服务 = 动态密码锁:ECU 给随机挑战码(Seed),双方用相同保密算法算 Key,匹配才解锁;算法和根密钥藏在 ECU 加密 Flash/HSM,临时种子放 RAM。