安全芯片基础:HSM、TEE、eFuse 技术原理

各位好,我是老周。今天咱们聊聊安全芯片的三大核心模块:HSM、TEE 和 eFuse。这三个东西,说白了就是嵌入式安全的「三驾马车」。我做了十几年安全固件开发,可以负责任地告诉你——不理解它们,密钥烧录就是空中楼阁。

先看一张整体关系图,帮你建立全局认知:

安全芯片三大核心模块关系图 安全芯片 / SoC HSM 硬件安全模块 TEE 可信执行环境 eFuse 电熔丝 密钥存储 & 密码运算 硬件隔离,防物理攻击 专用密码协处理器 安全执行环境 与 Rich OS 隔离 可信应用 (TA) 运行 一次性可编程 (OTP) 熔断后不可逆 存储根密钥 / 配置 协同工作:eFuse 存储根密钥 → HSM 派生工作密钥 → TEE 提供安全执行环境 三者共同构建从硬件到软件的全链路安全体系

HSM:硬件安全模块

HSM 是什么?你可以把它理解成芯片内部的一个「保险柜」。这个保险柜有独立的 CPU、独立的存储、独立的密码协处理器。它和主系统之间,只有一条窄窄的通道。

我个人习惯把 HSM 比作「银行金库」。金库的门很厚,钥匙在行长手里,普通人根本进不去。HSM 也一样——密钥一旦存入,主 CPU 只能通过 API 调用运算结果,永远拿不到密钥明文。

HSM 的核心能力:

  • 密钥生命周期管理:生成、存储、使用、销毁,全流程硬件保护
  • 硬件加速密码运算:AES、RSA、ECC、SM2/SM3/SM4,比软件快 10~100 倍
  • 物理攻击防护:防侧信道攻击、防探针、防电压/温度扰动
  • 安全启动:逐级校验固件签名,确保只运行可信代码

我在项目中遇到过一件事:某款车规级芯片,客户要求密钥必须在 HSM 内部生成,连烧录设备都不能看到密钥。当时我们设计了一套「密钥协商协议」——烧录设备只提供随机数种子,HSM 内部派生密钥,全程不暴露明文。嗯,这个方案后来成了行业参考。

实战建议:选型时注意 HSM 的「密钥槽数量」。有些低成本芯片只有 8 个槽位,量产时根本不够用。我建议至少 16 个起步。

TEE:可信执行环境

TEE 和 HSM 不同。HSM 是硬件模块,TEE 是芯片上的一块「安全飞地」。它和普通的 Rich OS(比如 Linux、Android)共享同一个 CPU,但通过硬件隔离技术,把内存、外设、中断都隔开了。

你想想看,你的手机里既有支付宝,又有游戏 App。支付宝的密钥如果和游戏放在同一个操作系统里,那多危险?TEE 就是干这个的——它提供一个「安全世界」,敏感操作在里面执行,普通 App 根本看不见。

对比维度 HSM TEE
硬件独立性 完全独立 CPU/存储 共享 CPU,硬件隔离
性能 密码运算快,通用计算弱 通用计算强,适合复杂逻辑
典型场景 密钥存储、签名验签 DRM、支付、生物识别
攻击面 物理攻击为主 软件攻击为主
成本 高(专用硬件) 中(软件 + 硬件扩展)

我曾经调试过一个 TEE 下的密钥烧录流程。问题出在「共享内存」——TEE 和 REE(普通世界)通过一块预留内存通信。如果这块内存的权限配置错了,密钥就可能泄露。那次排查花了我整整三天。

避坑指南:TEE 的「安全存储」并不是绝对安全的。如果根密钥被 eFuse 保护,那还好;如果根密钥存在 Flash 里,攻击者可以通过物理手段读取。我曾经见过一个产品,TEE 的根密钥直接硬编码在代码里……嗯,那款产品后来被破解了。

eFuse:电熔丝

eFuse 这名字挺形象——「电子保险丝」。它是一小块硅上的金属丝,通电后熔断,状态从 0 变成 1,而且不可逆。说白了,就是一次性可编程(OTP)存储。

eFuse 在安全芯片里扮演什么角色?它存储的是「根信任锚」。比如芯片的唯一 ID、根密钥、安全配置位。这些东西一旦写入,就永远改不了。

eFuse 的典型用途:

  1. 存储根密钥:HSM 或 TEE 的根密钥,从 eFuse 读取
  2. 芯片身份:唯一序列号,用于设备认证
  3. 安全配置:禁用调试接口、锁定 JTAG、设置安全等级
  4. 功能裁剪:某些芯片通过 eFuse 开启/关闭特定功能

我记得有一次,产线反馈某批芯片的 eFuse 烧录失败率高达 5%。排查后发现是烧录时序问题——eFuse 需要精确的电压和脉冲宽度,差一点就熔不断。后来我们加了一个「校验回读」步骤,烧完立刻读回来确认,这才把不良率降到 0.1% 以下。

关键参数:eFuse 的「比特数」很有限,通常只有几百到几千比特。别想着拿它存固件,它只适合存最关键的那几个密钥。另外,eFuse 有「冗余位」设计——有些位熔断了还能补救,但别指望这个,设计时就要留余量。

三者如何协同?

讲完三个模块,咱们串起来看看。一个典型的安全芯片启动流程是这样的:

  1. 上电:芯片从 ROM 启动,读取 eFuse 中的根密钥
  2. 安全启动:用根密钥验证 Bootloader 签名
  3. HSM 初始化:HSM 从 eFuse 加载根密钥,派生工作密钥
  4. TEE 启动:TEE 通过 HSM 获取密钥,建立安全执行环境
  5. 应用运行:普通 App 在 REE 运行,敏感操作通过 TEE 调用 HSM

你看,eFuse 是「根」,HSM 是「核」,TEE 是「壳」。三者缺一不可。

重要提醒:千万别把 eFuse 里的根密钥直接用于业务加密。根密钥只用来派生其他密钥。为什么?因为 eFuse 的读取接口可能被侧信道攻击。我见过一个案例,攻击者通过分析 eFuse 读取时的功耗曲线,反推出了根密钥。派生一次,用完就清,这才是安全做法。