3 つのキーペアを作成する - Amazon Elastic Compute Cloud

3 つのキーペアを作成する

UEFI Secure Boot は、プラットフォームキー (PK)、キー交換キー (KEK)、署名データベース (db) という 3 つのキーデータベースに基づいおり、これらのデータベースは信頼チェーンで使用されます。

インスタンスでは、これらの各キーを作成する必要があります。UEFI Secure Boot 標準が有効な形式でパブリックキーの準備を行うには、それぞれのキー用に証明書を作成します。DER では SSL 形式 (バイナリエンコード用の形式) を定義しています。その後、各証明書を UEFI 署名リストに変換します。このリストはバイナリ形式で、UEFI Secure Boot による解析が可能です。最後に、関連するキーで各証明書に署名します。

キーペアの作成を準備するには

キーペアを作成する前に、キー生成処理で使用するための、グローバルで一意の識別子 (GUID) を作成します。

  1. インスタンスに接続します。

  2. シェルプロンプトで、次のコマンドを実行します。

    uuidgen --random > GUID.txt

キーペア 1: プラットフォームキー (PK) を作成します。

PK は UEFI Secure Boot インスタンスの信頼のルートです。プライベート PK は KEK を更新するために使用されます。このキーはその後、認証されたキーを署名データベース (db) に追加するためにも使用されます。

キーペアの作成には、X.509 標準が適用されます。標準の詳細については、ウィキペディアで「X.509」を参照してください。

PK を作成するには
  1. キーを作成します。変数 PK に名前を付ける必要があります

    openssl req -newkey rsa:4096 -nodes -keyout PK.key -new -x509 -sha256 -days 3650 -subj "/CN=Platform key/" -out PK.crt

    以下の各パラメータが指定されます。

    • -keyout PK.key – プライベートキーファイル。

    • -days 3650 – 証明書が有効な日数。

    • -out PK.crt – UEFI 変数の作成に使用される証明書。

    • CN=Platform key – キーの共通名 (CN)。ここでは、Platform key の代わりに組織の独自の名前を入力できます。

  2. 証明書を作成します。

    openssl x509 -outform DER -in PK.crt -out PK.cer
  3. 証明書を UEFI 署名リストに変換します。

    cert-to-efi-sig-list -g "$(< GUID.txt)" PK.crt PK.esl
  4. UEFI 署名リストに (自己署名の) プライベート PKで署名します。

    sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt PK PK.esl PK.auth

キーペア 2: キー交換キー (KEK) を作成します

プライベート KEK は db にキーを追加するために使用されます。このデータベースは、システム上で起動が許可された署名のリストです。

KEK を作成するには
  1. キーを作成します。

    openssl req -newkey rsa:4096 -nodes -keyout KEK.key -new -x509 -sha256 -days 3650 -subj "/CN=Key Exchange Key/" -out KEK.crt
  2. 証明書を作成します。

    openssl x509 -outform DER -in KEK.crt -out KEK.cer
  3. 証明書を UEFI 署名リストに変換します。

    cert-to-efi-sig-list -g "$(< GUID.txt)" KEK.crt KEK.esl
  4. プライベート PK で署名リストに署名します。

    sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt KEK KEK.esl KEK.auth

キーペア 3: 署名データベース (db) を作成します

db リストには、システム上で起動することが認証されているキーが記載されています。このリストを変更する場合は、プライベート KEK が必要です。ブートイメージは、このステップで作成したプライベートキーで署名されます。

db を作成するには
  1. キーを作成します。

    openssl req -newkey rsa:4096 -nodes -keyout db.key -new -x509 -sha256 -days 3650 -subj "/CN=Signature Database key/" -out db.crt
  2. 証明書を作成します。

    openssl x509 -outform DER -in db.crt -out db.cer
  3. 証明書を UEFI 署名リストに変換します。

    cert-to-efi-sig-list -g "$(< GUID.txt)" db.crt db.esl
  4. プライベート KEK を使用して署名リストに署名します。

    sign-efi-sig-list -g "$(< GUID.txt)" -k KEK.key -c KEK.crt db db.esl db.auth

ブートイメージ (カーネル) にプライベートキーで署名する

Ubuntu 22.04 の場合、以下のイメージに署名が必要です。

/boot/efi/EFI/ubuntu/shimx64.efi /boot/efi/EFI/ubuntu/mmx64.efi /boot/efi/EFI/ubuntu/grubx64.efi /boot/vmlinuz
イメージに署名するには

イメージに署名するには、以下の構文を使用します。

sbsign --key db.key --cert db.crt --output /boot/vmlinuz /boot/vmlinuz
注記

署名は、すべての新しいカーネルに対して行う必要があります。通常、/boot/vmlinuz は、最近インストールしたカーネルへのシンボリックリンクとなります。

ブートチェーンおよび必要なイメージは、ディストリビューションのドキュメントで確認してください。

¹ ArchWiki コミュニティの皆さんから提供された、すべての作業に感謝します。PK の作成、KEK の作成、DB の作成、およびイメージへの署名のためのコマンドは、Creating keys から提供されており、ArchWiki メンテナンスチームおよび (または) ArchWiki のコントリビューターによって作成されたものです。