aeskeyfile - 2022.1 Chinese

Vitis 统一软件平台文档 嵌入式软件开发 (UG1400)

Document ID
UG1400
Release Date
2022-04-26
Version
2022.1 简体中文

语法

  • 对于 Zynq 器件和 FPGA:
    [aeskeyfile] <key filename>
  • 对于 Zynq UltraScale+ MPSoC
    [aeskeyfile = <keyfile name>] <partition>
  • 对于 Versal ACAP:
    { aeskeyfile = <keyfile name>, file = <filename> }

描述

指向 AES 密钥文件的路径。密钥文件包含用于加密分区的 AES 密钥。此密钥文件的内容必须写入 eFUSE 或 BBRAM。如果指定路径内不存在密钥文件,则将由 Bootgen 生成新密钥用于加密。

注释: 仅适用于 Zynq UltraScale+ MPSoC:在 BIF 文件内需指定多个密钥文件。在将使用的所有 nky 文件中,Key0、IV0 和 Key Opt 都应相同。如果任一 ELF 文件生成多个分区,则可使用来自唯一密钥文件的密钥对每个分区进行加密。请参阅以下示例。

实参

指定的文件名。

返回値

None

Zynq-7000 SoC 示例

fsbl.elf hello.elf 分区均使用 test.nky 中的密钥进行加密。

all:                                                          
{                                                             
     [keysrc_encryption] bbram_red_key                        
     [aeskeyfile] test.nky                                    
     [bootloader, encryption=aes] fsbl.elf                    
     [encryption=aes] hello.elf                               
}

密钥 (.nky) 文件样本 - test.nky

Device       xc7z020clg484;                                  
  Key 0        8177B12032A7DEEE35D0F71A7FC399027BF....D608C58; 
  Key StartCBC 952FD2DF1DA543C46CDDE4F811506228;               
  Key HMAC     123177B12032A7DEEE35D0F71A7FC3990BF....127BD89; 

Zynq UltraScale+ MPSoC 示例

示例 1:

fsbl.elf 分区使用 test.nky 中的密钥加密,hello.elf 分区使用 test1.nky 中的密钥加密,app.elf 分区使用 test2.nky 中的密钥加密。样本 BIF - test_multipl.bif
all:                                                           
{                                                              
     [keysrc_encryption] bbram_red_key                         
     [bootloader,encryption=aes,aeskeyfile=test.nky] fsbl.elf  
     [encryption=aes,aeskeyfile=test1.nky] hello.elf           
     [encryption=aes,aeskeyfile=test2.nky] app.elf             
}      

示例 2:

假设 Bootgen 为 hello.elf 创建 3 个分区,分别称为 hello.elf.0hello.elf.1hello.elf.2。样本 BIF - test_mulitple.bif

all:                                                           
{                                                              
     [keysrc_encryption] bbram_red_key                         
     [bootloader,encryption=aes,aeskeyfile=test.nky] fsbl.elf  
     [encryption=aes,aeskeyfile=test1.nky] hello.elf           
}

其它信息:

  • fsbl.elf 分区使用 test.nky 中的密钥加密。所有 hello.elf 分区都使用 test1.nky 中的密钥进行加密。
  • 将名为 test1.1.nkytest1.2.nky 的密钥文件包含在与 test1.nky 相同路径内,即可为每个 hello 分区指定专用密钥文件。
  • hello.elf.0 使用 test1.nky
  • hello.elf.1 使用 test1.1.nky
  • hello.elf.2 使用 test1.2.nky
  • 如果任一密钥文件(test1.1.nkytest1.2.nky)不存在,那么 Bootgen 会生成该密钥文件。
  • aeskeyfile 格式:

    .nky 文件接受以下字段。

    Device
    使用 nky 文件的器件的名称。针对 Zynq 器件和 Zynq UltraScale+ MPSoC 均有效。
    Keyx 和 IVx
    此处“x”表示对应于 Key/IV 编号的整数,例如,Key0、Key1、Key2 ...、IV0、IV1、IV2...AES 密钥长度必须为 256 位,而 IV 密钥长度必须为 12 个字节。Keyx 针对 Zynq 器件和 Zynq UltraScale+ MPSoC 均有效,但 IVx 仅针对 Zynq UltraScale+ MPSoC 有效。
    Key Opt
    可选密钥,可供用户用于对启动加载程序的第一个块进行加密。仅针对 Zynq UltraScale+ MPSoC 有效。
    StartCBC - CBC Key
    CBC 密钥长度必须为 128 位。仅针对 Zynq 器件有效。
    HMAC - HMAC Key
    HMAC 密钥长度必须为 128 位。仅针对 Zynq 器件有效。
    Seed
    初始种子,应用于生成分区加密所需的 Key/IV 对。AES 种子长度必须为 256 位。仅针对 Zynq UltraScale+ MPSoC 有效。
    FixedInputData
    与种子 (Seed) 一起用作为“Counter Mode KDF”(计数器模式密钥衍生函数)的输入的数据。AES 固定输入数据长度必须为 60 个字节。仅针对 Zynq UltraScale+ MPSoC 有效。
    注释:
    • Seed 必须随 FixedInputData 一起指定。
    • 如果存在多个 key/iv 对,则无需种子。

Versal ACAP 示例

all:                                                         
{                                                            
   image                                                     
   {                                                         
      name = pmc_subsys, id = 0x1c000001                     
      {                                                      
         type = bootloader, encryption = aes,                
         keysrc = bbram_red_key, aeskeyfile = key1.nky,      
         file = plm.elf                                      
      }                                                      
      {                                                      
         type = pmcdata, load = 0xf2000000,                  
         aeskeyfile = key2.nky, file = pmc_cdo.bin           
      }                                                      
      {                                                      
         type=cdo, encryption = aes,                         
         keysrc = efuse_red_key, aeskeyfile = key3.nky,      
         file=fpd_data.cdo                                   
      }                                                      
   }                                                         
}