硬件安全基础:TPM与TEE简介,安全协处理器,物理不可克隆函数(PUF)
聊可信开机,绕不开硬件安全。软件做得再花哨,底层硬件被人捅穿了,一切白搭。这一节我带你看看几个关键硬件安全元件——TPM、TEE、安全协处理器,还有PUF。它们各自解决什么问题?怎么配合?我结合项目经验给你拆开讲。
TPM:可信平台模块
TPM说白了就是一个独立的密码学芯片。它有自己的处理器、存储、随机数发生器,跟主CPU隔离开。我最早接触TPM是在做某款国产服务器的安全启动方案时,当时客户要求必须用TPM 2.0做信任根。
TPM的核心能力就三样:
- 安全存储密钥——密钥生成在芯片内部,私钥永远不出去
- 平台配置寄存器(PCR)——记录系统状态,一旦被篡改就能发现
- 远程证明——向外部证明当前系统是可信的
举个例子,BIOS启动时,每一段代码执行前先度量自己的哈希,然后扩展到PCR里。如果某个环节被改了,PCR值就不对,TPM会拒绝释放密钥。这就是信任链的硬件基础。
关键点:TPM 1.2 vs 2.0 差异很大。2.0支持更多算法(SM2/SM3/SM4),PCR数量也从16个扩展到24个。我建议新项目直接上2.0,别走回头路。
| 特性 | TPM 1.2 | TPM 2.0 |
|---|---|---|
| 算法支持 | SHA-1, RSA | SHA-256, SM3, ECC, RSA |
| PCR数量 | 16 | 24 |
| 授权机制 | 单一密码 | 密码+策略+HMAC |
| 密钥层次 | 固定 | 灵活可扩展 |
TEE:可信执行环境
TEE跟TPM不一样。TPM是独立芯片,TEE是在主CPU内部划出一块安全区域。ARM的TrustZone、Intel的SGX、AMD的SEV都属于TEE。
我做过一个项目,需要在手机端做指纹支付。指纹数据不能给普通操作系统看到,那就得跑在TEE里。TEE有自己的安全内存、安全外设,普通系统(REE)根本访问不了。
TEE的典型工作方式:
- 普通系统发起安全调用(SMC)
- CPU切换到安全模式
- TEE里的可信应用(TA)执行敏感操作
- 结果加密后返回给普通系统
避坑指南:我曾经遇到一个坑——TEE里的TA代码没做输入校验,结果普通系统传了个畸形参数,TA直接崩溃。记住,TEE不是万能保险箱,代码质量一样重要。
安全协处理器
安全协处理器是专门干脏活累活的。TPM算力有限,TEE又跟主CPU绑太紧。有些场景需要独立的、高性能的安全处理单元,比如苹果的Secure Enclave、谷歌的Titan M。
安全协处理器通常包含:
- 独立的CPU核心(通常是Cortex-M系列)
- 专用SRAM/ROM
- 硬件加解密引擎
- 真随机数发生器
- 防侧信道攻击电路
我记得调试某款安全协处理器时,发现它的I2C通信没做加密。攻击者只要在总线上挂个逻辑分析仪,就能看到密钥交换过程。后来我们加了TLS over I2C,虽然慢了点,但安全多了。
PUF:物理不可克隆函数
PUF是个很有意思的东西。它不存密钥,而是利用芯片制造时的物理差异来生成唯一标识。每个芯片的硅晶体结构、掺杂浓度都有微小差异,PUF把这些差异变成数字指纹。
PUF的好处很明显:
- 防物理克隆——即使拿到设计图,也造不出完全一样的芯片
- 密钥不存储——只在需要时生成,用完就消失
- 抗物理攻击——探针一碰,物理特性就变了,密钥也变了
我见过一个案例:某厂商用SRAM PUF做设备身份认证。每次上电,SRAM的初始值都不一样,但通过纠错算法能稳定提取出128位密钥。嗯,这里要注意——PUF的稳定性是个大问题,温度、电压变化都会影响输出,必须配纠错电路。
注意:PUF不是万能的。环境老化、电压波动可能导致PUF输出漂移。我建议在量产前做充分的温度循环测试,否则设备用两年就认不出自己了。
它们怎么配合?
一张图看懂硬件安全元件的关系:
实际项目中,这些元件经常组合使用。比如:
- TPM存根密钥,PUF生成设备指纹
- TEE跑敏感业务逻辑,安全协处理器做加解密加速
- PUF的密钥直接喂给TPM做种子
我的建议:别想着一个元件包打天下。TPM做信任根,TEE做运行时保护,安全协处理器做高性能密码运算,PUF做防克隆——各司其职,才是正道。
好了,硬件安全基础就聊到这儿。这些元件是可信开机的基石,后面讲启动链时你会反复看到它们的身影。