aeskeyfile - 2024.1 简体中文

Bootgen 用户指南 (UG1283)

Document ID
UG1283
Release Date
2024-05-30
Version
2024.1 简体中文

语法

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

描述

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

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

实参

指定的文件名。

返回値

Zynq 7000 SoC 示例

fsbl.elfhello.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 自适应 SoC 示例

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 } } }