開発環境での操作キーを使用したデバイス キーの保護 - 2022.1 日本語

Vitis 統合ソフトウェア プラットフォームの資料: エンベデッド ソフトウェア開発 (UG1400)

Document ID
UG1400
Release Date
2022-04-26
Version
2022.1 日本語

次に、秘密レッド キーを管理するチーム A (セキュア チーム) とチーム B (非セキュア チーム) の 2 つの開発チームが共同で作業している場合に、秘密レッド キーを共有せずに暗号化されたイメージをビルドする手順を説明します。チーム A は秘密レッド キーを管理します。チーム B は、開発およびテスト用に暗号化されたイメージをビルドしますが、秘密レッド キーにはアクセスできません。

チーム A はデバイス キー (Op_key (操作キー) オプションを使用) を使用してブートローダーを暗号化し、それをチーム B に渡します。チーム B は Op_key を使用してその他すべてのパーティションを暗号化します。

チーム B は、Bootgen を使用して、暗号化したパーティションとチーム A から受け取った暗号化されたブートローダーを 1 つの boot.bin にまとめます。

次に、イメージを作成する手順を説明します。

手順 - 1

まず、チーム A が opt_key を使用してデバイス キーでブートローダーを暗号化し、それをチーム B に渡します。チーム B は、操作キーをデバイス キーとして使用し、すべてのパーティションと暗号化されたブートローダーをまとめて完全なイメージを作成します。

  1. ブートローダーをデバイス キーで暗号化します。
    bootgen -arch zynqmp -image stage1.bif -o fsbl_e.bin -w on -log error
    stage1.bif:
    stage1:
    {
    	[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 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
    stage1.bif:
    stage1:
    {
    	[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 ファイルで同じである必要があります。