下图显示了使用 HSM 模式时的阶段 0 到阶段 2 启动栈。它通过分发 SSK 来减少步骤数量。
此图使用 AMD Zynq™ UltraScale+™ MPSoC 器件来演示各阶段。
图 1. 通用 3 阶段启动镜像
启动流程
使用 HSM 模式创建启动镜像与使用标准流程利用以下 BIF 文件创建启动镜像类似。
all:
{
[auth_params] ppk_select=1;spk_id=0x8
[keysrc_encryption]bbram_red_key
[pskfile]primary.pem
[sskfile]secondary.pem
[
bootloader,
encryption=aes,
aeskeyfile=aes.nky,
authentication=rsa
]fsbl.elf
[destination_cpu=a53-0,authentication=rsa]hello_a53_0_64.elf
}
阶段 0:使用 HSM 模式创建启动镜像
可信人员使用主私钥创建 SPK 签名。SPK 签名位于身份验证证书头文件、SPK 和 SPK ID 上。要为上述对象生成散列,请使用以下 BIF 文件代码片段。
stage 0:
{
[auth_params] ppk_select=1;spk_id=0x3
[spkfile]keys/secondary.pub
}
以下是 Bootgen 命令:
bootgen -arch zynqmp -image stage0.bif -generate_hashes
此命令的输出为 secondary.pub.sha384。
阶段 1:分发 SPK 签名
可信人员向开发团队分发 SPK 签名。
openssl rsautl -raw -sign -inkey keys/primary0.pem -in secondary.pub.sha384 > secondary.pub.sha384.sig
此命令的输出为 secondary.pub.sha384.sig
阶段 2:在 FSBL 中使用 AES 进行加密
开发团队使用 Bootgen 创建所需数量的启动镜像。开发团队使用:
- 来自可信人员的 SPK 签名。
- SSK、SPK 和 SPKID
Stage2:
{
[keysrc_encryption]bbram_red_key
[auth_params] ppk_select=1;spk_id=0x3
[ppkfile]keys/primary.pub
[sskfile]keys/secondary0.pem
[spksignature]secondary.pub.sha384.sig
[bootloader,destination_cpu=a53-0, encryption=aes, aeskeyfile=aes0.nky, authentication=rsa] fsbl.elf
[destination_cpu=a53-0, authentication=rsa] hello_a53_0_64.elf
}
Bootgen 命令为:
bootgen -arch zynqmp -image stage2.bif -o final.bin