一、硬件安全概述:威胁、攻击面与设计原则

各位好,我是老周。在芯片设计这行摸爬滚打十几年,今天咱们聊聊硬件安全。说实话,早些年我做设计时,安全就是个“锦上添花”的东西——功能跑通、时序收敛、功耗达标,基本就交差了。直到有一次,我在一个IoT芯片项目里,发现攻击者通过电源侧信道就把AES密钥给扒了出来……嗯,从那以后,我再也不敢轻视硬件安全了。

1.1 硬件安全威胁分类

硬件安全威胁,说白了就是攻击者能从物理层面或硬件接口上,对你的芯片做些什么“坏事”。我个人习惯把它们分成四大类:

威胁类别 典型攻击方式 攻击目标
物理攻击 探针、FIB(聚焦离子束)、芯片开盖 直接读取内部信号、修改金属连线
侧信道攻击 功耗分析、电磁辐射、时序分析 窃取密钥、敏感数据
故障注入 时钟毛刺、电压毛刺、激光照射 跳过安全校验、篡改执行流
硬件木马 RTL后门、GDS修改、测试模式滥用 泄露数据、破坏功能

关键认知:软件漏洞可以打补丁,硬件漏洞一旦流片,基本就是“物理级”的永久伤害。所以硬件安全必须从设计阶段就开始考虑。

1.2 攻击面分析

攻击面,就是攻击者能“碰到”芯片的所有入口。我建议你从三个维度去梳理:

  • 外部接口:JTAG、SPI、I2C、UART、USB——这些是攻击者的首选目标。我记得有个项目,攻击者通过JTAG的边界扫描链,直接把整个Flash内容读了出来。
  • 内部总线:AHB、AXI、NoC——一旦攻击者控制了某个master,就能遍历整个地址空间。
  • 物理边界:电源引脚、时钟输入、复位信号——这些是故障注入的“重灾区”。

你想想看,一个芯片可能有几十个引脚、上百个内部寄存器、数不清的状态机。攻击者不需要攻破所有点,只要找到一个薄弱环节就够了。

避坑指南:我曾经在一个安全芯片项目中,把所有精力都放在了加密引擎上,结果攻击者通过一个未使用的测试模式引脚,直接绕过了整个安全域。所以,攻击面分析一定要覆盖“所有”硬件资源,包括那些你以为“没人会用”的调试接口。

1.3 安全设计原则

做硬件安全设计,不是堆砌一堆加密模块就完事了。我总结了几个核心原则,每个都是踩过坑才真正理解的:

  1. 最小权限原则:每个硬件模块只拥有完成其功能所需的最小权限。比如,一个DMA控制器,不应该能访问安全存储区。
  2. 纵深防御:不要依赖单一安全机制。即使攻击者突破了第一道防线,还有第二道、第三道等着他。
  3. 安全默认:芯片上电后的默认状态,必须是最安全的状态。所有安全相关的配置,默认都应该是“关闭”或“锁定”。
  4. 失效安全:当安全机制自身发生故障时,系统应该进入一个已知的安全状态,而不是暴露所有数据。
  5. 可审计性:关键安全事件必须能被记录和追踪。比如,谁在什么时间访问了安全存储区。

警告:不要为了性能而牺牲安全。我见过太多设计,为了省几个时钟周期,把安全校验给“优化”掉了。结果呢?流片回来,性能是达标了,但安全测试一跑就崩。记住,安全不是功能,它是芯片的“底线”。

1.4 硬件安全设计流程

下面这张图,是我个人在项目中常用的硬件安全设计流程。它把安全威胁、攻击面分析和设计原则串在了一起:

硬件安全设计流程 威胁建模 STRIDE / PASTA 攻击面分析 接口 / 总线 / 物理 安全架构设计 隔离 / 权限 / 加密 安全实现 RTL / DFT / 布局 安全验证 形式化 / 渗透测试 安全评估 CC / FIPS 认证 迭代反馈(安全修复) 设计要点: 1. 威胁建模必须在架构阶段完成,不要等RTL写完了再补。 2. 安全验证不是“跑个仿真”就完事,需要专门的渗透测试用例。 3. 安全评估结果要反馈到下一轮迭代,形成闭环。

1.5 常见误区与避坑

最后,我分享几个硬件安全设计中的常见误区,都是真金白银换来的教训:

  • 误区一:安全就是加个加密模块——加密只是安全的一部分。密钥管理、随机数生成、安全存储、生命周期管理,缺一不可。
  • 误区二:安全验证可以放到最后做——千万别!安全验证需要专门的测试向量和攻击场景,等到流片前再补,根本来不及。
  • 误区三:开源IP可以直接用——开源IP的安全质量参差不齐。我建议至少做一次安全审计,看看有没有后门或已知漏洞。
  • 误区四:安全机制越多越好——过多的安全机制会增加面积、功耗和延迟,甚至引入新的攻击面。安全设计要“恰到好处”,不是“多多益善”。

总结一下:硬件安全不是某个模块的事,它是整个芯片设计流程的一部分。从威胁建模到安全评估,每个环节都要有安全意识。记住,攻击者比你想象的更有耐心,也更有创造力。我们能做的,就是让他们的攻击成本高到“不值得”。