1. 硬件安全概述:威胁、木马、侧信道与PUF
各位好,我是老周。在芯片行业摸爬滚打了十几年,今天咱们聊聊硬件安全。说实话,十年前我跟很多工程师一样,觉得安全是软件的事。直到有一次,我在一个IoT项目的流片回来后,发现芯片在特定温度下会泄露密钥——嗯,从那以后我再也不敢轻视硬件安全了。
硬件安全不是锦上添花,而是底线。你想想看,软件漏洞还能打补丁,芯片一旦流片出来,硬件缺陷就是永久性的。所以,这一章我们先搭个框架,把几个核心概念理清楚。
1.1 硬件安全威胁模型
威胁模型,说白了就是回答三个问题:谁在攻击你?他想干什么?他能怎么干?
我习惯把硬件攻击者分成四类,见下表:
| 攻击者类型 | 能力等级 | 典型手段 | 我见过的案例 |
|---|---|---|---|
| 远程软件攻击者 | 低 | 利用固件漏洞、缓冲区溢出 | 某路由器通过JTAG接口被提权 |
| 物理邻近攻击者 | 中 | 侧信道分析、故障注入 | 智能卡在电磁辐射中泄露密钥 |
| 实验室级攻击者 | 高 | FIB探针、微探针、反向工程 | 某安全芯片被聚焦离子束切开金属层 |
| 代工厂级攻击者 | 极高 | 植入硬件木马、修改光罩 | 军工项目中发现额外逻辑单元 |
这里有个关键点:威胁模型决定了你的防护成本。如果你做的是车规级芯片,物理邻近攻击是主要威胁;如果是金融安全芯片,实验室级攻击才是真正的对手。我曾经在一个项目中,客户要求防住所有攻击者——结果防护成本比芯片本身还贵,最后我们不得不重新定义威胁边界。
1.2 硬件木马
硬件木马,就是芯片里被偷偷塞进去的"后门"。它跟软件木马不一样——软件木马可以杀毒,硬件木马一旦流片,你只能报废整批芯片。
硬件木马通常由两部分组成:
- 触发机制:什么时候激活?可以是特定输入组合、计数器溢出、温度阈值等
- 载荷:激活后干什么?泄露密钥、修改功能、拒绝服务
我参与过一个国防项目的安全审查。当时我们在RTL代码里发现了一个"幽灵状态机"——它只在第65536次复位时跳转到异常状态,然后通过未使用的I/O引脚输出内部寄存器值。这就是典型的硬件木马,触发条件是计数器,载荷是信息泄露。
硬件木马的分类,我习惯按插入阶段来分:
| 插入阶段 | 攻击者 | 检测难度 | 典型特征 |
|---|---|---|---|
| RTL设计 | 内部员工或第三方IP | 中 | 冗余状态、未使用逻辑 |
| 综合/布局布线 | EDA工具后门 | 高 | 额外标准单元、异常连线 |
| 光罩制造 | 代工厂 | 极高 | 金属层修改、晶体管尺寸变化 |
| 封装测试 | 封测厂 | 高 | 额外bonding线、测试模式残留 |
1.3 侧信道攻击
侧信道攻击,说白了就是"不走正门,走窗户"。密码算法本身可能是安全的,但芯片在执行算法时,会泄露功耗、电磁辐射、时间信息——这些就是"侧信道"。
最常见的侧信道攻击类型:
- 功耗分析:简单功耗分析(SPA)看单条指令,差分功耗分析(DPA)做统计
- 电磁辐射分析:用近场探头采集芯片表面的电磁场
- 时间分析:根据执行时间推断操作数或分支
- 故障注入:用激光或电压毛刺让芯片出错,从错误结果反推密钥
我记得有一次帮客户做AES-128的侧信道评估。我们用DPA攻击,采集了10000条功耗曲线,只用了不到两个小时就恢复了全部128位密钥。客户当时脸都绿了——他们之前一直以为软件上做加密就够了。
为什么会这么容易?因为CMOS电路的功耗跟数据相关。当寄存器翻转时,功耗会有一个明显的尖峰。攻击者只要对齐这些尖峰,做统计相关分析,就能把密钥位一个个抠出来。
核心原理: 侧信道攻击利用的是"物理实现"的泄露,而不是"算法"的漏洞。即使算法是数学上完美的,只要芯片在运行,就会有物理痕迹。
防护手段主要有三类:
- 隐藏技术:让功耗不依赖数据,比如双轨逻辑、恒定功耗设计
- 掩码技术:把敏感数据随机化,每次执行都不同
- 噪声注入:在电路中加入随机噪声,降低信噪比
但说实话,没有一种防护是完美的。我见过最狠的方案是"三管齐下"——掩码+隐藏+噪声,攻击者需要采集上亿条曲线才能破解,这时候攻击成本已经超过了密钥本身的价值。
1.4 物理不可克隆函数(PUF)基础
PUF,全称Physical Unclonable Function。名字很唬人,其实原理很简单:利用芯片制造过程中的随机差异,生成唯一的"指纹"。
你想想看,即使同一片晶圆上的两颗芯片,由于掺杂浓度、氧化层厚度、线宽等参数的微小波动,它们的物理特性也是不同的。PUF就是把这些差异"读"出来,变成一串二进制数。
常见的PUF结构:
| PUF类型 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 仲裁器PUF | 两条路径的延迟竞赛 | 结构简单,面积小 | 易受建模攻击 |
| 环形振荡器PUF | 振荡频率的差异 | 鲁棒性好 | 功耗高,面积大 |
| SRAM PUF | 上电时SRAM单元的初始值 | 零额外电路 | 受温度影响大 |
| 蝴蝶型PUF | 交叉耦合反相器的亚稳态 | 可在FPGA实现 | 需要校准 |
我在一个安全密钥存储项目中用过SRAM PUF。当时的需求是:密钥不能以明文形式存储在非易失存储器中。我们的方案是:每次上电时,用PUF生成一个"根密钥",然后用这个根密钥去解密存储在Flash中的密文密钥。这样,即使芯片被物理拆解,攻击者也拿不到根密钥——因为PUF的响应只在芯片上电时存在,断电就消失了。
PUF的核心指标有三个:
- 唯一性:不同芯片之间的PUF响应差异要大,通常用"片间汉明距离"衡量
- 可靠性:同一芯片在不同条件下,PUF响应要稳定,用"片内汉明距离"衡量
- 不可克隆性:即使知道PUF的设计,也无法制造出两颗PUF响应相同的芯片
下面这张图展示了PUF在安全芯片中的典型应用架构:
从这张图可以看出,PUF的典型工作流程是:上电后PUF生成原始响应,经过ECC纠错后,通过密钥派生函数生成根密钥。这个根密钥用来解密存储在Flash中的密文密钥,然后交给加密引擎使用。整个过程,真正的密钥只在芯片运行时存在于易失性电路中,断电即消失。
一句话总结: 硬件安全不是选一个"万能防护",而是根据威胁模型,把木马检测、侧信道防护、PUF等技术组合起来,形成纵深防御。我做了这么多年,最大的体会是——没有绝对安全的芯片,只有足够难攻的芯片。