FPGA 比特流加密:AES 密钥存储、HMAC 认证与防抄板全流程解析
上一篇 FPGA 配置方式有哪几种 讲的是「通道」:JTAG、主串 SPI、SelectMAP 分别靠谁发时钟、比特流沿哪几根引脚进芯片。这一篇追问通道里「流的是什么」——多数单板上电时,FPGA 从板载 Flash 读入的是明文比特流,谁拿到 Flash 内容,谁就拿到了你的全部设计。烧录操作见 FPGA 入门 32:比特流下载与固化;在线升级与 multiboot 黄金镜像回退同批另有专文,本文只讲比特流自身的安全:加密、认证与密钥。
读这张卡抓住一条主线:加密管「别人看不懂、拷走没用」,对付整片复制 Flash 的抄板者;认证管「不是我签的镜像不许跑」,对付刷入恶意镜像的攻击者。只开加密不等于安全闭环,第三节会解释只加密不鉴别的设备为什么仍可能被一颗恶意镜像打穿。
本文要回答的问题
- 不加密的 FPGA 板子,攻击者具体走哪几步就能克隆我的设计?为什么比特流格式是厂商专有的也挡不住?
- FPGA 比特流加密用的是什么密码方案,密钥存在哪,为什么抄板者拿到 Flash 和密文仍然无法配置出同样的逻辑?
- 已经加密了为什么还要 HMAC/SHA 认证?什么是降级攻击,攻击者不知道明文怎么篡改设备?
- eFUSE 和 BBRAM 两种密钥存储分别适合量产还是调试,烧录工序和电池失效会带来什么后果?
- 开了加密之后还有哪些洞必须堵上:JTAG、回读口、侧信道、烧录环境,选型时该向厂商确认哪些检查项?
一、为什么比特流是资产:回读与克隆路径
要理解 FPGA 比特流加密的动机,先回到工艺本质。主流 FPGA 是 SRAM 工艺:LUT 的函数值、触发器初值、布线开关全部由片内配置 SRAM 决定,掉电即失。于是单板必然是同一形态——芯片旁挂一颗非易失存储器(通常是 QSPI SPI Flash,老设计是 BPI 并行 NOR),上电时 FPGA 主动把比特流读进来,逐帧写满配置 SRAM(通道细节见 FPGA 配置方式有哪几种)。
这个形态埋下第一处暴露:比特流静态地、明文地躺在一颗可以单独拆下的通用芯片里。攻击者拆下 Flash 用编程器整片读出,或者不拆——飞线到 SPI 时钟和数据引脚偷听上电总线,都能拿到完整镜像。比特流格式虽是厂商专有,但克隆不需要理解格式:把镜像原样烧到另一块同型号板子,上电照样配置出相同逻辑。重放攻击只需要烙铁和编程器。
第二处暴露面是配置回读(readback)。多数器件支持把已加载的配置帧从芯片里重新读出,用于调试或校验;JTAG 天然能访问配置状态机。量产后它就是第二条克隆通道:回读口开着、JTAG 没锁,攻击者在线就能取走配置内容。
第三处常被忽略——配置帧与硬件资源(LUT、BRAM、布线)有明确对应关系,灰色市场上已有针对主流厂商未加密比特流的反推工具,能还原出接近门级的网表,进而分析算法、协议甚至硬编码常量。明文比特流泄露的不只是「能复制的产品」,还有「能被读懂的设计」。
把三条路径合起来看,抄板门槛大致是这样的:
| 克隆路径 | 攻击者需要的条件 | 拿到的东西 | 成本量级 |
|---|---|---|---|
| 拆 Flash 整片复制 | 编程器、同型号空板 | 可直接重放的镜像 | 低,按小时计 |
| 板上偷听 SPI 总线 | 飞线、逻辑分析仪 | 同上,无需拆芯片 | 低 |
| JTAG/回读在线读取 | 下载器、接口未锁 | 配置帧,可转镜像 | 低 |
| 比特流反推网表 | 未加密镜像、反推工具 | 接近门级的可读设计 | 中,按天计 |
四条路径的共同前提都是同一个:攻击者能拿到明文比特流。比特流加密的设计目标,就是让这个前提永远不成立——Flash 里、总线上、回读通路上,出现的都只是密文。
二、对称加密怎么工作:AES、密钥存储与片上解密
主流 FPGA 厂商的比特流加密方案在架构上高度一致:一个对称分组密码(主流器件普遍采用 AES,密钥长度以 256 位档为量产首选,具体档位以器件手册为准),加密在工具侧离线完成,解密在 FPGA 片内配置通路中实时完成,密钥永远不出芯片。
加密发生在开发 PC 上:厂商工具(Vivado、Quartus 等)用你提供的密钥对明文比特流加密,产出加密镜像烧进 Flash,代价全在编译期。解密发生在每次上电配置阶段:片内硬件 AES 解密核串在配置通路上,密文先经过解密核,还原出明文帧再写入配置 SRAM。明文只存在于芯片内部,外部引脚看到的都是密文——飞线偷听一整个上电过程也只录到密文。
读这张图盯住颜色区分的两类节点:蓝色 PC 和灰色 Flash 都在芯片之外,是攻击者能物理接触的世界,只允许出现密文;紫色密钥存储是信任根,密钥经专用接口一次性注入后没有任何用户指令能读回——解密核能拿到,JTAG、回读口都拿不到;橙色解密核是边界关卡,密文进、明文出;绿色配置 SRAM 是明文唯一到达的地方,且掉电即失。
为什么用对称加密?配置通路对时间敏感,中大容量器件比特流可达几十 MB,对称算法硬件吞吐高、门数小,适合流水线解密;非对称算法(RSA/ECC)计算重,只在认证环节用一次。
密钥存哪里,是这套方案里唯一需要用户做的硬件选择题。主流器件提供两类片内存储:
| 对比项 | eFUSE(电子熔丝) | BBRAM(电池备份 RAM) |
|---|---|---|
| 物理形态 | 片内一次性可编程熔丝阵列 | 片内易失 RAM + 板载小电池供电 |
| 可改写性 | 一次性,烧入不可改、不可擦 | 可反复重写,换密钥随时重烧 |
| 掉电行为 | 无需电源,密钥永久在片 | 电池在则密钥在;电池耗尽密钥即失 |
| 可回读性 | 烧入后接口只写不读 | 同样不可经用户接口读出 |
| 烧错/泄露后果 | 不可逆,该芯片只能作废或带废密钥使用 | 重新注入新密钥即可恢复 |
| 典型适用 | 量产定型产品,追求无电池、免维护 | 开发调试、小批量、需要轮换密钥 |
| 成本与维护 | 零外围器件 | 需电池、电池座及定期更换评估 |
这里先记住一个反直觉的事实:克隆者即使拿到一块合法工作的板子,也提不走密钥。密文离开这颗烧过密钥的芯片就毫无意义;换一颗新 FPGA,没有密钥就解不出明文,DONE 指示灯不会亮。加密把「买一颗同款芯片就能复制」变成了「必须连密钥一起复制,而密钥在物理上不可导出」。两条路线的选型决策在下一节展开。
三、认证为什么必要:只加密不鉴别的篡改风险
加密解决了保密问题,但密码学的入门第一课就是:机密性不等于完整性,更不等于真实性。把这句话翻译成 FPGA 场景——加密回答「别人看不懂吗」,但没回答「芯片怎么知道眼前这个镜像是不是合法厂家发的」。
考虑一条不需要破解 AES 的攻击链。攻击者不必知道明文,只需让设备加载他指定的密文:截获升级通道、调换返修环节的 Flash、在供应链替换待烧录镜像。如果配置逻辑是「能用片内密钥解密成功就加载」,那么一个泄露的旧版合法镜像也能通过检查——设备会运行一个「确实是你们家生成、但你早已不想让它跑」的旧版本,里面可能有已修补的协议漏洞或后门接口。这就是降级(回滚)攻击:不破解密码,只把时钟往回拨。
另一种情况是恶意构造。某些分组密码工作模式下,翻转密文中的若干比特可以预测性地翻转解密后明文的对应比特;即使预测不了,让关键帧加载错误内容、进入异常状态,也可能触发安全机制失效。加密本身没有提供「这份密文有没有被动过手脚」的判据。
认证机制补上的就是这个判据。主流做法是在比特流上附加一个基于对称密钥的消息认证码(HMAC,底层通常配 SHA 系列哈希),或在更高安全等级器件上使用非对称签名:镜像生成时用密钥算出认证标签附在镜像后,FPGA 配置时对收到的内容重算一遍并逐位比对,标签不符则拒绝配置、拉低 DONE 甚至触发清零。HMAC 的价值在于它带密钥——普通的 CRC 或哈希只能发现误码,攻击者篡改密文后可以连 CRC 一起重算;而没有 HMAC 密钥,他算不出能通过校验的新标签。
三类手段的分工可以这样对照:
| 手段 | 密钥性质 | 防住什么 | 挡不住什么 |
|---|---|---|---|
| CRC/校验和 | 无密钥 | 传输误码 | 任何蓄意篡改(校验值可随内容重算) |
| AES 加密 | 对称密钥 | 拷贝、偷听、回读泄露 | 降级重放、恶意镜像投毒 |
| HMAC/签名认证 | 对称或非对称密钥 | 篡改、伪造、非授权镜像 | 密钥自身泄露 |
防降级通常配套落地:镜像头带单调版本号,片内记住已接受的最高版本,认证通过但版本更旧也拒载。至此「防抄板」才升级为完整的「安全启动」:每次上电芯片都确认镜像没被读过、没被改过、没被调包、也没被回退。
四、密钥生命周期与烧录纪律
比特流加密体系里,算法是标准的、电路是固化的、工具是厂商给的,真正决定安全性的变量只有一个:密钥怎么管。密钥管理是一条从生成到作废的完整链路,先看选路决策。

顺着决策树走一遍典型量产流程:开发和小批试产用 BBRAM,因为密钥会换、镜像反复迭代,可重写是刚需;产品定型后量产件切 eFUSE,在所有功能测试完成后的最后工序烧入——熔丝烧写后调试通道通常同步收紧,烧早了良品都没法返修诊断。密钥不要全公司共用一把:主密钥离线保管(高安全场景用硬件安全模块 HSM),每片或每批的设备密钥由主密钥派生,单片泄露只影响一片,并能按芯片序列号追溯密钥版本。
BBRAM 有一条独立维护线:电池。寿命通常按年计,但高温会显著缩短寿命,长期库房待机也在耗电;电池耗尽密钥即失,板子表现为完全无法启动。用 BBRAM 的产品必须回答:电池寿命与保修期谁更长;换电池后谁在受控环境下重注密钥;客户是否被允许具备重注能力。回答不了就选 eFUSE。
烧录工位是最容易被忽略的攻击面。密钥必须以明文进入烧录器一次:工位中毒、脚本被改、离职人员留存副本,任一条都让加密归零。纪律上至少做到烧密钥与烧镜像工位分离、权限最小化、脚本不落地保存密钥、注入记录可追溯——系统往往不破在算法上,而破在密钥管理流程上。
五、安全边界:JTAG、回读口、侧信道与物理环境
加密、认证、密钥管理都到位之后,剩余风险集中在芯片的「旁路」上。把它们列成一张攻击面清单,比抽象谈论「安全是系统工程」更有用:
| 残留攻击面 | 攻击方式 | 处置手段 | 代价/权衡 |
|---|---|---|---|
| JTAG 调试口 | 在线访问配置状态机、注入测试模式、探测内部状态 | 量产件 eFUSE 永久关闭,或启用口令/挑战响应保护 | 关闭后现场无法用 ILA 调试、返修诊断能力下降 |
| 配置回读 | 经 SelectMAP/JTAG 读出配置帧 | 生成比特流时禁用 readback,量产熔丝位锁死 | 失去在线校验配置正确性的手段 |
| 测试模式 | 未公开的厂测接口被滥用 | 确认厂商已在加密使能时封锁,选型时书面确认 | 依赖厂商实现,无用户侧配置 |
| 侧信道分析 | 测量解密时的功耗/电磁辐射,统计还原密钥 | 选带掩码、随机化防护的器件;控制可接触性 | 防护等级看器件,成本与启动速度有差异 |
| 烧录环境 | 密钥在产线泄露 | 隔离工位、HSM、权限与记录(第四节) | 流程成本,无硬件代价 |
| 供应链替换 | Flash 被换成攻击者的镜像 | 认证 + 防降级(第三节)才能识别 | 需要器件支持认证特性 |
JTAG 是最典型的权衡项。开发期它是生命线:下载、ILA 抓波形、边界扫描全靠它;量产期它是最大的没锁的门。常见折中是两段式流程——测试在烧 eFUSE 前全部做完,最后一步关 JTAG。多器件 JTAG 链上任何一颗没锁,都可能成为进入整条链的跳板,级联要点见 JTAG 链高级应用。
侧信道是另一个维度:攻击者观察 AES 解密时功耗曲线或近场电磁辐射随密钥字节的统计差异,用差分功耗分析(DPA)恢复密钥。这需要实验室级设备和反复触发配置,门槛远高于拆 Flash,但对金融、付费电视等高价值场景真实存在。对策一半在器件(掩码、随机化,主流安全档器件普遍内置,以手册为准),一半在产品(增加反复触发难度、屏蔽包覆)。没有任何单一开关让 FPGA「变安全」——加密而 JTAG 大开等于装了铁门开着窗;安全等级要按自己产品的威胁模型分层取舍。
六、器件支持现状与选型检查项
主流厂商中端及以上系列普遍提供 AES 比特流加密(256 位档常见)、eFUSE/BBRAM 两类密钥存储、HMAC 或非对称认证以及 JTAG 锁定位,高端器件另有防篡改传感器和与处理器侧联动的安全启动。国产 FPGA 近年在中大容量系列上普遍补齐了 AES 加密与 eFUSE 存储,认证能力在新一代产品上逐步标配,但系列间代差明显;部分低成本入门系列不含解密硬件,根本不支持加密,必须逐型号查手册。
更完整的安全体系(含 Zynq 类 SoC 的 BootROM→FSBL→比特流信任链、防回滚计数器)见专家层 FPGA 安全:比特流加密认证与安全启动,产线工序见 FPGA 量产与烧录。选型时拿着下面这张检查单向手册和 FAE 逐条确认:
| 检查项 | 要确认的问题 |
|---|---|
| 加密能力 | 该具体型号是否含 AES 解密硬核?密钥长度档位?最低速率档会不会被裁剪掉该特性? |
| 密钥存储 | eFUSE 和 BBRAM 是否都可选?eFUSE 烧写后是否影响其他调试/返修能力? |
| 认证能力 | 支持 HMAC 还是非对称签名?认证失败的硬件行为是什么(拒载/清零/锁死)? |
| 防降级 | 是否有片内防回滚计数器或版本熔丝? |
| 接口封锁 | JTAG 能否独立于加密关闭?readback 禁用位是否不可逆?有无保留的紧急恢复口? |
| 侧信道防护 | 解密核是否声明掩码/随机化等 DPA 防护?有无安全认证(如通用标准认证)? |
| 产线支持 | 厂商提供何种离线密钥注入工具与脚本?密钥是否必须经过联网的厂商服务? |
| 国产化口径 | 国产器件上加密与认证分别是哪个系列开始支持?有无同等安全等级的上板案例? |
最后一项对国产替代项目尤其重要:功能上「有 AES」和安全体系上「加密+认证+防回滚+接口锁+侧信道防护齐备」是两代东西,Pin to Pin 替代评估时要把安全特性逐档对齐,不能只看逻辑资源和收发器数量。
这一篇在知识体系里的位置
本篇是 FPGA 配置簇的安全侧深文。上游通道机制见 FPGA 配置方式有哪几种,动手烧录见 FPGA 入门 32:比特流下载与固化;在线升级失败回退的 multiboot 黄金镜像机制同批另有专文。向专家层延伸:完整安全启动信任链与 SoC 场景见 FPGA 安全:比特流加密认证与安全启动,产线密钥注入与量产工序见 FPGA 量产与烧录,JTAG 级联带来的攻击面见 JTAG 链高级应用。
总结
FPGA 比特流加密的全部逻辑可以浓缩成三句话:SRAM 工艺决定了比特流必须静态存放在板上、明文就是设计资产,所以拆 Flash、偷听配置总线、回读配置帧都能低成本克隆产品,这是防抄板动机的根源;AES 对称加密让芯片之外只存在密文,密钥烧在片内 eFUSE(一次性、免电池、适合量产)或 BBRAM(可重写、靠电池、适合调试)中且不可回读,配置时由片内解密核实时还原,克隆者拿到密文也换不到一颗有密钥的芯片;但加密只管保密,HMAC/签名认证与防降级版本号才能挡住恶意镜像和旧版重放,再配合关闭 JTAG 与回读口、管控烧录环境、评估侧信道防护,才构成完整的安全边界——选型时务必逐型号确认加密、认证、密钥存储和接口锁四件事是否齐备,老型号和低端器件经常缺这少那,不能凭系列名想当然。