次の図に、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 にあります。上記のためのハッシュを生成するには、次の 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