2015年,安全研究员通过远程接口黑进一辆切诺基的CAN总线,向刹车系统发送伪造指令——车在高速上被远程劫持。这件事震惊了整个汽车行业:CAN总线从设计之初就没考虑过"认证",任何接到总线上的设备都能发任意ID的报文,其他ECU无条件接收。SecOC(Secure Onboard Communication)就是AUTOSAR给出的解药。这篇把SecOC的原理、报文结构、收发流程、与TBOX的关系完整拆解。
先讲清楚CAN的"原罪":
CAN总线诞生于1980年代,设计目标是"低成本、高可靠、实时性"——压根没考虑安全:
- 明文广播:所有报文在总线上明文传输,谁都能看
- 无认证接收:任何节点都能发任意ID,其他节点无条件接收
以前车是封闭的,问题不大。但现在——TBOX、车机、OTA网关都接在总线上,任何一个被攻破,攻击者就能通过CAN总线向动力、底盘、刹车系统发指令。这就是"一条报文引发的惨案"。
1、SecOC 是什么:AUTOSAR 的"车内消息认证"标准
SecOC(Secure Onboard Communication)是 AUTOSAR(AUTOSAR Classic 4.2 引入)的车内通信安全模块。
核心思想一句话:给关键的CAN报文加一层"身份验证 + 防重放"——接收方先验证,验证通过才处理,失败就丢弃。
SecOC 不加密数据(车内实时总线做加密代价太高),它做的是认证:
- MAC(消息认证码)→ 证明"消息是合法发送方发的"(防伪造、防篡改)
- Freshness Value(新鲜度值)→ 证明"消息不是重放的"(防重放)
对比第7篇:车云通信(TLS+证书)是"点对点安全",SecOC是"总线广播安全"——一个防通道、一个防报文,正好一外一内。
2、 SecOC 报文结构:8字节里"挤"出安全
Classic CAN 一帧只有 8 字节,怎么塞进认证信息?AUTOSAR 的默认配置:
| 字段 | 长度 | 作用 |
|---|---|---|
| 原始载荷 | 剩余空间 | 业务数据 |
| 新鲜度值(FV)截断 | 4 bit | 防重放 |
| MAC 截断 | 28 bit | 防伪造/篡改 |
MAC 计算范围:
CMAC(K, 消息ID + 载荷 + 完整新鲜度值)为什么要"截断"?完整MAC是128bit(16字节),完整FV更长——8字节的CAN帧根本塞不下。所以:
- FV只发低4bit:接收方用自己的计数器+收到的低4bit重构完整FV
- MAC只发高28bit:截断后的MAC仍能提供足够安全强度
8字节 vs 64字节 vs 以太网:SecOC 在三种总线上的配置
总线帧长决定了安全信息的"挤出"空间——这是SecOC落地最实际的差异:
| 总线 | 帧长 | 典型配置 | 载荷 | 特点 |
|---|---|---|---|---|
| Classic CAN | 8字节 | Profile 3:FV截断4bit + MAC截断28bit | 约3字节 | 镣铐最重,只能保护关键报文 |
| Classic CAN | 8字节 | Profile 1:FV截断8bit + MAC截断24bit | 约4字节 | 中间配置,FV步进更大 |
| CAN-FD | 64字节 | FV 1字节 + MAC 7字节 | 56字节 | 空间宽裕,安全信息可放宽 |
| 车载以太网 | 100/1000BASE-T1 | 三种Profile可配,甚至叠加TLS/IPsec | 充足 | 游刃有余,可多层安全 |
Classic CAN(8字节)——戴着镣铐跳舞:
- AUTOSAR Profile 3(JASPAR):FV截断4bit + MAC截断28bit,载荷只剩约3字节
- Profile 1:8bit FV + 24bit MAC,FV步进更大但MAC弱一点
- 只能保护最高优先级的报文(安全功能信号),且要精打细算每1bit
CAN-FD(64字节)——空间宽裕:
- 典型配置:FV取1字节 + MAC取7字节(共8字节安全信息),载荷56字节
- 发送时:SecOC收到56字节报文,加8字节安全信息 → 64字节SIPDU发出
- 接收时:64字节报文 → 验签 → 转出56字节给上层
- 载荷是Classic CAN的近19倍,FV/MAC都能放宽,保护范围可以更大
车载以太网——游刃有余:
- SOME/IP + SecOC,FV/MAC可配到更长(甚至完整128bit MAC)
- 还能叠加TLS/IPsec(第7篇的双向认证在以太网上也能用)
- 适合域控/网关的大流量场景
工程结论:Classic CAN上SecOC是"精打细算"(每个bit都金贵);CAN-FD上SecOC是"正常发挥";以太网上SecOC可以"豪华配置"甚至叠加多层。选总线时就要想清楚SecOC的配置空间。
3、 收发流程:认证 vs 验证
发送方(认证):
- 取新鲜度值FV(单调递增计数器/时间戳)
- 调 CMAC 计算 MAC:CMAC(K, 消息ID+载荷+FV)
- 组装安全报文:载荷 + FV低4bit + MAC高28bit
- 发到总线
接收方(验证):
- 从报文中取FV低4bit + MAC
- 用本地计数器+收到的低4bit重构完整FV
- 重算MAC,与收到的比对
- 验证失败 → 静默丢弃(不送上层软件组件)
"静默丢弃"是关键设计——验证失败的消息直接不上层,接收软件组件根本看不到伪造报文,从源头阻断。
4、新鲜度值(FV):防重放的核心
重放攻击:攻击者录下一条合法报文(比如"解锁车门"),过会儿再发一次——没有防重放机制,ECU会照单全收。
新鲜度值就是计数器:每条报文带一个单调递增的FV,接收方记住"上次收到的最新值"——重放的旧报文FV小于当前值,验证失败。
AUTOSAR 的FV构造(常见配置,多计数器组合):
- Trip Counter(行程计数器):每次车辆启动+1,由网关广播同步
- Reset Counter(复位计数器):固定间隔+1,也在同步报文中
- Message Counter(消息计数器):每条消息+1,复位时清零
- Reset Flag:复位计数器的低几位
同步报文:由指定的同步节点(通常是网关)周期性广播 Trip Counter 和 Reset Counter,让全网节点FV保持同步。同步报文本身也被MAC保护——防止攻击者伪造同步报文搞乱FV。
工程难点提示:FV同步是最容易出问题的地方——ECU复位、休眠唤醒、总线恢复后,如果FV没重新同步,就会出现"合法报文被误杀"或"重放窗口打开"。这是SecOC落地最常见的坑。
5、密钥管理:SecOC 的"命门"
MAC是对称密码(发送方接收方用同一个密钥K),所以密钥安全 = SecOC 安全:
密钥管理要点:
- 密钥必须存HSM(硬件安全模块)——呼应第5篇:软件存密钥=钥匙贴在门上
- 密钥通过AUTOSAR Crypto Stack执行(CSM/CryIf/加密驱动)
- 密钥按车辆/ECU组独立分发:整车下线刷写时静态分配,或云端动态下发
- 更换ECU时全网重配密钥:新密钥用已有密钥加密传输,防止旁观重配窃取密钥
对TBOX的含义:TBOX 的 MCU(如 S32K144)内置 HSM,SecOC 的 CMAC 计算和密钥存储都在 HSM 里做——这正是第5篇说"MCU侧HSM做安全启动和密钥管理"的具体应用场景之一。
6、SecOC 防的三类攻击
| 攻击 | 原理 | SecOC如何防 |
|---|---|---|
| 重放 | 重发旧报文 | 新鲜度值单调递增,旧值验证失败 |
| 伪造 | 冒充发送方发指令 | MAC验证失败(没有密钥伪造不了) |
| 篡改 | 改报文载荷 | 载荷一变,MAC就不匹配 |
但注意:SecOC不防窃听(CAN明文广播,MAC不加密数据)——要防窃听需要报文数据加密(CanTransceiver/报文加密是另一套方案)。SecOC解决的是"数据来源可信",不是"数据内容保密"。
7、哪些报文需要SecOC?——TARA来决定
不是所有CAN报文都要SecOC保护(8字节挤得太紧,全保护不现实)。哪些报文受保护,是风险评估(TARA)的结果:
优先保护的报文:
- 涉及安全功能的信号(刹车、转向、动力——伪造它们直接威胁人身安全)
- 远程可触发的指令(TBOX下发的车门解锁、远程启动)
- 关键配置参数(标定、密钥)
可以不保护的:
- 非安全相关信号(车窗位置、座椅调节)
- 低风险数据
法规视角:UN R155 Annex 5 和 GB 44495 都要求对车内网络安全威胁采取缓解措施——SecOC就是R155评估里"车内网络报文伪造"威胁的标准缓解方案之一。
8、TBOX在SecOC体系里的角色
TBOX 在车内网络中是**“敏感节点”**——它同时连接车外(蜂窝/WiFi)和车内(CAN总线),是攻击者进入总线的"跳板":
TBOX的SecOC职责:
- 下行的安全报文(TBOX→ECU):车门解锁、远程启动等指令,必须SecOC保护——防止攻击者借TBOX的通信通道向ECU发伪造指令
- 上行报文验证(ECU→TBOX):TBOX接收的ECU报文,也要验证MAC——防止伪造ECU数据欺骗TBOX
- 配合密钥管理:TBOX的HSM存储SecOC密钥,执行CMAC计算
一句话:TBOX是车内总线的"城门",SecOC是城门的"验兵牌"——进城(总线)的每条关键消息都要验明正身。
9、SecOC车内通信安全总结
| 需求(法规/客户规范) | 对应解决方案 |
|---|---|
| GB 44495 7.2.9 内部网络区域划分+边界防护 | 车内信息安全域划分(客户需求6.1.1) |
| 客户需求 6.1.2 车内通信身份标签与验证 | 报文加载身份标识,验证发送方身份 |
| 客户需求 6.2.1 认证密钥和加密密钥分离 | 密钥管理:认证密钥≠加密密钥 |
| 客户需求 6.2.2 车内关键数据通信防护 | SecOC:加密/认证/抗重放 |
| 客户需求 6.2.4 消息校验和认证 | SecOC MAC验证(CMAC-AES128) |
| 客户需求 6.3.1 车内网络数据状态监测 | 总线监测+异常告警 |
10、给TBOX工程师的5条实战建议
- SecOC不是"选配"是"该配":涉及安全的报文(车控指令、关键配置)必须保护,UN R155/GB 44495评估会查
- 密钥必须进HSM:SecOC密钥放软件=白搭,MCU内置HSM(如S32K144)就是干这个的
- 新鲜度同步是最大坑:ECU复位/休眠唤醒后FV要重新同步,落地时重点测这个场景
- 按TARA决定保护范围:不是所有报文都保护,先保护"伪造了会出人命的"
- 按总线选配置:Classic CAN(8字节)用Profile 3(4bit FV+28bit MAC)精打细算;CAN-FD(64字节)用1字节FV+7字节MAC,载荷56字节;以太网可配更宽裕甚至叠加TLS——选总线时就要想清楚SecOC配置空间
11、系列进度
这是《TBOX信息安全实战系列》第8篇。系列全景:
| 篇 | 主题 | 状态 |
|---|---|---|
| 第1篇 | 国内法规:GB 44495 全景解读 | ✅ |
| 第2篇 | 国内外法规对比 | ✅ |
| 第3篇 | 网络安全需求怎么定(双客户对标) | ✅ |
| 第4篇 | 客户需求细节全拆解 + 与国标对比 | ✅ |
| 第5篇 | 硬件安全:SE/HSM/TEE对比+需求映射 | ✅ |
| 第6篇 | 系统/数据安全:SELinux+数据分级 | ✅ |
| 第7篇 | 车云通信安全:双向认证 | ✅ |
| 第8篇 | 车内通信安全:SecOC | ✅ 本篇 |
| 第9篇 | 安全启动+安全升级 | 待写 |
| 第10篇 | 渗透测试+IDPS+运营闭环 | 待写 |
下一篇:TBOX安全启动+安全升级实操——从信任根到OTA,逐级验签+防降级+失败恢复。
❤️文末福利❤️
1、关注【擎天柱工坊】获取更多免费学习视频和资料
2、私信回复【汽车硬件设计】领取原理图、PCB、学习视频