自动驾驶 1000问 · 十 · 第 28 题:CAN 报文注入怎么防?SecOC 靠什么工作?

来源:Flomo 原始笔记|查看原笔记|迁移日期:2026-10-31

自动驾驶 1000问 · 十 · 第 28 题:CAN 报文注入怎么防?SecOC 靠什么工作?

先看威胁:CAN 是广播总线,报文没有发送者身份、没有真实性校验——任何人挂上总线,就能伪造 ID 发报文。攻击者注入一条「刹车信号 = 松开」或「车速 = 100」,其他 ECU 分不出真假。

CAN 本身的弱点

  • 无认证:不验发送者。
  • 无加密:明文传输。
  • 无完整性:CRC 只防传输错误,防不了恶意篡改(攻击者能重算 CRC)。
  • 广播式:谁都能听、都能发。

SecOC(Secure Onboard Communication)怎么防

核心是给每条报文补上「验真」信息:

  1. 认证码(MAC):发送方用密钥对「报文数据 + 新鲜度」算一个 MAC(如 CMAC-AES)附在报文里;接收方用同一密钥重算,对不上就丢弃。保证完整性 + 真实性。

  2. 新鲜度值(Freshness Value):防重放。每条报文带递增计数,接收方校验是否在合理窗口内。攻击者录一条合法报文重发,新鲜度对不上,被拒。

  3. 密钥管理:密钥要安全分发和存储,不能明文放代码里;通常配合 HSM(硬件安全模块)做加解密与密钥保存。

  4. 同步机制:收发双方的新鲜度要同步,一般靠专门的 SYNC 报文维持窗口一致。

代价与折中

  • 报文变长:MAC + 新鲜度要占字节,CAN 一帧才 8 字节(CAN FD 64),只能挑关键报文做。
  • 计算开销交给 HSM 扛。
  • 实践做法:刹车、转向、动力等关键报文做 SecOC,非关键的放宽。

边界:SecOC 防的是「伪造和重放」,它假设总线本身是封闭的,防不了「总线被物理接上」。更强的防护要配合网关隔离、入侵检测(IDS)、域划分。

一句话:CAN 没有身份和完整性,谁都能注入;SecOC 用「MAC 验真 + 新鲜度防重放 + HSM 管密钥」给关键报文补上这两样。它是补丁,真正的安全靠网关隔离 + 域划分 + 分层防御。

📎 导航:https://v.flomoapp.com/mine/?memo_id=MjU2MDMwMzA0

📎 上一题:https://v.flomoapp.com/mine/?memo_id=MjU2MjY1MTE5

自动驾驶