2、硬件安全基础:硬件攻击类型(侧信道、故障注入、逆向工程)、信任根与安全原语概述
硬件安全与纯软件安全的核心差异在于:攻击者拥有对物理器件的完全控制权。他们可以测量功耗、电磁辐射,可以改变时钟频率、电压,甚至可以用聚焦离子束(FIB)逐层剥离芯片封装。因此,理解硬件攻击的三大类型——侧信道攻击、故障注入攻击和逆向工程,是设计物理不可克隆功能(PUF)的前提。PUF 本身并非孤立器件,它必须与信任根(Root of Trust, RoT)和安全原语(如真随机数发生器 TRNG、安全存储、加密引擎)协同工作,才能构建一个可信的执行环境。本章将系统梳理这些攻击手段的原理、实施路径与防御思路,并阐明 PUF 在信任根体系中的核心价值。
上图展示了硬件攻击、安全原语与信任根之间的逻辑关系。攻击者通过物理手段(左侧红色区域)试图破坏或提取秘密信息,而安全原语(中间绿色区域)提供了构建防御的基础组件,最终汇聚为信任根(右侧蓝色区域)——即系统安全性的锚点。PUF 作为安全原语中的关键一环,其独特的物理不可克隆特性为信任根提供了不可替代的硬件基础。
2.1 硬件攻击三大类型:原理与防御
2.1.1 侧信道攻击(Side-Channel Attack, SCA)
核心原理:侧信道攻击利用密码设备在运行过程中泄露的物理信息来破解密钥。这些物理信息包括功耗轨迹、电磁辐射、运行时间、缓存访问模式等。其根本原因在于:CMOS 电路的动态功耗与正在处理的数据相关,当晶体管翻转时,功耗会随数据位的变化而波动。攻击者通过采集大量功耗轨迹,使用统计分析方法(如差分功耗分析 DPA、相关功耗分析 CPA)恢复出密钥。
典型攻击路径:
- 功耗分析:在芯片的 VDD 引脚串联一个小电阻(如 1Ω),用示波器以 1GS/s 采样率记录加密操作期间的电压降,得到功耗轨迹。
- 电磁辐射分析:使用近场电磁探针(如 100μm 分辨率)贴近芯片表面,采集局部电磁场变化,可绕过部分功耗滤波措施。
- 时序分析:测量加密操作的执行时间,若密钥位影响分支判断或操作数,则时间差异会泄露信息。
- 缓存攻击:在共享 CPU 缓存的环境中,通过监测缓存命中/未命中模式推断其他进程的密钥。
防御策略:针对侧信道攻击,硬件设计者通常采用以下措施:
- 掩码(Masking):将敏感数据与随机掩码异或,使功耗与真实数据无关。例如 AES 的布尔掩码方案。
- 隐藏(Hiding):通过双轨逻辑(如 WDDL)、恒定功耗逻辑或噪声注入,使功耗曲线趋于平坦。
- 均衡时序:确保所有操作在固定周期内完成,消除时间差异。
- PUF 辅助防护:利用 PUF 生成临时密钥,每次上电使用不同密钥,使攻击者无法积累同一密钥下的多条功耗轨迹。
2.1.2 故障注入攻击(Fault Injection, FI)
核心原理:故障注入攻击通过人为引入瞬态或永久性故障,使芯片在执行安全关键操作时产生错误结果,从而绕过安全检查或泄露秘密信息。攻击者通过改变芯片的工作环境(电压、时钟、温度)或使用高能粒子(激光、电磁脉冲)来诱发故障。
常见注入手段:
| 注入方式 | 原理 | 典型效果 | 防御难度 |
|---|---|---|---|
| 时钟毛刺 | 在时钟信号上叠加窄脉冲,使触发器采样错误 | 跳过指令、错误跳转 | 中 |
| 电压毛刺 | 瞬间拉低 VDD,使逻辑门延迟增大 | 建立时间违例、数据错误 | 中 |
| 激光注入 | 聚焦激光照射特定晶体管,产生光电流 | 精确翻转特定寄存器位 | 高 |
| 电磁注入 | 强电磁脉冲感应涡流,干扰内部信号 | 多区域逻辑扰动 | 低-中 |
典型攻击场景:在 RSA 签名验证中,攻击者通过电压毛刺跳过签名校验指令,使芯片接受伪造的签名。或者在安全启动过程中,注入故障使引导加载程序跳过对下一级镜像的哈希验证。
风险提示:故障注入攻击对 PUF 的威胁尤为严重。攻击者可能通过激光注入精确翻转 PUF 响应中的某些位,从而改变生成的密钥。因此,PUF 设计必须包含纠错机制(如 BCH 码)和故障检测电路(如双模冗余比较)。
2.1.3 逆向工程(Reverse Engineering, RE)
核心原理:逆向工程是攻击者通过物理手段分析芯片的内部结构、逻辑功能和存储内容,以提取设计知识产权或秘密数据。这包括从封装去除到晶体管级分析的完整流程。
实施步骤:
- 封装去除:使用发烟硝酸(HNO₃)加热至 60-80°C 溶解环氧树脂封装,暴露裸片。
- 层剥离:使用反应离子刻蚀(RIE)或化学机械抛光(CMP)逐层去除金属层和介质层,每层拍照记录。
- 图像拼接与网表提取:使用高倍显微镜(SEM)拍摄,通过图像识别软件自动提取晶体管连接关系,重建门级网表。
- 功能分析:将网表导入 EDA 工具,结合功能仿真确定模块边界和算法实现。
对 PUF 的威胁:传统 SRAM PUF 的初始值存储在易失性存储器中,攻击者通过低温冻结(-20°C)后快速上电读取,可获取 PUF 响应。此外,通过 FIB 切割金属层,可以直接探测内部信号线。
经验提醒:针对逆向工程,PUF 设计应避免将响应直接存储在非易失存储器中。采用"上电即生成、使用即销毁"的策略,并配合主动屏蔽层(Active Shield)——当检测到金属层被切割时,立即清零所有敏感寄存器。
2.2 信任根与安全原语概述
2.2.1 信任根的定义与层次
信任根(Root of Trust, RoT)是系统中无条件可信的组件集合,它是安全验证链的起点。在硬件安全领域,信任根通常由以下元素构成:
- 不可变引导代码(Immutable Boot Code):存储在 ROM 中,出厂时写入,无法被修改。
- 硬件唯一密钥(Hardware Unique Key, HUK):由 PUF 生成,每次上电重建,用于加密存储和身份认证。
- 安全调试接口控制:通过 eFuse 或一次性可编程(OTP)存储器控制 JTAG/SWD 接口的使能状态。
信任根的核心价值在于:它提供了一个"已知良好"的起点,所有后续的软件和硬件组件都通过逐级验证的方式建立信任链。例如,ARM TrustZone 和 RISC-V 的 MultiZone 都依赖于硬件信任根来划分安全世界和普通世界。
2.2.2 安全原语分类与功能
安全原语是构建安全系统的最小硬件模块,主要包括:
| 原语类型 | 功能 | 典型实现 | 与 PUF 的关系 |
|---|---|---|---|
| PUF | 生成芯片唯一标识和密钥 | SRAM PUF、RO PUF、Bistable Ring PUF | 自身 |
| TRNG | 产生真随机数 | 基于环形振荡器抖动、量子效应 | PUF 响应可作为熵源补充 |
| 加密引擎 | 执行对称/非对称加解密 | AES-256、RSA-2048、ECC | PUF 提供密钥,引擎执行运算 |
| 安全存储 | 保护密钥和敏感数据 | eFuse、Flash 加密、防篡改存储器 | PUF 密钥加密后存储 |
| 哈希引擎 | 完整性校验 | SHA-256、SHA-3 | 用于 PUF 响应纠错验证 |
2.2.3 PUF 在信任根中的角色
PUF 之所以成为现代信任根的核心组件,是因为它解决了传统密钥存储的根本矛盾:密钥必须存储,但存储即暴露。传统方案将密钥写入 eFuse 或 Flash,攻击者可通过物理探针或软件漏洞读取。而 PUF 的密钥在芯片上电时由物理特性即时生成,掉电后消失,不存在静态存储的密钥副本。
在实际 SoC 设计中,PUF 通常与以下模块协同工作:
- 密钥包装(Key Wrapping):PUF 生成的根密钥用于加密其他密钥(如固件加密密钥、会话密钥),加密后的密钥存储在外部 Flash 中。
- 安全启动:引导 ROM 使用 PUF 密钥验证第一级引导加载程序的签名,确保代码完整性。
- 设备认证:在 TLS 或自定义协议中,设备使用 PUF 密钥进行挑战-响应认证,证明自身身份。
2.3 案例拆解:基于 SRAM PUF 的安全启动方案设计
背景与约束:某物联网设备厂商需要设计一款支持安全启动的 MCU,要求:① 密钥不能以明文形式存储在 Flash 中;② 支持远程固件更新;③ 成本敏感,不能增加独立安全芯片。该 MCU 基于 ARM Cortex-M33 内核,内置 512KB Flash 和 128KB SRAM。
初始现象与目标:传统方案将 AES 密钥存储在 Flash 的特定区域,但通过 JTAG 调试接口或固件漏洞可被读取。目标是将密钥与物理芯片绑定,即使固件被提取,也无法在其他芯片上运行。
关键输入参数:
- SRAM PUF 单元:使用 64KB SRAM 作为熵源,产生 256-bit 响应。
- 纠错码:BCH(255, 128, 13) 码,可纠正 13 位错误。
- 辅助数据(Helper Data):存储在 Flash 的 OTP 区域,大小为 2KB。
- 密钥派生:使用 SHA-256 对 PUF 响应进行哈希,生成 128-bit AES 密钥。
分析判断过程:SRAM PUF 的响应在每次上电时存在微小差异(噪声、温度漂移),必须通过纠错机制稳定输出。辅助数据在芯片首次启动时生成,包含纠错码的校验信息,但不泄露 PUF 响应的直接信息。
实际操作步骤:
- 注册阶段(首次启动):
- 读取 SRAM 上电初始值,得到 64KB 原始响应。
- 提取 256-bit 稳定响应(通过多数投票或模糊提取器)。
- 计算 BCH 校验位,生成辅助数据,写入 OTP。
- 将 PUF 响应哈希后作为根密钥,加密固件密钥。
- 重建阶段(每次启动):
- 重新读取 SRAM 初始值。
- 使用辅助数据执行 BCH 纠错,恢复原始响应。
- 哈希生成根密钥,解密固件密钥。
- 验证固件签名,执行安全启动。
结果对比:采用 PUF 方案后,即使攻击者通过 JTAG 读取了全部 Flash 内容,也无法获得有效的 AES 密钥。因为密钥只存在于芯片上电后的短暂时间内,且与芯片的物理特性绑定。在 1000 次上电测试中,PUF 响应重建成功率为 99.7%,平均重建时间 3.2ms。
风险与代价:PUF 方案增加了约 15% 的启动时间(用于纠错和密钥重建),且需要额外的 2KB OTP 存储辅助数据。在极端温度(-40°C 至 85°C)下,PUF 响应错误率上升,需要更强大的纠错码或温度补偿电路。
复盘经验:PUF 设计的关键在于熵源质量评估。在量产前必须进行充分的温度循环测试和老化测试,确保 PUF 响应的长期稳定性。此外,辅助数据的保护同样重要,攻击者若篡改辅助数据,可能导致 PUF 重建失败(DoS 攻击),因此辅助数据应存储在受写保护的区域。
2.4 常见误区与设计复盘
误区一:PUF 可以完全替代 TRNG。PUF 响应虽然具有随机性,但它是确定性的(同一芯片每次产生相同响应),而 TRNG 要求每次输出不同。两者用途不同:PUF 用于密钥生成,TRNG 用于随机数生成(如加密 nonce、掩码)。
误区二:PUF 响应可以直接作为密钥使用。PUF 原始响应包含错误位,且分布不均匀。必须经过模糊提取器(Fuzzy Extractor)处理,包括纠错和哈希压缩,才能生成高质量的密钥。
设计建议:在 SoC 中集成 PUF 时,应预留测试模式,允许在开发阶段读取 PUF 原始响应(通过安全调试通道),用于验证熵源质量。量产时必须永久禁用该测试模式,防止攻击者利用。