UDS 0x27 安全访问(种子 / 密钥 Seed-Key) 的用法、流程、算法、存储位置、安全机制

一、27 服务定义

0x27 = SecurityAccess 安全访问服务(ISO 14229 UDS)

作用:

  • 给 ECU 加锁
  • 敏感操作必须先解锁(刷写、改标定、清故障码、写 VIN 等)
  • 种子 (Seed) ↔ 密钥 (Key) 动态认证,没有固定密码

二、27 服务核心用法标准流程

  1. 诊断仪 → ECU:请求种子(RequestSeed)

    • 子功能:奇数(01,03,05,07...)
    • 示例:27 05 (请求等级 3 种子)
  2. ECU → 诊断仪:返回随机种子(Seed)

    • 种子:4 字节随机数(常见),每次不一样
    • 肯定响应:67 05 11 22 33 44 (67=27 响应)
  3. 诊断仪:用原厂算法算出 Key

    • 输入:Seed
    • 算法:车企私有(保密) ,常见:
      • XOR / 移位 / S 盒 / AES / HMAC
    • 输出:4 字节 Key
  4. 诊断仪 → ECU:发送密钥(SendKey)

    • 子功能:奇数 + 1(偶数)(02,04,06,08...)
    • 示例:27 06 55 66 77 88
  5. 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 = B38695AC

3. 发送密钥

复制代码
发送:27 06 B3 86 95 AC
响应:67 06 (解锁成功)

七、完整安全机制分层(五大防护设计)

  1. 种子是随机的每次都变,(防复用)
  2. 算法 + 根密钥存在 ECU 加密区,读不出来,(隔离保护)
  3. 错误次数限制,防暴力破解(防爆破)
  4. 解锁状态临时,复位就失效(时效性保护)
  5. 报文与交互安全约束(会话约束)

第一层:随机种子防复用

  1. Seed 由 ECU 内部硬件随机数 / 混沌算法生成
  2. 每次 0x27 请求种子,种子完全不同
  3. 种子仅存在 ECU RAM 临时缓存
    • 断电、复位、认证失败、超时 → 立即销毁清空
  4. 旧种子永久失效,截获上一次密钥也没用

👉 解决:抓包回放攻击、旧密码复用。


第二层:根密钥 + 加密算法 隔离保护

  1. 根密钥(Secret Key)

    • 存储位置:
      • MCU 内部 OTP 一次性可编程存储
      • Flash 加密保护区 / HSM 硬件安全模块
      • 部分车厂:硬件唯一密钥,不可读取、不可改写
    • 外部诊断、读 Flash、调试接口无法导出根密钥
  2. 加密算法主流:移位、异或、分组加密、AES、自定义置换 S 盒

    • 算法固化在 ECU 固件代码里,无公开文档
    • 诊断仪 / 原厂工具 必须内置同款算法 + 同款根密钥
    • 第三方设备缺密钥 / 算法,无法算出合法 Key

👉 解决:直接破解、逆向抄算法。


第三层:错误次数锁定机制(防爆破)

ECU 内部非易失存储(Flash)保存安全访问错误计数器

  1. 密钥错误一次 → 计数器 + 1
  2. 连续错误 3~5 次 → 安全锁定
  3. 锁定期间:拒绝所有 0x27 服务,报 NRC=37
  4. 解锁条件:
    • 固定冷却时间(3s/10s/30s)自动解除
    • 部分高端 ECU:必须整车断电复位

👉 解决:暴力穷举、逐位试密钥。


第四层:会话绑定 + 时效性限制

  1. 种子时效性种子下发后,必须在规定时间内(2~5s)发送密钥超时未应答 → 种子作废,需重新申请种子(NRC=36)
  2. 会话绑定 安全解锁仅当前诊断会话有效
    • 切换会话、退出诊断、CAN 总线休眠、ECU 复位
    • 立刻自动降级上锁
  3. 权限分级隔离0x27 分多等级:维修级、标定级、编程刷写级、厂商最高权限高等级密钥不能越级访问,权限隔离。

第五层:报文与交互安全约束

  1. 必须先进入特定诊断会话(如默认会话 / 编程会话),才允许调用 0x27
  2. 禁止离线计算密钥:种子来自实时 ECU,无法离线伪造
  3. 密钥报文不明文固定,随种子动态变化
  4. 部分车企增加:
    • 报文校验和 / CRC
    • 诊断仪 ID 白名单
    • 双向认证(ECU 也校验诊断仪)

八、总结

27 服务 = 动态密码锁:ECU 给随机挑战码(Seed),双方用相同保密算法算 Key,匹配才解锁;算法和根密钥藏在 ECU 加密 Flash/HSM,临时种子放 RAM。

相关推荐
skywalk81633 小时前
发现Kotti项目的python包Beaker 存在安全漏洞
开发语言·网络·python·安全
团子云技术4 小时前
从 HTTPS 到 LLM Agent:我们重回数字安全的黑暗时代了吗?
安全·ai编程
空中海6 小时前
Redis 专家实战:生产架构设计 × 容量规划 × 安全治理 × 37道高频面试题全解
数据库·redis·安全
南村群童欺我老无力.6 小时前
鸿蒙PC开发的路由导航参数传递的类型安全陷阱
安全·华为·harmonyos
千里念行客2407 小时前
锚定AI赛道释放红利:安凯微2026年Q1业绩显成色
大数据·人工智能·科技·安全
桌面运维家7 小时前
基于vDisk的高校实验室IDV云桌面安全管理方案
人工智能·安全
BizObserver7 小时前
从 SEO 到 GEO:2026 年品牌信息分发逻辑的颠覆性变革
大数据·运维·网络·人工智能·安全
Nice__J8 小时前
ISO26262功能安全——系统级安全设计
安全
FinTech老王8 小时前
逻辑删除不等于物理销毁:KingbaseES敏感数据标记与销毁实操指南
数据库·安全·oracle