HSM モード
IV 0 F7F8FDE08674A28DC6ED8E37;
Key Opt 229C993D1310DD27B6713749B6D07FCF8D3DCA01EC9C64778CBAF457D613508F;
2. 操作キーをデバイス キーとして使用し、暗号化されたブートローダーと残りのパーティションをまとめて完全な イメージを作成する
bootgen -arch zynqmp -image stage2a.bif -o final.bin -w on -log error stage2.bif の例:
stage2:
{ [bootimage]fsbl_e.bin
[destination_cpu=a53-0,encryption=aes,aeskeyfile=aes-opt.nky]hello.elf
[destination_cpu=a53-1,encryption=aes,aeskeyfile=aes-opt1.nky]hello1.elf
}
stage2 のaes-opt.nkyの例: Device xc7z020clg484;
Key 0 229C993D1310DD27B6713749B6D07FCF8D3DCA01EC9C64778CBAF457D613508F;
IV 0 F7F8FDE08674A28DC6ED8E37;
手順 - 2: 先のステップでは、チーム A は opt_key オプションを使用してデバイス キーでブートローダーを暗号化し、
それをチーム B に渡します。これで、チーム B は、操作キーをデバイス キーとして使用し、パーティションごとに個 別に暗号化されたイメージを作成できます。最後に、チーム B は Bootgen を使用し、暗号化されたパーティションす べてと暗号化されたブートローダーをまとめて完全なイメージを作成できます。
1. ブートローダーをデバイス キーで暗号化する
bootgen -arch zynqmp -image stage1.bif -o fsbl_e.bin -w on -log error
{ [fsbl_config] opt_key
[keysrc_encryption] bbram_red_key
[bootloader,destination_cpu=a53-0,encryption=aes,aeskeyfile=aes.nky]fsbl.
elf}
stage1 の aes.nky の例:
Device xc7z020clg484;
Key 0 AD00C023E238AC9039EA984D49AA8C819456A98C124AE890ACEF002100128932;
IV 0 F7F8FDE08674A28DC6ED8E37;
Key Opt 229C993D1310DD27B6713749B6D07FCF8D3DCA01EC9C64778CBAF457D613508F 2. 操作キーをデバイス キーとして使用し、残りのパーティションを暗号化する
bootgen -arch zynqmp -image stage2a.bif -o hello_e.bin -w on -log error stage2a.bif の例:
stage2a:
{ [destination_cpu=a53-0,encryption=aes,aeskeyfile=aes-opt.nky]hello.elf
}bootgen -arch zynqmp -image stage2b.bif -o hello1_e.bin -w on -log error stage2b.bif の例:
stage2b:
{ [aeskeyfile] aes-opt.nky
[destination_cpu=a53-1,encryption=aes,aeskeyfile=aes-opt.nky]hello1.elf
}
stage2a および stage2b のaes-opt.nkyの例: Device xc7z020clg484;
Key 0 229C993D1310DD27B6713749B6D07FCF8D3DCA01EC9C64778CBAF457D613508F;
IV 0 F7F8FDE08674A28DC6ED8E37;
3. Bootgen を使用して上記の例をまとめて完全なイメージを作成する
Use bootgen to stitch the above, to form a complete image.
stage3.bif の例:
stage3:
{ [bootimage]fsbl_e.bin [bootimage]hello_e.bin [bootimage]hello1_e.bin }
注記: aes.nky の opt_key は aes-opt.nky のキー 0 と同じで、IV 0 は両方の nky ファイルで同じである必要があり ます。
認証フロー
次の例は、FSBL およびアプリケーションに対して認証を有効にし、PPK ハッシュ値の検証をスキップしたブート ヘ ッダー認証を有効にしてブート イメージを作成する方法を示しています。
the_ROM_image:
{
[fsbl_config] bh_auth_enable
[auth_params] ppk_select=0; spk_id=0x00000000 [pskfile] PSK.pem
[sskfile] SSK.pem
[bootloader, authentication=rsa, destination_cpu=a53-0]
ZynqMP_Fsbl.elf
[destination_cpu=a53-0, encryption=aes] App_A53_0.elf }
SHA-3 eFUSE RSA 認証と PPK0 を使用する BIF ファ イル
次の例は、FSBL およびアプリケーションに対して認証を有効にし、PPK ハッシュ値の検証をスキップしたブート ヘ ッダー認証を有効にしてブート イメージを作成する方法を示しています。
the_ROM_image:
{
[auth_params] ppk_select=0; spk_id=0x00000000 [pskfile] PSK.pem
[sskfile] SSK.pem
[bootloader, authentication=rsa, destination_cpu=a53-0]
ZynqMP_Fsbl.elf
[destination_cpu=a53-0, authentication=aes] App_A53_0.elf }
XIP
次の例は、zynqmp (Zynq® UltraScale+™ MPSoC) に対して、XIP を実行するブート イメージの作成方法を示していま す。
the_ROM_image:
{
[bootloader, destination_cpu=a53-0, xip_mode] mpsoc_qspi_xip.elf }
コマンドの詳細は、xip_mode を参照してください。
属性の参照
aeskeyfile
構文
[aeskeyfile = <keyfile name>] <partition>
[aeskeyfile] <key filename>
説明
AES キー ファイルへのパスです。キー ファイルには、パーティションの暗号化に使用される AES キーが含まれます。
ファイルの内容は eFUSE または BBRAM に書き込む必要があります。キー ファイルが指定されたパスに存在しない 場合、Bootgen が暗号化に使用される新しいキーを生成します。
注記: Zynq® UltraScale+™ MPSoC のみ: 複数のキー ファイルは BIF ファイルで指定する必要があります。Key0、IV0、
および Key Opt は、使用されるすべての NKY ファイルで同じものである必要があります。ELF ファイルに対して複数 のパーティションが生成される場合、各パーティションは一意のキーファイルからのキーを使用して暗号化できま す。次の例を参照してください。
引数
指定されたファイル名。
戻り値 なし
Zynq-7000 SoC 例
fsbl.elf パーティションと hello.elf パーティションは test.nky のキーを使用して暗号化されます。
Sample BIF - test.bif all:
{ [keysrc_encryption] bbram_red_key [aeskeyfile] test.nky [bootloader, encryption=aes] fsbl.elf [encryption=aes] hello.elf }
Sample key (.nky) file - 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のキーを使用して暗号化されます。
Sample 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のhello.elf.0、hello.elf.1、およびhello.elf.2という 3 つのパーティションを 作成するとします。
Sample 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.nkyおよびtest1.2.nkyという名前のキーファイルを test1.nky と同じパスに置くことで、hello パ ーティションごとに一意のキー ファイルを使用できます。
• hello.elf.0 は test1.nky を使用
• hello.elf.1 は test1.1.nky を使用
• hello.elf.2 は test1.2.nky を使用
• キーファイル (test1.1.nkyまたはtest1.2.nky) が存在しない場合、Bootgen はそのキーファイルを生成し ます。
構文
[alignment= <value>] <partition>
バイト アライメントを設定します。パーティションは、この値の倍数値に揃えられるまでパディングされます。この 属性はオフセットと共に使用することはできません。
引数
揃えられるバイト数。
例
Sample BIF - test.bif all: {
[bootloader]fsbl.elf [alignment=64] u-boot.elf }
auth_params
• 構文:
[auth_params] ppk_select=<0|1>; spk_id <32-bit spk id>;/
spk_select=<spk-efuse/user-efuse>; auth_header 説明
認証パラメーターは、ブート イメージ内のパーティションの認証に使用する PPK、SPK などの追加設定を指定しま す。この BIF パラメーターの引数は次のとおりです。
• ppk_select: 使用する PPK を選択します。オプションは 0 (デフォルト) または 1 です。
• spk_id: 使用または取り消し可能な SPK を指定します。ユーザー eFUSE サポートおよび RSA キー取り消しの改善 を参照してください。デフォルト値は 0x00 です。
• spk_select: SPK とユーザー eFUSE を識別します。オプションは spk-efuse (デフォルト) と user_efuse です。
• header_auth: パーティションが認証されていない場合のヘッダーを認証します。
注記:
1. ppk_select は各イメージに固有です。
2. 各パーティションは固有の spk_select および spk_id を持つことができます。
3. spk-efuse id はイメージ全体で一意ですが、spk-efuse id はパーティションによって異なる場合があります。
4. パーティションの範囲外の spk_select/spk_id は、ヘッダーと、これらの指定をパーティション属性として持たな いその他のパーティションに使用されます。
例
Sample BIF 1 - test.bif all: {
[auth_params]ppk_select=0;spk_id=0x12345678 [pskfile] primary.pem
[sskfile]secondary.pem
[bootloader, authentication=rsa]fsbl.elf }
Sample BIF 2 - test.bif
all:
{ [auth_params] ppk_select=0;spk_select=user-efuse;spk_id=0x22 [pskfile] primary.pem [sskfile] secondary.pem [bootloader, authentication = rsa]
fsbl.elf
} Sample BIF 3 - test.bif
all:
{
[auth_params] ppk_select=1; spk_select= user-efuse; spk_id=0x22;
header_auth
[pskfile] primary.pem [sskfile] secondary.pem [destination_cpu=a53-0] test.elf } Sample BIF 4 - test.bif
all:
{ [auth_params] ppk_select=1;spk_select=user-efuse;spk_id=0x22 [pskfile] primary.pem [sskfile] secondary0.pem
/* FSBL - Partition-0) */
[ bootloader, destination_cpu = a53-0, authentication = rsa, spk_id = 0x12345678, spk_select = spk-efuse, sskfile = secondary1.pem ]fsbla53.elf /* Partition-1 */
[ destination_cpu = a53-1, authentication = rsa, spk_id = 0x24, spk_select = user-efuse, sskfile = secondary2.pem ]hello.elf }
構文
[authentication=<option>] <partition>
説明
認証されるパーティションを指定します。
引数
• none: パーティションは認証されない。これがデフォルト値です。
• rsa: パーティションは RSA アルゴリズムを使用して認証される。
例
Sample BIF - test.bif all:
{
[ppkfile] ppk.txt [spkfile] spk.txt
[bootloader,authentication=rsa] fsbl.elf [authentication=rsa] hello.elf }
bh_keyfile
構文
[bh_keyfile] <key file path>
説明
ブート ヘッダーに格納される 256 ビットの難読化キーまたはブラック キーです。これは、暗号化キーのソースがグ レー キーまたはブラック キーの場合にのみ有効です。
引数
難読化キーまたはブラック キーへのパス (選択されているソースによって異なる)。
例
Sample BIF - test.bif all:
{ [keysrc_encryption] bh_gry_key
[bh_keyfile] obfuscated_key.txt [bh_key_iv] obfuscated_iv.txt
[bootloader, encryption=aes, aeskeyfile=encr.nky, destination_cpu=a53-0]fsbl.elf
}
bh_key_iv
構文
[bh_key_iv] <iv file path>
説明
難読化キーまたはブラック キーを復号化する際に使用する初期化ベクターです。
引数
ファイルへのパス。
例
Sample BIF - test.bif all: {
[keysrc_encryption] bh_gry_key [bh_keyfile] obfuscated_key.txt [bh_key_iv] obfuscated_iv.txt
[bootloader, encryption=aes, aeskeyfile=encr.nky, destination_cpu=a53-0]fsbl.elf
}
bhsignature
構文
[bhsignature] <signature-file>
説明
ブート ヘッダーの署名を認証証明にインポートします。これは、秘密キー PSK を共有しない場合に使用できます。
署名を作成して Bootgen に与えることができます。
{
[ppkfile] ppk.txt [spkfile] spk.txt
[spksignature] spk.txt.sha384.sig [bhsignature] bootheader.sha384.sig [bootloader,authentication=rsa] fsbl.elf }
blocks
構文
[blocks = <size><num>;<size><num>;...;<size><*>] <partition>
説明
暗号化におけるキー ローリング機能のブロック サイズを指定します。各モジュールは独自のキーを使用して暗号化 されます。最初のキーはデバイスのキーソースで格納され、後続の各モジュールのキーは直前のモジュール内で暗号 化 (ラップ) されます。
引数
指定した <size> は、バイト単位で取り込まれます。サイズが X(*) として指定されている場合、残りのブロックのサイ ズはすべて「X」になります。
例
Sample BIF - test.bif all: {
[keysrc_encryption] bbram_red_key
[bootloader,encryption=aes, aeskeyfile=encr.nky,
destination_cpu=a53-0,blocks=4096(2);1024;2048(2);4096(*)]
fsbl.elf }
注記: 上記の例では、最初の 2 つのブロックは 4096 バイトで、2 番目のブロックは 1024 バイトで、次の 2 つのブロ ックは 2048 バイトです。残りのブロックは 4096 バイトです。
boot_device
構文
[boot_device] <options>
説明
セカンダリ ブート デバイスを指定します。パーティションが存在するデバイスを示します。
引数
オプションは次のとおりです。
• qspi32
• qspi24
• nand
• sd0
• sd1
• sd-ls
• mmc
• usb
• ethernet
• pcie
• sata
例 all: {
[boot_device]sd0
[bootloader,destination_cpu=a53-0]fsbl.elf }
bootimage
構文
[bootimage] <image created by bootgen>
説明
続くファイルの仕様が Bootgen によって作成されたブート イメージであり、入力として再利用されることを指定しま す。
引数
指定されたファイル名。
all: {
[bootimage]fsbl.bin [bootimage]system.bin }
上記の例では、fsbl.bin および system.bin は Bootgen を使用して生成されたイメージです。
fsbl.bin 生成の例 image:
{
[pskfile] primary.pem [sskfile] secondary.pem
[bootloader, authentication=rsa, aeskeyfile=encr_key.nky, encryption=aes] fsbl.elf
}
Command: bootgen -image fsbl.bif -o fsbl.bin -encrypt efuse system.bin 生成の例
image:
{
[pskfile] primary.pem [sskfile] secondary.pem
[authentication=rsa] system.bit }
Command: bootgen -image system.bif -o system.bin
bootloader
構文
[bootloader] <partition>
説明
ELF ファイルを FSBL として認識します。
• この属性は ELF ファイルのみに適用可能です。
• 1 ファイルのみブートローダーに指定可能です。
• この ELF ファイルのプログラム ヘッダーには、ファイル サイズ > 0 の LOAD セクションが 1 つだけ必要です。こ のセクションは実行可能でなければなりません (xフラグを設定する必要がある)。
引数
指定されたファイル名。
例
Sample BIF - test.bif all: {
[bootloader] fsbl.elf hello.elf
}
bootvectors
構文
[bootvectors] <values>
説明
この属性は、XIP (eXecute In Place) のベクター テーブルを指定します。
例 all: {
[bootvectors]0x14000000,0x14000000,0x14000000,0x14000000,0x14000000,0x140000 00,0x14000000,0x14000000
[bootloader,destination_cpu=a53-0]fsbl.elf }
checksum
構文
[checksum = <options>] <partition>
説明
チェックサムを実行する必要があるパーティションを指定します。認証や暗号化などのよりセキュアな機能と共に使 用することはできません。
引数
• none: チェックサムなし。
• MD5: Zynq®-7000 SoC デバイスの MD5 チェックサム。このデバイスでは、チェックサムはブートローダーでサ
ポートされていません。
• SHA3: Zynq® UltraScale+™ MPSoC デバイスのチェックサム。
構文
[destination_cpu <options>] <partition>
説明
パーティションをどのコアで実行するかを指定します。次の例では、FSBL を A53-0 コアで実行し、アプリケーショ ンを R5-0 コアで実行するように指定します。
注記:
• FSBL は、A53-0 または R5-0 のいずれかでのみ実行できます。
• FSBL によってロードされる PMU: [destination_cpu=pmu] pmu.elf。このフローでは、最初に bootROM が FSBL をロードし、続いて FSBL が PMU ファームウェアをロードします。
• bootROM によってロードされる PMU: [pmufw_image] pmu.elf。このフローでは、bootROM が PMU をロー
ドした後に FSBL のロードが続くため、PMU は FSBL が起動する前に電力管理タスクを実行します。
引数
• a53-0
• a53-1
• a53-2
• a53-3
• r5-0 (デフォルト)
• r5-1
• r5-lockstep
• pmu
例
Sample BIF - test.bif all: {
[bootloader,destination_cpu=a53-0]fsbl.elf [destination_cpu=r5-0] app.elf
}
destination_device
構文
[destination_device <options>] <partition>