要生成加密比特流,请在 Vivado IDE 中打开已实现的设计。在主工具栏中,依次选择 (流程 > 比特流设置),这样即可显示“Settings”(设置)对话框。在此对话框顶部,单击Configure Additional Bitstream Settings(配置其他比特流设置)。
图 1.
UltraScale 和 UltraScale+ 配置其他比特流设置
这样会显示“Edit Device Properties”(编辑器件属性)对话框。选择左侧窗格中的Encryption(加密)。
图 2.
UltraScale 配置加密设置
在“Edit Device Properties”对话框中,指定Encryption Settings(加密设置)和Key Settings(密钥设置),如下所示。
Encryption Settings(加密设置)
- 将Enable Bitstream Encryption(启用比特流加密)设为YES(是)。
- 将Select location of encryption key(选择加密密钥位置)设为BBRAM或EFUSE。
- 密钥位置会嵌入加密比特流中。
- 当加密比特流下载至器件后,它会指令 FPGA 使用已加载到 BBR 或 eFUSE 密钥寄存器中的密钥来对加密的比特流进行解密。
Key Settings(密钥设置)
- 指定加密比特流时要使用的Starting AES encryption key (key0)(起始 AES 加密密钥 (key0))。您可使用最多 64 个十六进制字符来指定 256 位密钥。
- 此密钥将写入含 .nky 文件扩展名的文件中。将该密钥加载到 BBR 中时,或者将该密钥编程到 eFUSE 密钥寄存器中时,请使用此文件。
注释: 除非指定输入加密文件,否则该值将存储在当前工程约束文件中。要避免将该值存储在约束文件中,请指定输入加密文件。 - Specify Input encryption file(指定输入加密文件):指定现有 .nky 文件即可获取加密密钥设置。该字段为可选字段,如果手动指定 AES、HMAC 和 CBC,则可省略该字段。
- 指定Starting AES initial vector (IV0) value(起始 AES 初始矢量 (IV0) 值)。选择对应第一个密钥的初始化矢量。 注释: 每个密钥都需要 1 个独立的初始化矢量值,该值可通过输入加密文件来提供。注释: 该值将存储在当前工程约束文件中。要避免将该值存储在约束文件中,请指定输入加密文件。
- 指定“Starting obfuscate initial vector (Obfuscate IV0)”(起始模糊初始矢量(模糊 IV0))值。选择对应模糊密钥的初始化矢量。注释: 该值将存储在当前工程约束文件中。要避免将该值存储在约束文件中,请指定输入加密文件。
Key Rolling Settings(密钥滚动设置)
- 指定是否应生成调试文件以报告 KDF 模式下生成的所有密钥。
- 指定“Fixed Input Data for KDF key rolling”(用于 KDF 密钥滚动的固定输入数据)。该值为可选 60 字节固定输入值,并指定为 120 位十六进制值。此 60 字节输入搭配 4 字节计数器即可通过 RAND_bytes 充当 KDF 虚拟随机固定输入值的 64 字节输入。
- 指定“Seed for KDF Keyrolling”(用于 KDF 密钥滚动的种子值)。该值为 KDF 的可选 32 字节种子值,指定为 64 位十六进制值。
- 指定“Number of encryption blocks per key”(每个密钥的加密块数)和“Number of frames per AES-256 key”(每个 AES-256 密钥的帧数)。加密块数和帧数用于指定使用不同密钥将每个比特流分成多少节。
要执行身份验证设置,请选择左侧窗格中的Authentication(身份验证)
图 3. Edit Device Properties - Authentication
在“Edit Device Properties - Authentication”(编辑器件属性 - 身份验证)对话框中,指定如下加密和密钥设置:
Authentication Settings
- 将Enable Bitstream Authentication(启用比特流身份验证)设置为“YES”(是)。
- 指定“Input file containing RSA Private Key”(包含 RSA 专用密钥的输入文件)。
-
指定加密和身份验证设置后提供 RSA 专用密钥,单击OK(确定),这样即可将这些设置应用于工程。重新运行实现,并重新生成比特流文件。成功完成
write_bitstream
操作后,生成的 .nky 加密密钥文件将显示在加密比特流文件所在目录中。
您可通过使用 256 位高级加密标准 (AES) 密钥加密比特流,下载这些比特流,并仅在经授权的 FPGA 上运行来保护比特流中的 IP。具体方法是将 256 位密钥编程到经授权的 FPGA 的 BBR 寄存器中,然后再下载加密比特流。