硬件安全基础:安全芯片、信任根、物理安全
说到硬件安全,很多人第一反应是“烧录固件、加个密码”,其实远远不够。在真实的攻防对抗里,攻击者手里可能拿着逻辑分析仪,甚至直接开盖用电子显微镜看你的芯片走线。我这些年接触的安全产品,从POS终端到汽车T-Box,几乎每个设备都逃不过这三个基础问题:我的计算环境可信吗?我的密钥怎么存才安全?物理攻防怎么防?
今天我们就从最底层聊起,把三个核心概念讲透:安全芯片、信任根、物理安全措施。这是整个防篡改体系的基石,你后面学的密钥生命周期管理、安全启动、远程证明,全都得依赖这层。
1. 安全芯片:不仅仅是“加密芯片”
很多人以为“安全芯片”就是把AES和RSA算法烤在ROM里,其实不是。真正的安全芯片是一个带自防护能力的独立计算环境,它有专门的CPU、SRAM、真随机数发生器(TRNG),以及最关键的非易失密钥存储区。
核心特征有三个:
- 隔离执行环境:主CPU没法直接读取安全芯片内部的密钥,只能通过API调用签名、解密等操作。我见过一些项目把密钥存在Flash里,再用软件锁保护,说白了那是个窗户纸,一捅就破。
- 物理防护:芯片内部有主动屏蔽层、光检测、温度传感器。一旦检测到开盖、激光照射、异常温度,立即擦除密钥。这个后面物理安全部分会细聊。
- 1对1密钥绑定:每一颗安全芯片出厂时,会注入唯一的设备密钥(Device Key),通常基于硅物理不可克隆函数(PUF)生成。就算同一个批次的两颗芯片,密钥也完全不同。
| 参数 | 普通MCU安全区 | 专用安全芯片(如TPM/HSM) |
|---|---|---|
| 密钥存储 | Flash/EFuse,可被JTAG读回 | 内部非易失存储,物理防读取 |
| 真随机数 | 通常伪随机,种子来自ADC噪声 | 专用TRNG,通过NIST SP 800-90B检测 |
| 物理攻击免疫 | 基本没有 | 主动屏蔽、传感器自毁 |
| 典型带宽 | 受主CPU性能限制 | 独立密码加速器,可达Gbps级 |
2. 信任根:一切信任的起点
你想想看,如果连第一段启动代码都不知是谁写的,后面的安全验证还有什么意义?信任根(Root of Trust)就是整个安全链的起点,它必须是硬件绑定的、不可伪造的、在设备出厂前就注入的。
2.1 硬件信任根的三种典型形态
- Boot ROM信任根:在芯片制造时把一段代码硬写在Mask ROM里,这是唯一一个不需要外部信任的代码。每次上电MCU先执行Boot ROM,它去校验Flash里的Bootloader签名。
- 硅可信根(PUF-based):利用芯片制造过程的微观差异(比如金属线延迟、栅氧化层厚度)生成唯一指纹,不存储明文密钥。哪怕你用FIB探针去读PUF区域,读到的也是随机噪声。
- eFuse/OTP信任锚:一次性可编程存储,用来保存公钥哈希或设备证书。写入后无法更改,所以它天然防篡改。但我提醒你,eFuse的写入过程需要较高电压,如果设计不当,攻击者可能通过电源毛刺跳过写入验证。
信任链传递流程:
- 上电:Boot ROM读取固定地址的公共根证书(或公钥哈希)。
- Hash + 签名验证:Boot ROM计算Bootloader映像的摘要,用根公钥验证RSA/ECDSA签名。
- 通过后跳转:Boot ROM清零一级保护寄存器,释放Bootloader执行权限。
- Bootloader重复此过程,验证OS内核和应用程序。
- 任何一级验证失败,芯片直接进入安全锁死或无限复位循环。
还有一个重要的概念叫“可信度量”(Trusted Measurement)。我参与过一个车辆入侵检测项目,当时ECU用了IMA架构(Integrity Measurement Architecture),它不只是做一次启动验证,而是运行时也持续计算各模块的度量值,每有一个新的可执行代码被加载,都先扩展进入PCR(平台配置寄存器)。这个机制的好处是——哪怕攻击者已经在运行态注入了代码,安全芯片也能在下次远程证明时暴露这个异常度量值。
2.2 信任根与安全芯片的关系
两者不是替代关系,而是搭配关系。安全芯片提供隔离执行环境,信任根提供“谁可以信任”的最原始判断。我倾向于把信任根看作安全芯片内部的一段不可更改的逻辑,而安全芯片是整个信任链的执行者。常见的组合是TPM 2.0芯片内置一组固化在硬件中的背书密钥(EK)和平台配置寄存器,EK就是该TPM的信任根。
3. 物理安全:对抗物理接触攻击
网络攻击你可能比较熟悉,但物理攻击才是真正硬核的。攻击者可以直接把设备买回去,用电钻打穿外壳,用热风枪吹掉环氧树脂,然后用微探针直接接触内部总线。这个时候,软件防护已经没用了。
3.1 主动物理防护层
| 防护层级 | 攻击目标 | 典型案例防护手段 |
|---|---|---|
| PCB级 | JTAG调试接口、测试点 | eFuse熔断JTAG、涂敷导电漆、封装灌胶 |
| 封装级 | 开盖、芯片拆解 | 金属主动屏蔽层(检测断线)、光敏传感器 |
| 硅片级 | FIB探针、激光注入 | 扰频总线、动态差分逻辑、冗余传感器 |
我曾经对一款HSM模块做渗透测试,它的物理防护已经做得不错了——金属屏蔽罩有微动开关,开盖立即擦密钥。但我发现一个盲区:环境温度传感器只覆盖了0°C ~ 70°C范围,我用液氮喷罐把芯片降到-40°C,再慢慢升温接探针,结果传感器没有触发,直接被我把Flash内容读了出来。这个教训让我后来在设计中一定会要求覆盖-55°C ~ 150°C全温度区间,并且对温度变化速率也做监控。
3.2 被动物理防护
被动防护不依赖供电,主要依靠材料和结构。比如:
- 封装选材:使用碳化硅或蓝宝石基板,比传统硅基板更难用FIB开窗。
- 走线伪装:在芯片顶层覆盖多层伪金属网格,攻击者不知道哪条线是真正的数据线。
- 双节点检测:每条内部总线都用两个不同逻辑深度的节点同时输出,并做实时比较,一旦发现信号延迟或逻辑不匹配,立即触发擦除。
嗯,最后补充一个很多设计者容易忽略的点:物理防护要与安全芯片固件联动。比如屏蔽层被破坏时,芯片应进入“退化模式”——擦除密钥,但保留诊断日志区域。这样日后取证时可以知道攻击发生的时间和触发点。我在一个金融终端项目中就是这么做的,后来客户寄来一块被火烤过的板子,我通过日志分析还原了整个攻击过程。
这张图把三层关系串起来了:信任根在最底层提供不可篡改的起点,安全芯片在中间提供隔离执行和密钥管理,物理防护在最外层阻挡实体攻击。三层一起协作,才能形成完整的信任链闭环。我个人做安全评估时,永远会先翻看这三层的设计文档——缺任何一层,整个系统安全等级都会断崖式下降。