硬件安全基础: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的典型工作方式:

  1. 普通系统发起安全调用(SMC)
  2. CPU切换到安全模式
  3. TEE里的可信应用(TA)执行敏感操作
  4. 结果加密后返回给普通系统

避坑指南:我曾经遇到一个坑——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输出漂移。我建议在量产前做充分的温度循环测试,否则设备用两年就认不出自己了。

它们怎么配合?

一张图看懂硬件安全元件的关系:

硬件安全元件协作关系 主CPU(REE) TEE(安全世界) TPM芯片 安全协处理器 PUF 协作流程 1. 主CPU启动 → TEE度量自身 → 扩展TPM的PCR 2. TPM验证PCR → 释放密钥给安全协处理器 3. 安全协处理器用PUF生成设备唯一密钥 → 加密通信

实际项目中,这些元件经常组合使用。比如:

  • TPM存根密钥,PUF生成设备指纹
  • TEE跑敏感业务逻辑,安全协处理器做加解密加速
  • PUF的密钥直接喂给TPM做种子

我的建议:别想着一个元件包打天下。TPM做信任根,TEE做运行时保护,安全协处理器做高性能密码运算,PUF做防克隆——各司其职,才是正道。

好了,硬件安全基础就聊到这儿。这些元件是可信开机的基石,后面讲启动链时你会反复看到它们的身影。