2、硬件安全基础:安全元件(SE)与可信执行环境(TEE)介绍,硬件唯一密钥(HUK)与物理不可克隆函数(PUF)原理
2.1 为什么硬件安全这么重要?
做灌溉控制器这么多年,我见过太多「软件加密做得花里胡哨,硬件一捅就破」的案例。你想想看,攻击者只要拿到设备,把Flash芯片吹下来,用编程器一读——密钥全裸奔。这就是典型的「软件锁防君子,硬件锁防小人」都没做到位。
我个人习惯是:只要涉及密钥存储,必须上硬件安全方案。因为软件层面的加密,密钥终究要放在某个内存地址里。攻击者用JTAG调试接口或者电压故障注入,很容易就把密钥给扒出来。
核心观点:硬件安全不是可选项,而是嵌入式设备的最后一道防线。尤其对于灌溉控制器这种部署在野外、无人值守的设备,物理攻击风险极高。
2.2 安全元件(SE)—— 一个独立的「保险柜」
安全元件,说白了就是一个专门干加密活的小芯片。它有自己的CPU、存储器和加密引擎,跟主控芯片完全隔离。
SE 的典型架构:
- 独立处理器:通常是低功耗的ARM Cortex-M0/M4内核
- 专用存储器:EEPROM或Flash,用于存储密钥和证书
- 硬件加密引擎:支持AES、RSA、ECC等算法
- 物理防护层:防拆、防侧信道攻击
我在项目中遇到过一件事:客户要求用MCU自带的Flash存储密钥,说「省成本」。结果产品上市三个月,就被破解了。攻击者用化学试剂腐蚀掉芯片封装,直接用探针读到密钥。后来换成SE方案,虽然成本多了几块钱,但再也没出过问题。
避坑指南:选SE芯片时,一定要看它有没有通过CC EAL5+或FIPS 140-2 Level 3认证。我曾经贪便宜买过一款没认证的SE,结果发现它的随机数生成器有后门——这比没有SE还危险。
2.3 可信执行环境(TEE)—— 主芯片里的「安全屋」
SE是独立芯片,TEE则是在主芯片内部划出一块安全区域。ARM的TrustZone技术就是典型的TEE实现。
TEE 的工作原理:
- 芯片启动时,先进入安全世界(Secure World)
- 安全世界加载可信操作系统(如OP-TEE)
- 普通世界(Normal World)运行Linux/RTOS
- 通过安全监控器(Monitor)切换两个世界
嗯,这里要注意:TEE虽然方便,但它的安全性取决于芯片厂商的实现。有些低端芯片的TEE实现有漏洞,攻击者可以通过电压毛刺攻击绕过安全世界检查。
警告:不要以为用了TEE就万事大吉。我见过一个案例:某厂商用TEE存储密钥,但调试接口没关。攻击者直接通过JTAG进入安全世界,把密钥读了个精光。记住:TEE + 物理防护 = 安全,TEE 单独 = 心理安慰。
2.4 硬件唯一密钥(HUK)—— 每颗芯片的「身份证」
HUK是在芯片制造过程中写入的、每颗芯片唯一的密钥。它通常存储在一次性可编程(OTP)存储器中,一旦写入就无法修改。
HUK 的典型用途:
- 派生其他密钥(如会话密钥、存储密钥)
- 设备身份认证
- 固件加密
我个人习惯是:永远不要直接使用HUK。而是用HUK作为根密钥,通过KDF(密钥派生函数)生成多个子密钥。这样即使某个子密钥泄露,也不会影响根密钥的安全。
关键点:HUK的安全性依赖于OTP存储器的物理防护。如果攻击者能用聚焦离子束(FIB)修改OTP单元,HUK就形同虚设。所以,选择有物理防护层的芯片很重要。
2.5 物理不可克隆函数(PUF)—— 芯片的「指纹」
PUF利用芯片制造过程中的随机物理差异来生成唯一标识。说白了,就是每颗芯片的晶体管阈值电压、金属线延迟等参数都略有不同,这些差异可以被测量并转化为密钥。
PUF 的常见类型:
| 类型 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| SRAM PUF | 利用SRAM上电时的随机初始值 | 实现简单,无需额外电路 | 受温度影响大 |
| 环形振荡器PUF | 测量振荡器频率差异 | 稳定性较好 | 功耗较高 |
| 仲裁器PUF | 比较两条路径的延迟 | 响应速度快 | 易受建模攻击 |
我在项目中用过SRAM PUF。说实话,它的稳定性是个大问题。温度从-20°C变到60°C,PUF输出可能有一半的比特位翻转。所以必须配合纠错码(ECC)和模糊提取器(Fuzzy Extractor)来使用。
实战技巧:PUF生成的密钥不是直接用的。你需要经过以下步骤:
- 注册阶段:读取PUF原始响应,生成辅助数据(Helper Data)
- 重构阶段:用辅助数据纠正PUF响应的错误,得到稳定密钥
- 密钥派生:用稳定密钥通过KDF生成实际使用的密钥
2.6 SE vs TEE vs PUF:怎么选?
你可能会问:这三种方案到底选哪个?我根据项目经验给个建议:
| 场景 | 推荐方案 | 理由 |
|---|---|---|
| 高安全需求(如金融支付) | SE + PUF | SE提供独立安全环境,PUF提供物理不可克隆性 |
| 中等安全需求(如灌溉控制器) | TEE + HUK | 成本可控,安全性足够 |
| 低成本场景 | MCU内置PUF | 无需额外芯片,但安全性有限 |
我个人习惯是:灌溉控制器至少要用TEE + HUK方案。因为设备部署在农田里,攻击者可以长时间接触设备。如果只用软件加密,被破解只是时间问题。
最后提醒:无论选哪种方案,都要做好密钥生命周期管理。密钥生成、分发、使用、更新、销毁,每个环节都要有记录。我曾经见过一个项目,密钥管理一团糟,最后不得不召回所有设备重新烧录——那成本,够买几百颗SE芯片了。
好了,这一章的内容就到这里。下一章我们会讲「安全启动与固件签名」,这是防止设备被刷入恶意固件的关键。到时候见。