在 Vivado 中评估旧工程时,常会遇到无法打开的 V 文件,属性显示为 encrypted。这通常意味着设计者使用了 Xilinx 的高级安全功能对源码或比特流进行了保护。除了生成网表供他人调用外,直接加密 Bit 文件能更彻底地防止逆向分析和篡改。
为什么要加密?
Xilinx V6 和 7 系列 FPGA 支持 AES256 加密。主要优势在于:
- 防回读:阻止通过 JTAG 读取内部逻辑或配置文件。
- 防篡改:确保烧录的 Bit 文件未被修改。
若仅需禁止回读,可设置 BITSTREAM.READBACK.SECURITY(LEVEL1 禁止回读,LEVEL2 禁止回读与重烧写)。但若对手具备物理层攻击能力(如在上电加载时抓取信号),简单的设置无效,此时必须启用 AES256 加密。
加密原理简述
AES(高级加密标准)是对称加密算法,采用 CBC 模式。需要两个关键参数:
- StartCBC:128bit 初始向量。
- AES Key:256bit 密钥。
此外,为防止 Bit 文件被篡改,Xilinx 引入了 HMAC 认证机制,需额外提供 256bit 的 HMAC 值。这三个参数(AES Key, StartCBC, HMAC)可手动指定或由工具随机生成,并存储于 FPGA 内部的 eFUSE 中。
Device xc7a35t;
Key 0 0f2ec1178ae0d04c8c1431afe8266d08e799b01c5c486c2567f3621f47319aaf;
Key StartCBC a6262d508c338eeab815340a7832436d;
Key HMAC d82e72733a7bd7904c802d13db37187b8ad20b972ac163470c5a4d239bce6308;
eFUSE 寄存器配置
eFUSE 用于永久存储密钥信息。重点关注控制寄存器,其中 bit0 至关重要:一旦置位且后续丢失密钥,FPGA 将变砖。建议参考官方推荐设置(如 101100),具体取决于安全需求。
实操步骤
1. 生成密钥与加密 Bit
在 Vivado 中,需先完成综合或实现设计。右键点击 Generate Bitstream,选择 Edit Device Properties。
在此界面中,找到加密选项卡。你可以输入自定义的 Key 值,或留空让软件随机生成。注意保存生成的 .nky 文件,这是后续烧录的关键。
2. 下载 eFUSE 配置
使用 JTAG 链连接开发板,进入 Program FPGAs 界面。选中目标芯片,勾选 Program Configuration Memory 和 Program eFUSE 选项。
这一步会将刚才生成的密钥写入芯片内部的非易失性存储器。务必确认操作无误,因为 eFUSE 一旦烧录不可逆。
3. 烧写 FPGA 程序
完成 eFUSE 配置后,再次烧写 Bit 流文件。此时 Bit 流已包含加密数据,FPGA 启动时会从 eFUSE 读取密钥进行解密。
4. 验证效果
最简单的验证方法是尝试将加密后的 MCS 文件烧录到另一块未配置 eFUSE 的 FPGA 上,设备将无法正常工作。或者在 eFUSE 设置中强制要求仅加载加密 Bit 流,尝试刷入普通 Bit 流也会失败。
常见问题
Q: 在 Bitstreams 的 Edit Device Property 选项中找不到 Encryption 选项?
A: 这通常是 Vivado 版本过低导致的。请升级到较新的版本(如 2018.2 及以上),旧版工具可能不支持完整的加密功能。
Q: 密钥丢了怎么办?
A: 如果 eFUSE 中的 bit0 已置位且密钥丢失,芯片将无法解密,导致永久失效。因此备份密钥文件至关重要。

