防故障注入与侧信道:毛刺、电压/时钟扰动、DPA 与防护
更新时间:2026-09-19。前置:安全启动链、密钥保险库、总线防火墙。算法正确、协议安全仍可能被物理攻击击穿:攻击者直接在芯片的电压/时钟/电磁环境上动手脚,或测量功耗/电磁泄漏来提取密钥。安全芯片必须同时对抗故障注入(FA)和侧信道(SCA)。
一、故障注入攻击(Fault Injection)
目标:让硬件在关键时刻算错或跳过一条安全关键指令,绕过认证/签名校验/安全状态机。
- 时钟毛刺(clock glitching):在关键时钟沿附近插入一个窄脉冲/超频多个沿,使某条指令被跳过、PC 走错、寄存器锁存错误值(如让
if (signature_ok)分支被跳错,直接放行)。 - 电压毛刺(voltage/ VCC glitching):瞬间把电源电压拉低/抬高(µs~ns 级欠压),让某些路径时序违例、SRAM/触发器翻转、或比较器给出错结果;欠压还可能让 Flash/OTP 读到错值。
- 电磁脉冲(EMFI):近距离线圈脉冲在局部耦合出错位翻转,无需拆线。
- 激光/光故障、温度极端:定位翻转单个位/寄存器(高级实验室攻击)。
- 典型目标:安全启动的签名验证比较(见 安全启动)、JTAG 锁检查(见 JTAG 锁定)、特权状态跳转、安全世界进入条件(见 TrustZone 防火墙)。
防护思路
- 冗余/多次执行+比较:关键判断做两次(时间/空间冗余)或用不同实现,结果不一致则拒绝/复位;安全比较用「全量比较 + 恒定结果」,不早返回。
- 安全状态机不可逆:安全状态用编码(如冗余/互补编码、one-hot 带非法态检测),非法跳转进默认锁定态;关键寄存器带 ECC/奇偶(见 ECC RAS)。
- 传感器:电压监控(brown-out/过压/欠压检测,见 POR/WDT)、时钟频率/毛刺检测器(检测异常沿/周期,见 时钟监控)、温度/光照/金属网格防探测(glitch 或开盖断线触发复位/清零密钥)。
- 时序裕量:关键路径不过度紧张(glitch 利用时序余量小);关键逻辑放在难注入区域、加滤波/去耦电容增加电压毛刺难度。
- 反应(response):检测到攻击立即复位安全子系统、清零密钥(与 keyvault 的 zeroization 联动)、记录审计事件、进入不可恢复锁定(brick-safe)。
- 软件对策:校验关键控制流(控制流完整性)、关键常量/代码在运行前再校验(双重校验)、使故障难以与精确指令对齐(随机化时序/插入屏障)。
二、侧信道攻击(Side-Channel Analysis)
目标:不破坏芯片,而是测量物理泄漏反推密钥/敏感数据。泄漏源:动态功耗(CMOS 翻转充放电)、电磁辐射、时序、缓存行为。
功耗/电磁分析
- SPA(简单功耗分析):一次/少量轨迹上,不同指令/分支的功耗差异直接暴露操作序列(如 RSA 平方-乘里「乘」分支暴露密钥位、PIN 比较长度/早返回等计时泄漏)。
- DPA/CPA(差分/相关功耗分析):单条轨迹噪声大,攻击者采集成千上万次用不同输入但同一密钥的加密,按对某密钥字节的假设把轨迹分组做统计差分/相关,密钥正确时出现明显尖峰;即使每次单 bit 差异极小也能提取。AES 的 S-box 输出、RSA/ECC 模幂/标量乘都是经典目标。
- 模板/机器学习攻击、水平分析:更强攻击者用先验模板或一次长运算内多点相关。
防护思路(两类大方向)
- 掩码(masking,消除数据与泄漏的相关性):
- 给中间值加随机掩码:运算
a时用a' = a ⊕ m与随机m分开处理,使任何时刻线上的真实值与密钥无关;最终去掩码。布尔掩码(XOR,适合 AES 类)、算术掩码(+,适合 RSA/ECC)。 - 高阶掩码抵抗多探测点/组合泄漏;注意掩码在非线性运算(S-box、乘法)处要安全转换,否则「毛刺(glitch,此处指组合逻辑毛刺导致中间值瞬间出现未掩码量)」会泄漏,需要门级掩码(如 TI,threshold implementation)。
- 给中间值加随机掩码:运算
- 隐藏(hiding,让功耗与数据无关或恒定):
- 恒定功耗:用差分逻辑、并行使所有位同时翻转、在总线上做预充电/使 0→1 和 1→0 翻转数恒定、加噪声/随机延迟打乱对齐。
- 恒定时间/恒定流(软件):密钥相关比较不早返回、不按密钥选分支、不按密钥查表(防 cache 计时侧信道);用位运算常量比较,避免依赖密钥的内存访问模式。
- 加时钟抖动/随机插入指令,使多次轨迹难以对齐(DPA 需轨迹对齐),降低相关性。
- 其他:电源去耦/稳压减少外部可测差分、电磁屏蔽、关键运算在均衡金属层下、限频限流。
- 物理防探测(shielding mesh、tamper mesh):开盖搭探针触发,密钥分区存放。
三、安全设计中的整体配合
- 密钥永远不以明文出现在普通寄存器/RAM/总线上,只在硬件 crypto 引擎内部解掩使用(见 keyvault)。
- 调试口(JTAG/SWD)安全锁定,故障注入不能骗过锁(见 JTAG、CoreSight)。
- 安全启动比较冗余、失败计数与延时(防暴力与故障,见 bootrom)。
- 审计/生命周期状态(open/secure/locked)存在防回滚 OTP/安全存储(见 MPU/PMP 与生命周期)。
- 认证等级:SESIP/CC EAL、车规安全定义攻击模型;防护强度按资产价值匹配(没有绝对不可破,是抬高成本)。
四、常见的坑
- 只加密不防故障:签名校验
if(!ok) return一个毛刺跳过,整链失守;要冗余+恒定。 - 软件常量比较早返回:逐字节不等即返回,时序暴露 PIN/密钥(SPA/计时)。
- 掩码在 S-box/毛刺处泄漏:只对寄存器掩码,组合逻辑毛刺瞬时暴露未掩码值,需 TI/门级掩码。
- 只做一阶掩码:高阶 DPA 用两点相关破之,高价值资产需高阶。
- 传感器只接不响应:检测到毛刺但不清零密钥/不复位,攻击者重试。
- 电压检测阈值太窄/太晚:快速 ns 毛刺躲过慢速 ADC 式检测,需要硬件快速 brown-out/glitch 检测。
- 安全状态机可被强跳:非编码状态机、无非法态锁定,FA 直接跳进安全态。
- 调试口可被故障绕过:JTAG 锁判读也受毛刺影响,锁逻辑要在安全域且冗余。
- 随机数可预测:掩码/防重放依赖真随机数 TRNG,TRNG 弱则全破(健康检测)。
- cache/分支计时泄漏:查表 AES、RSA 分支标量乘暴露密钥。
- 防护不同步到关电:下电/休眠时密钥仍在 retention RAM 可读,要 zeroization。
- 只验功能不做攻击评估:常规测试不测毛刺/侧信道,需 TVLA/红蓝队实测。
相关与延伸
密钥保护见 密钥保险库;安全启动/调试锁定见 bootrom、JTAG;访问控制见 总线防火墙、IOMMU;传感器/复位见 POR/WDT、时钟监控。
总结
物理攻击分两类:故障注入通过时钟/电压毛刺、电磁或激光脉冲让关键比较被跳过、寄存器翻转或安全状态机被强跳,对策是冗余执行与恒定不早返回的安全比较、带非法态锁定的编码状态机、电压/时钟/温度/防探测网格传感器以及检测即清零密钥并复位的快速响应;侧信道则从数据依赖的功耗、电磁、时序或 cache 行为提取密钥,SPA 看单轨迹操作分支、DPA 用大量轨迹做统计相关,对策是用随机掩码(在非线性运算和组合毛刺处需门级阈值实现)切断数据-功耗相关性、用恒定时间/恒定功耗和随机化对齐隐藏泄漏,并把密钥限制在硬件 crypto 内部、配可信 TRNG、安全锁定调试口——最常见的失败是只做密码学正确性却让一个电压毛刺跳过签名检查、或软件常量比较早返回泄时序。