一、硬件安全概述:威胁、攻击面与设计原则
各位好,我是老周。在芯片设计这行摸爬滚打十几年,今天咱们聊聊硬件安全。说实话,早些年我做设计时,安全就是个“锦上添花”的东西——功能跑通、时序收敛、功耗达标,基本就交差了。直到有一次,我在一个IoT芯片项目里,发现攻击者通过电源侧信道就把AES密钥给扒了出来……嗯,从那以后,我再也不敢轻视硬件安全了。
1.1 硬件安全威胁分类
硬件安全威胁,说白了就是攻击者能从物理层面或硬件接口上,对你的芯片做些什么“坏事”。我个人习惯把它们分成四大类:
| 威胁类别 | 典型攻击方式 | 攻击目标 |
|---|---|---|
| 物理攻击 | 探针、FIB(聚焦离子束)、芯片开盖 | 直接读取内部信号、修改金属连线 |
| 侧信道攻击 | 功耗分析、电磁辐射、时序分析 | 窃取密钥、敏感数据 |
| 故障注入 | 时钟毛刺、电压毛刺、激光照射 | 跳过安全校验、篡改执行流 |
| 硬件木马 | RTL后门、GDS修改、测试模式滥用 | 泄露数据、破坏功能 |
关键认知:软件漏洞可以打补丁,硬件漏洞一旦流片,基本就是“物理级”的永久伤害。所以硬件安全必须从设计阶段就开始考虑。
1.2 攻击面分析
攻击面,就是攻击者能“碰到”芯片的所有入口。我建议你从三个维度去梳理:
- 外部接口:JTAG、SPI、I2C、UART、USB——这些是攻击者的首选目标。我记得有个项目,攻击者通过JTAG的边界扫描链,直接把整个Flash内容读了出来。
- 内部总线:AHB、AXI、NoC——一旦攻击者控制了某个master,就能遍历整个地址空间。
- 物理边界:电源引脚、时钟输入、复位信号——这些是故障注入的“重灾区”。
你想想看,一个芯片可能有几十个引脚、上百个内部寄存器、数不清的状态机。攻击者不需要攻破所有点,只要找到一个薄弱环节就够了。
避坑指南:我曾经在一个安全芯片项目中,把所有精力都放在了加密引擎上,结果攻击者通过一个未使用的测试模式引脚,直接绕过了整个安全域。所以,攻击面分析一定要覆盖“所有”硬件资源,包括那些你以为“没人会用”的调试接口。
1.3 安全设计原则
做硬件安全设计,不是堆砌一堆加密模块就完事了。我总结了几个核心原则,每个都是踩过坑才真正理解的:
- 最小权限原则:每个硬件模块只拥有完成其功能所需的最小权限。比如,一个DMA控制器,不应该能访问安全存储区。
- 纵深防御:不要依赖单一安全机制。即使攻击者突破了第一道防线,还有第二道、第三道等着他。
- 安全默认:芯片上电后的默认状态,必须是最安全的状态。所有安全相关的配置,默认都应该是“关闭”或“锁定”。
- 失效安全:当安全机制自身发生故障时,系统应该进入一个已知的安全状态,而不是暴露所有数据。
- 可审计性:关键安全事件必须能被记录和追踪。比如,谁在什么时间访问了安全存储区。
警告:不要为了性能而牺牲安全。我见过太多设计,为了省几个时钟周期,把安全校验给“优化”掉了。结果呢?流片回来,性能是达标了,但安全测试一跑就崩。记住,安全不是功能,它是芯片的“底线”。
1.4 硬件安全设计流程
下面这张图,是我个人在项目中常用的硬件安全设计流程。它把安全威胁、攻击面分析和设计原则串在了一起:
1.5 常见误区与避坑
最后,我分享几个硬件安全设计中的常见误区,都是真金白银换来的教训:
- 误区一:安全就是加个加密模块——加密只是安全的一部分。密钥管理、随机数生成、安全存储、生命周期管理,缺一不可。
- 误区二:安全验证可以放到最后做——千万别!安全验证需要专门的测试向量和攻击场景,等到流片前再补,根本来不及。
- 误区三:开源IP可以直接用——开源IP的安全质量参差不齐。我建议至少做一次安全审计,看看有没有后门或已知漏洞。
- 误区四:安全机制越多越好——过多的安全机制会增加面积、功耗和延迟,甚至引入新的攻击面。安全设计要“恰到好处”,不是“多多益善”。
总结一下:硬件安全不是某个模块的事,它是整个芯片设计流程的一部分。从威胁建模到安全评估,每个环节都要有安全意识。记住,攻击者比你想象的更有耐心,也更有创造力。我们能做的,就是让他们的攻击成本高到“不值得”。