为 UltraScale 和 UltraScale+ 生成已加密文件和已经过身份验证的文件 - 2023.2 简体中文

Vivado Design Suite 用户指南: 编程和调试 (UG908)

Document ID
UG908
Release Date
2023-10-19
Version
2023.2 简体中文
注释: 如需了解更多信息,请参阅 使用加密和身份验证确保 UltraScale/UltraScale+ FPGA 比特流的安全 (XAPP1267)。

要生成加密比特流,请在 Vivado IDE 中打开已实现的设计。在主工具栏中,依次选择Flow > Bitstream Settings(流程 > 比特流设置),这样即可显示“Settings”(设置)对话框。在此对话框顶部,单击Configure Additional Bitstream Settings(配置其他比特流设置)。

图 1. UltraScaleUltraScale+ 配置其他比特流设置

这样会显示“Edit Device Properties”(编辑器件属性)对话框。选择左侧窗格中的Encryption(加密)。

图 2. UltraScale 配置加密设置

在“Edit Device Properties”对话框中,指定Encryption Settings(加密设置)和Key Settings(密钥设置),如下所示。

Encryption Settings(加密设置)

  • Enable Bitstream Encryption(启用比特流加密)设为YES(是)。
  • Select location of encryption key(选择加密密钥位置)设为BBRAMEFUSE
    • 密钥位置会嵌入加密比特流中。
    • 当加密比特流下载至器件后,它会指令 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 寄存器中,然后再下载加密比特流。