4、RoT的物理安全要求:防篡改、防侧信道攻击、防物理提取
好,咱们接着聊可信根。前面几章我们把RoT的逻辑功能、信任链传递讲清楚了。但有个问题我一直想强调:如果你的RoT芯片本身能被物理接触到,那所有软件层面的安全防护都是白搭。
你想想看,攻击者要是拿个探针直接戳到芯片总线上,或者用电子显微镜把芯片的金属层一层层剥开,你的密钥还能藏得住吗?我早年做一款金融支付终端时,就遇到过这种事儿——有人把设备拆开,直接对安全芯片做故障注入。从那以后,我对物理安全这块儿就特别上心。
这一章,我们就来拆解RoT的三大物理安全防线:防篡改、防侧信道攻击、防物理提取。
4.1 防篡改(Tamper Resistance)
防篡改,说白了就是让攻击者没法轻易动你的芯片。动了就得留下痕迹,或者直接让芯片自毁。
我个人习惯把防篡改分成三个层次:
- 封装级防护:用坚固的封装材料,比如陶瓷封装、环氧树脂灌封。想打开?基本得破坏芯片本身。
- 传感器网络:在芯片内部布设光敏、温度、电压、频率传感器。一旦检测到异常环境(比如有人用激光照射),立即触发清零机制。
- 主动屏蔽层:在芯片顶层金属走线中铺设随机的蛇形导线,形成“屏蔽网”。一旦某条线被切断或短路,芯片会检测到阻抗变化,立刻擦除密钥。
核心原则:防篡改不是让攻击者打不开,而是让攻击者在打开后什么都得不到。
我记得有一次做安全芯片选型,某厂商号称他们的芯片有“军用级防篡改”。结果我一看规格书,所谓的防篡改就是涂了一层黑胶。嗯,这种糊弄外行的做法,在真正的物理攻击面前撑不过三分钟。
4.1.1 主动屏蔽层设计要点
主动屏蔽层是防篡改的核心技术。我给大家画个简图,看看它的基本结构:
看到没?屏蔽层在最上面。攻击者想从芯片正面开孔,必须先破坏屏蔽层。而屏蔽层的导线是随机布线的,攻击者没法通过短路特定线对来绕过检测。
实战经验:屏蔽层的检测电路必须用独立的电源和时钟,不能和主逻辑共用。我曾经见过一个设计,屏蔽层检测电路用的主电源,结果攻击者把主电源拉低,检测电路直接失效了——这就是典型的“共模故障”。
4.2 防侧信道攻击(Side-Channel Attack Resistance)
侧信道攻击,这个词听起来挺玄乎。说白了,就是攻击者不直接破解你的算法,而是通过观察芯片运行时的“物理副作用”来推断密钥。
常见的侧信道有哪些?
| 攻击类型 | 利用的物理量 | 典型手段 |
|---|---|---|
| 功耗分析(SPA/DPA) | 芯片瞬时功耗 | 用示波器采集电源引脚上的电流波形 |
| 电磁辐射分析(EMA) | 芯片工作时产生的电磁场 | 用近场探头扫描芯片表面 |
| 时序分析 | 运算执行时间 | 测量密码运算的耗时差异 |
| 故障注入 | 电压/时钟/激光脉冲 | 在运算过程中引入短暂故障,观察输出变化 |
我刚开始接触侧信道时,觉得这东西离实际产品很远。直到有一次,我们给客户做安全评估,用一台不到两万块的示波器,配合简单的功耗分析脚本,半小时就把某款“安全芯片”的AES密钥给还原出来了。嗯,从那以后,我再也不敢小看侧信道了。
4.2.1 功耗分析的防御
功耗分析是最经典的侧信道攻击。它的原理很简单:芯片执行不同指令时,消耗的电流不一样。攻击者通过统计大量功耗轨迹,就能把密钥比特位一个个抠出来。
怎么防?我常用的方法有几种:
- 恒定功耗逻辑:使用双轨预充电逻辑(DPL),让每个时钟周期消耗的功率基本一致。
- 随机掩码:在运算过程中引入随机数,把真实数据和随机数混合在一起。攻击者看到的功耗轨迹是随机的,没法做统计分析了。
- 时钟随机化:在密码运算过程中随机插入等待周期,打乱功耗轨迹的对齐关系。
注意:随机掩码不是万能的。如果掩码的随机数生成器(RNG)本身不够随机,或者掩码在运算过程中被意外移除(比如某些优化编译器干的“好事”),那防御就形同虚设了。我建议在RoT中单独配一个硬件RNG,别用软件伪随机数。
4.2.2 故障注入的防御
故障注入攻击,攻击者通过电压毛刺、时钟毛刺、电磁脉冲或激光,让芯片在关键运算时“算错”。比如,让循环少跑一轮,或者让条件判断结果翻转。
防御思路其实不复杂:
- 冗余计算:同一个运算做两遍或三遍,结果不一致就报错。
- 错误检测码:在关键数据路径上加CRC或奇偶校验。
- 时序约束:对关键路径做严格的时序分析,确保电压毛刺不会导致建立时间违例。
我记得有一次做故障注入测试,我们用一台电压毛刺发生器,对着某款芯片的电源引脚打了一串毛刺。结果发现,只要毛刺的宽度和幅度调得合适,芯片的AES加密结果就会在某些字节上出错。更可怕的是,这些错误和密钥之间存在线性关系——攻击者只需要几十次故障注入就能恢复出完整密钥。
教训:故障注入防御不能只靠软件层面的校验。硬件层面必须做电压/时钟的实时监测,一旦检测到异常波动,立即触发安全响应。
4.3 防物理提取(Physical Extraction Resistance)
防物理提取,这是最后一道防线。攻击者已经拿到了芯片,甚至把它泡在硝酸里剥层了。他能不能把Flash里的密钥读出来?
说实话,没有绝对防提取的技术。我们能做的,就是让提取的成本远高于收益。
4.3.1 存储单元的防护
密钥存储是物理提取的重点目标。常见的防护手段包括:
- 熔丝/反熔丝存储:一次性可编程(OTP),写入后物理结构不可逆。想读?得用聚焦离子束(FIB)去修,成本极高。
- 电池备份SRAM:密钥存在SRAM中,靠电池供电。一旦检测到入侵,立即切断电池,SRAM数据丢失。
- PUF(物理不可克隆函数):利用芯片制造过程中的工艺偏差生成唯一标识。密钥不存储,而是每次上电时由PUF实时生成。
| 存储技术 | 抗提取能力 | 成本 | 适用场景 |
|---|---|---|---|
| 熔丝/反熔丝 | 高(需FIB逆向) | 中 | 根密钥、设备唯一ID |
| 电池备份SRAM | 高(掉电即失) | 高(需电池) | 高端安全模块 |
| PUF | 极高(无存储) | 低(纯逻辑) | 物联网设备、低成本RoT |
| 嵌入式Flash | 低(可被探针读取) | 低 | 不推荐用于密钥存储 |
4.3.2 总线加密与混淆
即使攻击者用探针接到了芯片内部总线上,他看到的也是一堆乱码。这就是总线加密的作用。
我建议在RoT中实现以下机制:
- 地址加扰:物理地址和逻辑地址之间做随机映射。攻击者即使读到了总线数据,也不知道哪个地址对应哪个寄存器。
- 数据加密:所有在片内总线上传输的敏感数据,都用硬件加密引擎做实时加解密。密钥只在安全核心内部可见。
- 时序随机化:总线上的数据传输时序加入随机延迟,让攻击者没法通过时序分析来推断数据内容。
一个小技巧:总线加密的密钥最好由PUF生成,并且每次上电都不同。这样即使攻击者提取了一次总线密钥,下次上电又变了,他得重新提取——嗯,成本就上去了。
4.4 物理安全的综合设计思路
讲完三大防线,我给大家总结一个综合设计思路。物理安全不是堆砌技术,而是做权衡。你想想看,一个带完整屏蔽层、传感器网络、电池备份SRAM的RoT芯片,成本可能是普通芯片的十倍。但你的产品可能只需要防住业余爱好者级别的攻击。
我个人习惯按攻击者的能力等级来划分防护等级:
- L1(基础防护):防简单的探针攻击。用环氧树脂灌封 + 简单的电压传感器。适合消费类IoT设备。
- L2(中等防护):防侧信道和中等物理攻击。加主动屏蔽层、功耗平衡逻辑、随机掩码。适合金融终端、智能门锁。
- L3(高级防护):防专业实验室级攻击。全传感器网络、PUF密钥生成、总线加密、故障注入检测。适合HSM、军用设备。
核心思想:物理安全的目标不是“绝对安全”,而是让攻击成本 > 攻击收益。在设计RoT时,先想清楚你的威胁模型是什么,再决定投入多少资源做物理防护。
好了,这一章的内容就到这里。物理安全这块儿,说难不难,说简单也不简单。关键是要有“攻击者思维”——站在攻击者的角度去想,如果我是他,我会怎么拆解这个芯片?然后,提前堵住这些路。