售后服务
我们是专业的

Day 35 知识点1:信息安全防护技术深度解析 | 从SecOC加密到安全启动的完整防线

核心定位:信息安全防护不是单一技术,而是多层防御体系。本文深度拆解汽车信息安全的五大防护技术:SecOC报文加密、安全网关、安全启动、入侵检测系统、密钥管理,用真实工程案例说明"为什么一个128位MAC可以阻挡千万次CAN攻击尝试"。


那个被破解的诊断服务 | 从27服务漏洞看防护需求

2020年:某豪华品牌的安全危机

2020年,安全研究人员发现某欧洲豪华品牌ECU的UDS 27服务(种子密钥解锁)存在弱点:

政击流程

Step 1:请求种子
发送:27 01
响应:67 01 AB CD EF 12(4字节种子)

Step 2:破解密钥算法
算法太简单:key = (seed XOR 0x12345678) + 0xABCD
研究人员通过逆向工程发现了算法

Step 3:发送破解后的密钥
发送:27 02 [calculated_key]
响应:67 02(解锁成功!)

Step 4:随意操作ECU
可以写VIN码、修改里程、刷写固件...

根本原因

  1. 密钥算法过于简单,容易被逆向
  2. 未限制解锁尝试次数
  3. 种子长度仅为4字节(只有42亿种组合)

后果

  • 所有搭载该ECU的车型都可被轻易解锁
  • 需要OTA更新所有车辆的ECU固件
  • 这个案例揭示:单纯的种子密钥算法已经不够用,必须引入加密认证机制

防护技术1:SecOC报文加密与认证

什么是SecOC?

SecOC = Secure Onboard Communication

(安全车载通信)

SecOC是AUTOSAR定义的CAN总线安全通信协议,通过在CAN报文中增加MAC(Message Authentication Code,消息认证码)新鲜度值(Freshness Value),实现三大安全目标:

  1. 认证性(Authentication):确认报文来自合法节点
  2. 完整性(Integrity):确保报文未被篡改
  3. 新鲜性(Freshness):防止重放攻击

SecOC报文结构

普通CAN报文

+--------+-------------+
| CAN ID |   Data (8)  |
+--------+-------------+
| 0x245  | 01 23 45 67 |
|        | 89 AB CD EF |
+--------+-------------+

SecOC加密后

+--------+------------------+---------+-----------+
| CAN ID | Payload (5 bytes)| FV (1)  | MAC (2)   |
+--------+------------------+---------+-----------+
| 0x245  | 01 23 45 67 89   | 3A      | BC DE     |
+--------+------------------+---------+-----------+
         ↑                  ↑       ↑
      原始数据         新鲜度值  认证码

关键字段说明

1. Freshness Value(FV,新鲜度值)

  • 作用:保证每条报文的唯一性,防止重放攻击
  • 实现:通常为递增计数器或时间戳
  • 长度:1-8字节(具体看CAN剩余带宽)

示例

第1次发送:FV = 0x00
第2次发送:FV = 0x01
第3次发送:FV = 0x02
...
第256次发送:FV = 0xFF
第257次发送:FV = 0x00(循环)

防重放原理

  • 攻击者录制FV=0x05的报文
  • 当前系统已到FV=0x10
  • 重放旧报文时,接收方检测FV过旧,丢弃报文

2. MAC(Message Authentication Code)

  • 作用:验证报文的认证性和完整性
  • 算法:通常使用CMAC-AES128或HMAC-SHA256
  • 长度:2-16字节(通常2-4字节平衡安全与带宽)

MAC计算公式

MAC = CMAC-AES128(
    Key,                    // 共享密钥(128位)
    CAN_ID || Payload || FV // 要保护的数据
)

取前24位(3字节)作为MAC放入报文

安全强度分析

  • 24位MAC:暴力破解需要1677万次尝试
  • 32位MAC:暴力破解需要42.9亿次尝试
  • 假设CAN总线每秒发送1000次,破觥32位MAC需要497天

SecOC工作流程

发送方:

1. 准备原始数据:
   Payload = [01 23 45 67 89]

2. 获取新鲜度值:
   FV = FreshnessCounter++  // 当前FV=0x3A

3. 计算MAC:
   Input = CAN_ID || Payload || FV
         = 0x245 || 01 23 45 67 89 || 3A
   MAC = CMAC-AES128(SharedKey, Input)
       = BC DE 7F ...(取16字节)
   取前2字节:MAC_truncated = BC DE

4. 组装SecOC报文:
   SecOC_Message = Payload || FV || MAC_truncated
                 = 01 23 45 67 89 3A BC DE

5. 发送到CAN总线

接收方:

1. 接收SecOC报文:
   Received = 01 23 45 67 89 3A BC DE

2. 解析字段:
   Payload = 01 23 45 67 89
   FV      = 3A
   MAC_rx  = BC DE

3. 验证FV新鲜度:
   if (FV <= LastAcceptedFV) {
       丢弃报文;  // 可能是重放攻击
   }

4. 重新计算MAC:
   Input = CAN_ID || Payload || FV
   MAC_calc = CMAC-AES128(SharedKey, Input)
            = BC DE 7F ...
   MAC_calc_truncated = BC DE

5. 比对MAC:
   if (MAC_calc_truncated == MAC_rx) {
       接受报文;  // 认证通过
       LastAcceptedFV = FV;
   } else {
       丢弃报文;  // 认证失败,可能被篡改
   }

SecOC在实际车型中的应用

大众MEB平台(ID.3、ID.4等):

  • 关键ECU之间的通信已采用SecOC
  • 加密报文包括:动力系统控制、诊断指令
  • MAC长度:3字节(24位)

宝马G20

  • ADAS域控与底盘域控之间的通信采用SecOC
  • 防止转向、制动指令被伪造

特斯拉Model 3/Y(部分关键报文)

  • 网关与BMS之间的高压控制指令
  • 防止黑客通过IVI中控屏攻入后控制高压系统

SecOC的挑战与权衡

挑战1:带宽占用

  • 原始8字节报文 → 加寅后可能增加3-4字节
  • 增幅37.5-50%的带宽消耗
  • CAN总线负载本就已经40-50%,加密后可能超载

解决方案

  • 选择性加密:仅对关键安全报文加密(10-20%的报文)
  • CAN-FD升级:从CAN升级到CAN-FD(5Mbps),带宽提升5倍

挑战2:实时性影响

  • AES-128加密计算耗时:约50-100μs
  • 关键安全功能要求<10ms响应
  • 对于高频报文(如每10ms一次),加密可能影响实时性

解决方案

  • 使用硬件加密引擎(HSM),加快计算速度
  • 高频低延迟报文仅加MAC,不加密载荷

挑战3:密钥管理复杂度

  • 每个加密通道都需要一个共享密钥
  • 一辆车可能有50+个ECU,需要管理数百个密钥
  • 密钥更新、吹销、存储都是挑战

解决方案

  • 在HSM中安全存储密钥
  • 定期通过OTA更新密钥

防护技术2:安全网关与防火墙

什么是安全网关?

安全网关(Security Gateway)是车内网络的“边境守卫”,位于不同安全域之间,负责:

  1. 报文过滤:阻挡非法报文
  2. 访问控制:基于黑白名单管理通信
  3. 协议转换:CAN、CAN-FD、以太网之间的转换
  4. 入侵检测:检测异常通信模式

车内网络分区架构

现代智能车辆通常将网络分为多个安全域:

╔════════════════════════╗
║  外部网络(互联网)       ║
║  4G/5G、Wi-Fi、蓝牙      ║
╠════════════════════════╣
         │
    [防火墙/IDS]
         │
╔════════════════════════╗
║  娱乐域(低安全)        ║
║  IVI、诊断接口            ║
╠════════════════════════╣
         │
  [安全网关] ← 最关键
         │
╔════════════════════════╗
║  关键安全域(高安全)    ║
║  动力、底盘、ADAS         ║
╠════════════════════════╣

安全网关的四大防护机制

机制1:黑白名单过滤

白名单模式:仅允许预定义的报文通过

// 白名单配置示例
const WhiteList[] = {
    {CAN_ID: 0x100, Direction: InfotainmentToPowertrain, Allow: false},
    {CAN_ID: 0x245, Direction: PowertrainToInfotainment, Allow: true},
    {CAN_ID: 0x3A0, Direction: Bidirectional, Allow: true},
};

// 网关过滤逻辑
if (IsInWhiteList(ReceivedMessage)) {
    ForwardMessage();  // 转发
} else {
    DropMessage();     // 丢弃
    LogSecurityEvent(); // 记录安全事件
}

黑名单模式:阻挡已知危险报文

// 黑名单配置示例
const BlackList[] = {
    {CAN_ID: 0x7DF, Reason: "UDS诊断请求"},
    {CAN_ID: 0x000, Reason: "洪水攻击常用ID"},
};

if (IsInBlackList(ReceivedMessage)) {
    DropMessage();
    TriggerAlert();    // 触发告警
}

机制2:报文频率限制

目的:防止洪水攻击(DoS Attack)

// 频率限制配置
const RateLimitConfig[] = {
    {CAN_ID: 0x100, MaxRate: 100},  // 最多100帧/秒
    {CAN_ID: 0x245, MaxRate: 50},   // 最多50帧/秒
};

// 频率检测逻辑
if (GetMessageRate(CAN_ID) > MaxRate) {
    DropMessage();
    LogAnomaly("Rate Limit Exceeded");
}

实际效果

  • 正常情况:某报文每100ms发送一次(10Hz)
  • 攻击场景:攻击者每1ms发送一次(1000Hz)
  • 网关行为:识别异常,丢弃超出限制的报文

机制3:深度包检测(DPI)

目的:检测报文载荷中的异常数据

// 检测转向角度是否合理
if (CAN_ID == STEERING_ANGLE_ID) {
    int16_t angle = ParseSteeringAngle(Data);
    if (angle < -540 || angle > 540) {
        // 转向角度超出物理极限(±540°)
        DropMessage();
        LogAnomaly("Invalid Steering Angle");
    }
}

// 检测车速是否合理
if (CAN_ID == VEHICLE_SPEED_ID) {
    uint16_t speed = ParseVehicleSpeed(Data);
    if (speed > 300) {  // 300 km/h
        // 车速超出合理范围
        DropMessage();
    }
}

机制4:异常行为检测

目的:检测与正常模式不符的通信行为

示例1:检测新CAN ID

// 学习模式:记录正常运行时的所有CAN ID
LearnedIDs = {0x100, 0x245, 0x3A0, ...};

// 检测模式:检测未见过的ID
if (!IsInLearnedIDs([ReceivedMessage.ID](http://ReceivedMessage.ID))) {
    LogAnomaly("Unknown CAN ID Detected");
    // 可选:丢弃或仅记录
}

示例2:检测时序异常

// 正常时序:车辆启动时的报文顺序
NormalSequence = [
    BMS_Wakeup,      // 步骤1:BMS唤醒
    VCU_Init,        // 步骤2:VCU初始化
    Motor_Ready,     // 步骤3:电机就绪
];

// 检测异常:如果先收到Motor_Ready,再Motor收到BMS_Wakeup
if (OutOfSequence(ReceivedMessages)) {
    LogAnomaly("Abnormal Message Sequence");
}

防护技术3:安全启动(Secure Boot)

什么是安全启动?

安全启动确保ECU在启动时仅运行经过验证的合法固件,防止恶意固件被加载。

为什么需要安全启动?

  • 防止攻击者植入后门固件
  • 防止固件降级攻击(刷入旧版本漏洞固件)
  • 防止供应链攻击(生产环节植入恶意代码)

安全启动流程

步骤1:上电,硬件初始化
  ↓
步骤2:Bootloader启动(固化在ROM中,不可篡改)
  ↓
步骤3:读取应用固件及其数字签名
  Firmware_Image + Digital_Signature
  ↓
步骤4:从HSM中读取公钥
  Public_Key(存储在硬件安全模块中)
  ↓
步骤5:验证数字签名
  if (RSA_Verify(Public_Key, Firmware_Image, Digital_Signature) == VALID) {
      签名有效 → 继续
  } else {
      签名无效 → 停止启动,进入故障模式
  }
  ↓
步骤6:验证固件版本(防降级)
  if (Firmware_Version >= Minimum_Version) {
      版本合法 → 继续
  } else {
      版本过低 → 拒绝启动
  }
  ↓
步骤7:加载并执行应用固件
  ↓
ECU正常运行

数字签名原理

RSA签名与验证

==== 签名过程(车企端)====
1. 计算固件Hash:
   Hash = SHA-256(Firmware_Image)

2. 用私钥签名:
   Signature = RSA_Sign(Private_Key, Hash)

3. 将签名附加到固件:
   Signed_Firmware = Firmware_Image || Signature

==== 验证过程(ECU端)====
1. 分离固件和签名:
   Firmware_Image, Signature = Parse(Signed_Firmware)

2. 计算固件Hash:
   Hash_calc = SHA-256(Firmware_Image)

3. 用公钥验证签名:
   Hash_decrypted = RSA_Decrypt(Public_Key, Signature)

4. 比对Hash:
   if (Hash_calc == Hash_decrypted) {
       签名有效,固件可信
   } else {
       签名无效,固件被篡改
   }

安全启动在实际车型中的应用

特斯拉

  • 所有ECU均采用安全启动
  • 使用RSA-2048或更高强度签名
  • OTA更新包也必须经过签名验证

大众MEB平台

  • 域控制器采用安全启动
  • 支持防降级机制(版本回滚保护)

蔚来ET7

  • ADAM超算平台采用安全启动
  • 支持多级验证(Bootloader→OS→Application)

大家不知道的隐藏知识

1. 为什么SecOC的FV不能简单用时间戳?

问题

  • CAN总线上没有全局同步时钟
  • 每个ECU的本地时钟可能存在漂移(每小时差距数秒)
  • 如果用绝对时间戳,可能导致合法报文被误判为重放

解决方案

  • 使用相对FV:递增计数器,不依赖绝对时间
  • 发送方和接收方各自维护计数器
  • 允许一定的FV窗口(如±10),容忍报文乱序

2. HSM(硬件安全模块)究竟是什么?

HSM是集成在MCU内部的专用安全协处理器,负责:

  • 密钥存储:密钥存储在HSM内部,软件无法直接读取
  • 加密计算:加速AES、RSA等加密算法
  • 安全启动:存储公钥和Bootloader
  • 防篡改:检测物理攻击(如电压攻击、时钟攻击)

主流HSM芯片

  • Infineon AURIX TC3xx:集成HSM,支持AES-256、RSA-2048
  • NXP S32K3xx:集成HSE(Hardware Security Engine)
  • Renesas RH850:集成ICUMHA安全模块

3. 为什么特斯拉被黑客攻破后,不立即开启SecOC?

原因1:已交付车辆无法升级硬件

  • 老款ECU可能不支持HSM
  • 无法通过OTA增加硬件加密引擎

原因2:CAN总线带宽不足

  • Model 3/Y的CAN总线负载已达50%
  • 全部开启SecOC可能导致带宽超载

解决方案

  • 仅对关键报文开启SecOC(如高压控制、诊断指令)
  • 新车型采用CAN-FD,从设计之初就考虑SecOC

关键要点总结

SecOC三大目标:认证性、完整性、新鲜性

FV+MAC机制:FV防重放,MAC防篡改,两者缺一不可

安全网关:边界防护的关键,五大机制多层防御

安全启动:防止恶意固件,根系统防线

HSM不可或缺:硬件安全是软件安全的基础

平衡艺术:安全、性能、成本三方权衡

分层防御:单一技术无法全面防护,必须多层组合


作业

  1. 计算:如果你公司车型的CAN总线有50个关键报文需要加密,采用24位MAC,会增加多少带宽消耗?
  2. 设计:为你公司车型设计一个安全网关的黑白名单策略
  3. 研究:Bootloader如何存储在ROM中并确保不可篡改
未经允许不得转载:似水流年 » Day 35 知识点1:信息安全防护技术深度解析 | 从SecOC加密到安全启动的完整防线