• 検索結果がありません。

F7F8FDE08674A28DC6ED8E37;

ドキュメント内 Bootgen ユーザー ガイド (UG1283) (ページ 82-130)

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.elfhello.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>

ドキュメント内 Bootgen ユーザー ガイド (UG1283) (ページ 82-130)

関連したドキュメント