3 つのキーペアを作成する
UEFI Secure Boot は、プラットフォームキー (PK)、キー交換キー (KEK)、署名データベース (db) という 3 つのキーデータベースに基づいおり、これらのデータベースは信頼チェーンで使用されます。
インスタンスでは、これらの各キーを作成する必要があります。UEFI Secure Boot 標準が有効な形式でパブリックキーの準備を行うには、それぞれのキー用に証明書を作成します。DER
では SSL 形式 (バイナリエンコード用の形式) を定義しています。その後、各証明書を UEFI 署名リストに変換します。このリストはバイナリ形式で、UEFI Secure Boot による解析が可能です。最後に、関連するキーで各証明書に署名します。
トピック
キーペアの作成を準備するには
キーペアを作成する前に、キー生成処理で使用するための、グローバルで一意の識別子 (GUID) を作成します。
-
シェルプロンプトで、次のコマンドを実行します。
uuidgen --random > GUID.txt
キーペア 1: プラットフォームキー (PK) を作成します。
PK は UEFI Secure Boot インスタンスの信頼のルートです。プライベート PK は KEK を更新するために使用されます。このキーはその後、認証されたキーを署名データベース (db) に追加するためにも使用されます。
キーペアの作成には、X.509 標準が適用されます。標準の詳細については、ウィキペディアで「X.509
PK を作成するには
-
キーを作成します。変数
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=
– キーの共通名 (CN)。ここでは、Platform key
Platform key
の代わりに組織の独自の名前を入力できます。
-
-
証明書を作成します。
openssl x509 -outform DER -in PK.crt -out PK.cer
-
証明書を UEFI 署名リストに変換します。
cert-to-efi-sig-list -g "$(< GUID.txt)" PK.crt PK.esl
-
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 を作成するには
-
キーを作成します。
openssl req -newkey rsa:4096 -nodes -keyout KEK.key -new -x509 -sha256 -days 3650 -subj "/CN=Key Exchange Key/" -out KEK.crt
-
証明書を作成します。
openssl x509 -outform DER -in KEK.crt -out KEK.cer
-
証明書を UEFI 署名リストに変換します。
cert-to-efi-sig-list -g "$(< GUID.txt)" KEK.crt KEK.esl
-
プライベート PK で署名リストに署名します。
sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt KEK KEK.esl KEK.auth
キーペア 3: 署名データベース (db) を作成します
db リストには、システム上で起動することが認証されているキーが記載されています。このリストを変更する場合は、プライベート KEK が必要です。ブートイメージは、このステップで作成したプライベートキーで署名されます。
db を作成するには
-
キーを作成します。
openssl req -newkey rsa:4096 -nodes -keyout db.key -new -x509 -sha256 -days 3650 -subj "/CN=Signature Database key/" -out db.crt
-
証明書を作成します。
openssl x509 -outform DER -in db.crt -out db.cer
-
証明書を UEFI 署名リストに変換します。
cert-to-efi-sig-list -g "$(< GUID.txt)" db.crt db.esl
-
プライベート 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