3. 设备安全威胁模型与攻击面分析
在讨论任何具体防护机制之前,必须先回答一个更基础的问题:我们究竟在防谁、防什么、从哪里防。对 Lattice FPGA 而言,威胁模型不是抽象的安全口号,而是把"资产—攻击者能力—攻击路径—信任边界"四件事对齐到具体器件与具体接口上的工程活动。本节围绕 Lattice FPGA 的典型威胁、攻击面识别方法与资产/信任边界定义展开,目标是让读者能够为一块实际使用的 Lattice 器件(如 iCE40、MachXO2/3、ECP5、Certus-NX、Avant 等)画出一张可落地的威胁模型草图。
一、五类典型威胁及其在 Lattice 器件上的落点
Lattice FPGA 的典型威胁可归纳为五类:克隆、逆向、篡改、侧信道与故障注入。它们并非彼此独立,而是常常形成一条"从获取到利用"的链条。
克隆指攻击者复制配置比特流或整机设计,制造功能等价的产品。对 SRAM 型 FPGA(如 ECP5、Certus-NX),比特流在每次上电时从外部 Flash 加载,若未启用比特流加密,攻击者只需读取外部 SPI Flash 即可获得完整配置。对基于 NVCM/Flash 的器件(如 MachXO2/3),克隆难度更高,但若未锁定读保护,仍可能通过 JTAG 或配置接口读出。
逆向指从比特流或网表恢复设计意图。Lattice 器件的比特流格式虽未完全公开,但社区已有针对 iCE40 的开源逆向工具链(如 Project IceStorm),可恢复 LUT、布线乃至部分原语。逆向本身不直接破坏产品,但为克隆、篡改和规避授权提供了基础。
篡改包括对配置比特流的修改(植入后门、改变逻辑功能)和对运行时数据的修改。典型场景是攻击者在供应链中替换外部配置 Flash 内容,或在现场通过未保护的 JTAG 接口重写配置。
侧信道主要指功耗分析与电磁分析。FPGA 在加解密运算时,功耗轨迹与密钥相关。若设计中使用软核 AES 且未做掩码,攻击者可通过采集数千条功耗曲线恢复密钥。Lattice 部分器件提供硬核加密模块,其侧信道特性优于软核实现,但仍需评估。
故障注入包括电压毛刺、时钟毛刺、激光注入等。攻击者通过短暂拉低核心电压或注入时钟毛刺,使 FPGA 跳过某条安全检查指令或产生错误比较结果。对 Lattice FPGA,电压毛刺可能影响配置加载过程,导致器件进入非预期状态。
二、攻击面识别方法
攻击面识别不是罗列所有引脚,而是沿着"数据从哪里进入、密钥在哪里使用、控制流在哪里做判断"三条线索展开。对 Lattice FPGA 项目,建议按以下顺序梳理:
- 配置路径:确认器件是 SRAM 型还是 NVCM/Flash 型。SRAM 型必须检查外部 Flash 是否启用比特流加密(如 ECP5 的 AES-256 解密引擎),以及加密密钥如何注入(OTP 还是外部密钥源)。
- 调试路径:JTAG 是否在产品中保持可用?若可用,是否设置了 JTAG 密码或熔断?Lattice 部分器件支持 JTAG 保护位,需在编程文件中显式配置。
- 运行时接口:UART、SPI、I2C 等是否暴露了可读写内部寄存器或触发配置重载的命令?例如,某些设计允许通过 UART 进入"更新模式",这本身就是一条高价值攻击路径。
- 物理引脚:电源引脚、时钟引脚、复位引脚是否容易被外部毛刺注入?PCB 上是否有未使用的测试点直接连到配置相关网络?
- 供应链:固件更新包是否签名?生产环节中比特流是否以明文形式在代工厂流转?
识别完成后,可用一张"攻击面—威胁—资产"映射表来量化优先级。例如,外部 Flash 未加密这一项,直接对应克隆与篡改两类威胁,影响配置比特流与设计知识产权两类资产,应列为最高优先级。
三、资产与信任边界定义
资产定义要具体到"如果它泄露或被修改,后果是什么"。对 Lattice FPGA,典型资产包括:配置比特流(泄露导致克隆,修改导致功能篡改)、加密密钥(泄露导致所有加密保护失效)、设备身份标识(如唯一 ID,被伪造导致设备冒充)、运行时敏感数据(如中间计算结果)。
信任边界则回答"哪些区域我们假定是安全的,哪些不是"。一个常见的误区是把整块 FPGA 内部都当作可信区。实际上,若攻击者能通过 JTAG 读写内部寄存器,或通过故障注入改变内部状态机,内部逻辑就不再完全可信。合理的信任边界应至少区分:
- 可信核心:硬核加密模块、OTP 密钥存储、NVCM 配置区。这些区域有硬件级保护,攻击成本高。
- 条件可信区:FPGA 内部用户逻辑。其可信度取决于是否启用了 JTAG 保护、是否做了故障注入检测。
- 不可信区:外部 Flash、JTAG 主机、通信对端、物理环境。所有来自这些区域的数据都必须经过验证。
四、一个可操作的威胁建模示例
假设某工业控制器使用 Lattice MachXO3 器件,配置存储于内部 Flash,通过 UART 接收上位机参数,JTAG 在生产后仍保留。按上述方法梳理:
| 攻击面 | 对应威胁 | 受影响资产 | 当前状态 | 建议措施 |
|---|---|---|---|---|
| JTAG 接口 | 篡改、逆向 | 配置比特流、设计 IP | 未设密码 | 启用 JTAG 保护位或熔断 |
| UART 参数写入 | 篡改 | 运行时数据 | 无校验 | 增加命令签名与序列号防重放 |
| 内部 Flash 配置 | 克隆 | 配置比特流 | 未加密 | 启用比特流加密(若器件支持) |
| 电源引脚 | 故障注入 | 控制流完整性 | 无检测 | 增加电压监控与逻辑冗余 |
这张表本身就是威胁模型的交付物。它不需要覆盖所有理论攻击,但必须覆盖产品实际暴露的入口,并给出可执行的下一步。对 Lattice FPGA 而言,最容易被忽视的是 JTAG 和外部 Flash 这两条路径——它们往往在原型阶段为了方便而保持开放,却在量产时被遗忘。威胁模型的价值,正是在设计早期就把这些"方便之门"标记出来,并决定是关闭、监控还是接受风险。