1. 硬件安全概述:威胁模型、攻击面与设计目标

各位同学,咱们今天聊硬件安全。说实话,这个领域在十年前还是个「小众话题」,大多数工程师觉得安全是软件的事,硬件嘛——只要功能对、时序过、功耗低就行了。但我在项目中吃过亏之后,才真正意识到:硬件才是安全的根。你软件层做得再花哨,底层芯片被人动了手脚,一切归零。

这一章,我们先搭框架。把威胁模型、攻击面、安全目标这三个概念理清楚。后面每一章都会反复用到这些基础。

1.1 硬件安全威胁模型

什么叫威胁模型?说白了,就是谁、在什么位置、用什么手段、想破坏什么。做安全设计,第一步不是写代码,而是画威胁模型。我习惯用一张表把威胁方列清楚:

威胁方 物理接触 典型手段 攻击目标
芯片代工厂 完全接触晶圆 插入硬件木马、修改光罩 窃取密钥、破坏功能
板级攻击者 接触PCB 探针、侧信道、故障注入 提取固件、绕过认证
远程软件攻击者 无物理接触 利用固件漏洞、JTAG后门 提权、持久化控制
内部人员 设计/测试阶段 植入后门、泄露文档 窃取IP、破坏产品

你可能会问:「代工厂不是合作伙伴吗?为什么要防他们?」嗯,这个问题我当年也问过。实际情况是——信任是分层的。你委托代工厂生产芯片,不代表你可以把根密钥裸片交给他们。我在一个IoT项目里就遇到过:某批次芯片的OTP区域被代工厂多写了一个测试向量,导致量产设备全部暴露调试接口。后来查出来是产线脚本没清干净,但损失已经造成了。

⚠️ 避坑指南: 我曾经以为「签了NDA就万事大吉」,结果被代工厂的「额外测试步骤」坑过一次。从那以后,我坚持在设计中加入安全边界——即使代工厂完全接触晶圆,也无法直接提取根密钥。

1.2 攻击面分析

攻击面,就是攻击者能碰到你的所有入口。硬件攻击面比软件多得多——你想想看,软件只有网络和本地接口,硬件还有电源、时钟、电磁辐射、温度……

我习惯把攻击面分成三类:

  • 物理接口:JTAG/SWD、UART、I²C、SPI、USB、以太网PHY。这些是直接可接触的引脚。
  • 侧信道泄露:功耗分析(SPA/DPA)、电磁辐射(EMA)、时序分析、缓存命中率。
  • 故障注入:时钟毛刺、电压毛刺、激光照射、电磁脉冲、温度冲击。

举个例子。我在做一款金融支付终端时,攻击者只需要一根探针接触PCB上的SPI Flash引脚,就能把整个固件dump出来。为什么?因为设计时没考虑物理隔离,Flash和主控之间的走线直接暴露在板边。后来我们加了加密存储+物理屏蔽层,才堵上这个口子。

核心原则: 攻击面分析不是一次性的。每次改版、换料、升级固件,都要重新审视。我见过太多团队「设计时画了攻击面,流片后就不管了」——结果新加的一个调试接口成了突破口。

1.3 安全设计目标:CIA三元组

硬件安全的目标,绕不开三个词:机密性(Confidentiality)、完整性(Integrity)、可用性(Availability)。简称CIA。你可能会觉得这是信息安全的老生常谈,但在硬件层面,每个目标的实现方式完全不同。

目标 硬件实现手段 常见攻击
机密性 硬件加密引擎、PUF、安全存储、总线加密 侧信道分析、探针读取、JTAG dump
完整性 安全启动(Secure Boot)、HMAC、eFuse校验 固件篡改、回滚攻击、故障注入绕过校验
可用性 看门狗、电压监测、时钟监测、冗余设计 时钟毛刺导致死锁、电压跌落触发复位

这里我想特别强调一下可用性。很多硬件工程师觉得「可用性就是系统不宕机」,但在安全语境下,可用性还包括抗拒绝服务(DoS)。比如攻击者通过注入故障让安全芯片进入死循环,导致整个系统无法启动——这算不算安全事件?当然算。我在一个汽车ECU项目里就遇到过:攻击者通过CAN总线发送特定报文,触发安全芯片的异常中断处理,导致看门狗无法喂狗,系统反复重启。

💡 个人经验: 设计安全硬件时,我习惯先列一个「最坏情况清单」——如果攻击者控制了电源、时钟、温度、引脚,系统还能不能守住CIA?如果有一项守不住,就要加硬件防护。

1.4 知识结构总览

下面这张图,把本章的核心逻辑串起来了。你可以把它当作后续学习的导航图:

硬件安全知识结构总览 硬件安全概述 威胁模型 攻击面分析 CIA安全目标 代工厂 板级攻击者 远程攻击者 内部人员 物理接口 侧信道 故障注入 电磁/温度 机密性 完整性 可用性 三者相互制约:增强机密性可能降低可用性(如加密延迟),需权衡设计 硬件安全设计 = 威胁模型 × 攻击面覆盖 × CIA保障

1.5 本章小结

这一章我们只做了一件事:建立硬件安全的全局视角。威胁模型告诉你「谁在对面」,攻击面告诉你「哪里能打」,CIA告诉你「要守什么」。这三者缺一不可。

我个人习惯,每次启动一个新项目,第一周就是画这三张图。画完之后,团队对「我们要防谁、防什么、怎么防」就有了共识。后面再谈具体技术,才不会跑偏。

记住一句话: 没有威胁模型的安全设计,就是瞎忙活。没有攻击面分析的安全设计,就是自欺欺人。没有CIA目标的安全设计,就是空中楼阁。