操作キーを使用した開発環境のデバイス キーの保護

ここでは、秘密のレッド キーを管理するチーム 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 ファイルで同じである必要があります。