适用于 7 系列、 UltraScale 和 UltraScale+ FPGA 和 MPSoC 的回读和验证
为 7 系列器件生成已加密文件和已经过身份验证的文件
注释 : 如需获取其它信息 , 请参阅《使用加密确保 7 系列 FPGA 比特流的安全》 ( XAPP1239 ) 。
要生成加密比特流 , 请在 Vivado IDE 中打开已实现的设计。在主工具栏中 , 依次选择“ Flow ” → “ Bitstream Settings” , 这样会显示“设置 (Settings) ”对话框。在此对话框顶部单击“ Configure Additional Bitstream Settings”。
这样会显示“编辑器件属性 (Edit Device Properties) ”对话框。选择左侧窗格中的“ Encryption ”。
在“编辑器件属性 (Edit Device Properties) ”对话框中 , 指定加密和密钥设置 :
• 加密设置 (Encryption Settings)
○
“ Enable Bitstream Encryption ”可设置为“ YES ”。
○
“ Select location of encryption key ”可设置为“ BBRAM ”或“ EFUSE ”。
- 密钥位置将嵌入加密比特流中。
- 当加密比特流下载至器件后 , 它会指令 FPGA 使用已加载到 BBR 或 eFUSE 密钥寄存器中的密钥来对加密的 比特流进行解密。
• 密钥设置 (Key Settings)
○
指定 HMAC 身份验证密钥和密码分组链接 (CBC) 起始值。
- 如果不指定这些值 , 则 Vivado 会为您生成随机值。
- 这些值将嵌入加密比特流 , 而无需编程到 FPGA 中。
注释 : 除非指定输入加密文件 , 否则这些值将存储在当前工程约束文件中。要避免将该值存储在约束文件中 , 请指定输入加密文件。
○
“ AES encryption key ”用于指定对比特流进行加密时要使用的加密密钥。您可使用最多 64 个十六进制字符来 指定 256 位密钥。
- 此密钥将写入含 .nky 文件扩展名的文件中。将该密钥加载到 BBR 中时 , 或者将该密钥编程到 eFUSE 密钥 寄存器中时, 请使用此文件。
注释 : 除非指定输入加密文件 , 否则这些值将存储在当前工程约束文件中。要避免将该值存储在约束文件中 , 请指定输入加密文件。
○
指定输入加密文件。
- 指定现有 .nky 文件即可获取加密密钥设置。该字段为可选字段 , 如果手动指定 AES 、 HMAC 和 CBC , 则 可省略该字段。 指定加密设置后, 请单击“ OK ”以将设置应用于工程并重新生成比特流。成功完成 write_bitstream 操作后 , 将得到 1 个编程文件和 1 个 .nky 加密文件。
为 UltraScale 和 UltraScale+ 生成已加密文件和已经过 身份验证的文件
注释 : 如需了解更多信息 , 请参阅《使用加密和身份验证确保 UltraScale/UltraScale+ FPGA 比特流的安全》 ( XAPP1267 ) 。 要生成加密比特流, 请在 Vivado IDE 中打开已实现的设计。在主工具栏中 , 依次选择“ Flow ” → “ Bitstream Settings” , 这样会显示“设置 (Settings) ”对话框。在此对话框顶部 , 单击“ Configure Additional Bitstream Settings”。
这样会显示“编辑器件属性 (Edit Device Properties) ”对话框。选择左侧窗格中的“ Encryption ”。
在“ Edit Device Properties ”对话框中 , 指定“ Encryption Settings ”和“ Key Settings ” :
• “ Encryption Settings ”
○
“ Enable Bitstream Encryption ”可设置为“ YES ”。
○
“ Select location of encryption key ”可设置为“ BBRAM ”或“ EFUSE ”。
- 密钥位置会嵌入加密比特流中。
- 当加密比特流下载至器件后 , 它会指令 FPGA 使用已加载到 BBR 或 eFUSE 密钥寄存器中的密钥来对加密的 比特流进行解密。
○
“ Enable obfuscated key load ”可设置为“ ENABLE ”或“ DISABLE ”。
- 启用此项后 , 此用户生成的密钥将先经过加密 , 随后再被存储到 BBRAM 中。如果禁用此项 , 那么此密钥将 “按现状”直接存储到 BBRAM 中。
• “ Key Settings ”
○
“ Starting AES encryption key (key0) ”用于指定对比特流进行加密时要使用的加密密钥。您可使用最多 64 个十 六进制字符来指定 256 位密钥。
- 此密钥将写入含 .nky 文件扩展名的文件中。将该密钥加载到 BBR 中时 , 或者将该密钥编程到 eFUSE 密钥 寄存器中时, 请使用此文件。
○
注释 : 除非指定输入加密文件 , 否则该值将存储在当前工程约束文件中。要避免将该值存储在约束文件中 , 请 指定输入加密文件。
○
“ Input encryption file ”用于指定输入加密文件。
- 指定现有 .nky 文件即可获取加密密钥设置。该字段为可选字段 , 如果手动指定 AES 、 HMAC 和 CBC , 则 可省略该字段。
○
“ Starting AES initial vector (IV0) value ”用于指定输入加密文件。
- 对应第一个密钥的初始化矢量。请注意 , 每个密钥都需要 1 个独立的初始化矢量值 , 该值可通过输入加密文 件来提供。
○
注释 : 该值将存储在当前工程约束文件中。要避免将该值存储在约束文件中 , 请指定输入加密文件。
○
“ Starting obfuscate initial vector (Obfuscate IV0) value ”用于指定输入加密文件。
- 对应模糊密钥的初始化矢量。
○
注释 : 该值将存储在当前工程约束文件中。要避免将该值存储在约束文件中 , 请指定输入加密文件。
• “ Key Rolling Settings ”
○
如需生成调试文件以报告 KDF 模式下生成的所有密钥 , 请指定“ debug file to report all the keys generated in KDF mode”。
○
“ Fixed Input Data for KDF keyrolling ”可指定用于 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 ”。
在“ 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 寄存器中 , 然后再下载加密比特流。